테이블에 대한 권한을 role 에 주는 것과 바로 유저에게 주는 것에 차이가 있을까?
ex) grant select on tabA to roleA VS grant select on tabA to userA
두 경우 모두 테이블을 직접 사용하는 것에는 차이가 없다.
하지만 만약 role 로 부여받은 권한으로 pl/sql 을 작성하려고 하면 에러가 날 것이다.
============== 테스트 스크립트 =================
-- 1. 테이블 오너 tab_user, 프로시져를 생성할 ddl_user 생성
create user tab_user identified by "q1w2e3r4";
conn tab_user/"q1w2e3r4"
create user ddl_user identified by "q1w2e3r4";
conn ddl_user/"q1w2e3r4"
grant resource to tab_user;
grant connect to tab_user;
grant resource to ddl_user;
grant connect to ddl_user;
alter user tab_user quota 30M on users;
-- 2. 프로시저에 쓰일 테스트 테이블, 데이터 생성
create table tab_user.ddltest(
a int
) ;
insert into tab_user.ddltest values(1);
commit;
-- 3. 롤 생성
create role test_role;
grant select on tab_user.ddltest to test_role;
grant test_role to ddl_user;
sqlplus ddl_user/"q1w2e3r4"
select * from tab_user.ddltest;
=> 조회 가능
-- 4. 테스트 프로시져 생성
create or replace procedure ddl_user.test_pcdr
is
v_msg varchar2(100);
begin
select a into v_msg
from tab_user.ddltest;
end;
/
=> PL/SQL: ORA-00942 : table or view does not exist
-- 5. 직접 권한 부여
grant select on tab_user.ddltest to ddl_user;
이후에 프로시져를 생성하면 잘 된다.
## 결론 : 권한관리를 위해 role 오브젝트를 사용하여 개발자에게 권한을 부여하지만
pl/sql 을 사용하기 위해서는 직접 사용자에게 권한이 주어져야 한다.
지금 조회되는 테이블이 role 을 부여받아서 조회가 되는건지 다이렉트로 권한을 받아서 되는건지
확인 하고자 할 때는 아래와 같이 하면 된다.
select * from tab_user.ddltest;
=> 조회 가능
set role none;
select * from tab_user.ddltest;
=> ORA-00942
이렇다면 role 로만 권한을 받은 것이다.
'생계 > Oracle' 카테고리의 다른 글
오라클 라이선스 lifetime support (0) | 2021.08.26 |
---|---|
create view , any view 권한 (0) | 2020.06.16 |
DB를 사용한 채번 방식 알아보자 (0) | 2020.04.30 |
오라클 로그인 특수문자 입력 (0) | 2020.01.30 |
권한 확인 SQL (0) | 2019.08.29 |