sourcetip

다른 스키마의 사용자에게 권한 부여

fileupload 2023. 9. 25. 22:55
반응형

다른 스키마의 사용자에게 권한 부여

스키마 A에 테이블이 있습니다.스키마 A의 테이블을 이용하여 스키마 B에서 뷰를 작성하였습니다.

스키마 B의 뷰에서 데이터를 선택할 수 있는 권한을 사용자에게 부여하고 싶습니다.

이것이 작동하려면 스키마 A의 테이블에서 사용자 B에게 grant 옵션을 활성화해야 한다는 것을 알고 있습니다.하지만 저는 하나의 스크립트로 하고 싶습니다(이 스크립트는 스키마 B에 있어야 합니다).스키마 A의 사용자 이름/비밀번호를 사용하여 이를 수행할 수 있는 방법이 있습니까?

변경사항을 배포하기 위해 스크립트를 하나만 사용하는 것은 드문 일이 아닙니다.문제는 이러한 스크립트가 ANY 수준의 시스템 권한을 가져야 하기 때문에 파워 유저에 의해 실행되어야 한다는 것입니다.이는 일반적으로 DBA 계정, 가급적 애플리케이션 계정을 의미하지만 그렇지 않으면 SYSTEM 또는 SYS를 의미합니다.

따라서 원하는 스크립트는 다음과 같습니다.

grant select on user_a.t23 to user_b
/
grant select on user_a.t42 to user_b
/
create view user_b.v_69 as
select t23.col1, t42.col2
from   user_a.t42
       join user_a.t23
           on (t42.id = t23.id)
/
grant select on user_b.v_69 to user_c
/

일반적인 시나리오는 서로 다른 사용자에 의해 실행되도록 작성되었지만 이제는 단일 배포로 번들화해야 하는 일련의 개별 스크립트가 있다는 것입니다.원래 스크립트에는 스키마 이름이 포함되어 있지 않으며 스크립트에서 하드코드화를 원하지 않는 여러 가지 이유가 있습니다.

마스터 스크립트를 구축하는 한 가지 방법은 CURRENT_SCHEMA 구문을 변경하는 것입니다.

alter session set current_schema=USER_A
/
@run_grants_to_userb.sql

alter session set current_schema=USER_B
/
@create_view69.sql
@run_grants_to_userc.sql

마스터 스크립트를 실행하려면 DBA 사용자가 여전히 필요합니다.현재 스키마를 전환하는 것의 한 가지 장점은 데이터베이스 링크와 같은 객체를 배포할 수 있다는 것입니다. 데이터베이스 링크는 구문의 quirk를 통해 스키마 이름을 선언에 포함할 수 없습니다.한 가지 문제점은 사용자가 변하지 않기 때문에 사용자 의사열을 사용하는 스크립트가 원하지 않는 결과를 초래할 수 있다는 것입니다.

쿼리 실행만 하면 됩니다.

표 1에서 스키마 2에 삽입, 선택, 업데이트, 삭제 허가;

특정 시점에서 사용자 A로 연결해야 합니다.원하는 경우 하나의 스크립트에서 수행할 수 있습니다.

connect userA/passwordA
grant select on my_table to userB;
connect userB/passwordB
create view my_view as select * from userA.my_table;

물론 지금은 스크립트를 읽을 수 있는 모든 사용자에게 두 개의 사용자 자격 증명 집합을 노출하는 스크립트가 있습니다.예를 들어, 생산을 하기 전에 곰곰이 생각해봐야 할 것이 있습니다.

보기에서 다른 사용자를 선택할 수 있도록 하려면 다음 권한을 명시적으로 부여할 필요가 없습니다.userA.my_table보기 소유자가 기본 테이블을 볼 수 있는 한 다른 사용자는 보기를 볼 수 있으면 됩니다.기본 테이블에서 선택한 데이터만 전 세계에 노출하도록 보기를 제한할 수 있기 때문에 이는 종종 핵심(또는 그 중 하나)이 됩니다.스키마 A에서 뷰를 생성하지 않은 이유가 있다고 생각합니다.

사용자 B가 다른 사용자에게 A의 테이블에 대한 선택을 허용할 수 있도록 관리 옵션이 있는 사용자 B에게 선택을 허용하는 것에 대해 정말로 묻고 있는지 잘 모르겠습니다.그것이 가능하다면, 그것은 좋은 생각이 아닌 것 같고, 뷰가 작동하는 데 필요하지도 않습니다.

A 사용자가 B에게 자신의 테이블을 선택하고 'grant 옵션'을 포함하도록 합니다.

사용자 A로서:

GRANT select ON table TO user_b WITH GRANT OPTION;

사용자 B가 사용자 A에게 자신의 보기를 선택하고 '그랜트 옵션'을 포함하도록 합니다.

사용자 B로서:

GRANT select ON view TO user_a WITH GRANT OPTION;

사용자 A로서:

GRANT select on user_b.view TO user_c;

이를 통해 A 사용자는 다른 사용자에게 이 보조금을 전달할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4220094/granting-permission-to-users-on-different-schema

반응형