2013-05-31 4 views
0

저는 Oracle 11gR2를 사용하고 있으며 두 개의 스키마 - AB을 가지고 있으며 각각 CUSTOMER 테이블을 가지고 있습니다.트리거 내 다른 스키마로의 업데이트 만 허용

B.CUSTOMER이 업데이트되면 A.CUSTOMER에 동일한 업데이트가 수행되기를 바랍니다. 스키마 A는 스키마 B에 대한 모든 권한을 가지고 있지만 가능한 한 스키마 B에 대한 권한을 스키마 B에 갖기를 원합니다.

난 B.를 스키마 절차에서 실행 B.CUSTOMER%ROWTYPE 변수를 받아 A.CUSTOMER를 업데이트하는 데 사용하며, 허가 스키마 A의 절차, A.UPDATE_CUSTOMER

I 만들어

업데이트 트리거 후 각 행 이 업데이트 절차를 호출하는 B.CUSTOMER에 있으며 원하는대로 작동합니다. 하지만 나는 사용자 B가 트리거 밖에서 프로 시저를 명시 적으로 호출 할 수 있다고 생각하고 있으며이를 허용하고 싶지 않습니다.

A.UPDATE_CUSTOMER이 트리거 외부에서 B에 의해 호출되는 것을 방지 할 수있는 방법이 있습니까? 또는 사용자 B가 트리거 외부에서 A.CUSTOMER을 업데이트하지 못하도록 다른 방법이 있습니까?

답변

0

내가 생각할 수있는 유일한 자연적인 방법은 B에 대한 "세션 만들기"를 허용하지 않고 필요한 권한이 부여 된 사용자 C가 만든 B의 스키마를 변경하는 것입니다. 물론 C는 A의 스키마에 대한 특권을 가지지 않을 것입니다.

나는 트리거가 암시 적으로 authid definer을 있다고 생각,하지만 트리거가있는 프로 시저를 호출 할 수 있다면.