#사용자 권한
1. 시스템 권한 : 사용자가 데이터베이스에서 특정 작업을 수행할 수 있도록 함
2. 객체 권한 : 사용자가 특정 객체를 액세스 및 조작할 수 있도록 함
SCOTT 계정의 모든 테이블을 TEST사용자에게 select 권한 주기
select 'grant select on SCOTT.'||TABLE_NAME|| ' TO TEST;'
FROM ALL_TABLES
WHERE OWNER = 'SCOTT';
/////////////////////////////////
# 확인
DBA_SYS_PRIVS
SESSION_PRIVS
DBA_TAB_PRIVS
DBA_COL_PRIVS
# 시스템권한 부여
grant create session to PBJ;
create user emi
identified by emi
default tablespace PBJ_DAT
temporary tablespace temp2
grant create session to emi with admin option;
SQL> select * from dba_sys_privs where grantee in ('PBJ','EMI');
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
PBJ CREATE SESSION NO
EMI CREATE SESSION YES
*WITH ADMIN OPTION: 권한을 부여받은 사람이 그 권한이나 롤을 다른 사용자나 롤에 부여 가능
revoke create session from emi;
SQL> select * from dba_sys_privs where grantee in ('PBJ','EMI');
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
PBJ CREATE SESSION NO
# 객체권한 부여 ( sys )
grant execute on dbms_output to jeff;
grant update on emi.emp to jeff with grant option;
revoke update on emp from emi
##실습 권한취소 ( with grant option )
1. Jeff에게 GRANT OPTION을 사용하여 EMPLOYEES에 대한 SELECT 객체 권한을 부여
합니다.
grant select on jeff.emp to jeff with grant option;
SQL> select GRANTEE, OWNER, TABLE_NAME, GRANTOR, PRIVILEGE, grantable from user_tab_privs;
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA
--------------- ---------- -------------- ---------- --------------- ---
JEFF SYS EMP SYS SELECT YES
2.Jeff가 EMPLOYEES의 SELECT 권한을 Emi에게 부여합니다.
grant select on jeff.EMP to emi;
SQL> select GRANTEE, OWNER, TABLE_NAME, GRANTOR, PRIVILEGE, grantable from user_tab_privs;
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA
--------------- ---------- -------------- ---------- --------------- ---
JEFF SYS EMP SYS SELECT YES
EMI JEFF EMP JEFF SELECT NO
3. 나중에 SELECT 권한을 Jeff에게서 취소하면 이 취소 작업이 Emi에게도 연쇄적으로
수행됩니다.
revoke select on jeff.emp from jeff;
select GRANTEE, OWNER, TABLE_NAME, GRANTOR, PRIVILEGE, grantable from user_tab_privs;
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA
--------------- ---------- -------------- ---------- --------------- ---
연습문제
1 SYSTEM 사용자로 Emi 사용자를 생성하고 Emi 사용자가 데이터베이스에
로그온하여 자신의 스키마에 객체를 생성할 수 있는 자격을 부여하십시오. 기본
테이블스페이스 DATA01 및 임시 테이블스페이스 TEMP를 할당하고 할당량을
DATA01 1M에 설정하십시오.
create tablespace DATA01
DATAFILE '/home/oracle/ts/DATA01.dbf' size 100M
create user emi
identified by emi
default tablespace DATA01
temporary tablespace TEMP
quota 1M on data01
grant create session, craete table to emi;
2 a lab16_02a.sql 스크립트를 실행하여 Emi로 접속하고 CUSTOMERS1 및
ORDERS1 테이블을 생성하십시오.
grant connect, resource to EMI
create table customers1(id number(10));
create table orders1(id number(10));
b SYSTEM 사용자로 접속하여 데이터를 SYSTEM.CUSTOMERS에서 Emi의
CUSTOMERS1 테이블로 복사하십시오. 레코드가 삽입되었는지 확인하십시오.
system
create table customers1 (id number(10));
insert into CUSTOMERS1 values('1');
insert into emi.CUSTOMERS1 select * from system.CUSTOMERS1;
c SYSTEM 사용자로 Bob에게 Emi의 CUSTOMERS1 테이블에서 데이터를 선택할 수
있는 자격을 부여하십시오. 결과는?
grant select on emi.CUSTOMERS1 to bob
SQL> select GRANTEE, OWNER, TABLE_NAME, GRANTOR, PRIVILEGE, grantable from user_tab_privs;
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA
---------- ---------- ---------- ---------- --------------- ---
BOB EMI CUSTOMERS1 EMI SELECT NO
3 Emi로 재접속하여 Bob에게 Emi의 CUSTOMERS1 테이블에서 데이터를 선택할 수
있는 자격을 부여하십시오.
또한 Bob이 다른 사용자에게 선택 자격을 부여할 수 있도록 활성화하십시오.
SYSTEM 사용자로 이러한 작업을 기록하는 데이터 딕셔너리 뷰를 검사하십시오.
grant select on emi.CUSTOMERS1 to bob with grant option;
SQL> select GRANTEE, OWNER, TABLE_NAME, GRANTOR, PRIVILEGE, grantable from user_tab_privs;
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA
---------- ---------- ---------- ---------- --------------- ---
BOB EMI CUSTOMERS1 EMI SELECT YES
4 데이터베이스에 로그온할 수 있는 자격을 가진 diamond1$로 식별된 Trevor
사용자를 생성하십시오.
create user diamond1$Trevor
identified by trevor
5
a Bob 사용자로 Trevor를 Emi의 CUSTOMERS1 테이블에 액세스할 수 있도록
활성화하십시오.
grant select on emi.CUSTOMERS1 to diamond1$Trevor;
b Emi 사용자로 Emi의 CUSTOMERS1 테이블을 읽을 수 있는 Bob의 권한을
제거하십시오.
SQL> show user;
USER is "BOB"
SQL> select GRANTEE, OWNER, TABLE_NAME, GRANTOR, PRIVILEGE, grantable from user_tab_privs;
no rows selected
c Trevor 사용자로 Emi의 CUSTOMERS1 테이블을 질의하십시오. 결과는?
SQL> show user;
USER is "DIAMOND1$TREVOR"
SQL>
SQL> select * from emi.customers1;
select * from emi.customers1
*
ERROR at line 1:
ORA-00942: table or view does not exist
6 Emi가 새 데이터베이스를 생성할 수 있는 자격 없이 데이터베이스를 시작하고
종료할 수 있도록 하십시오.
grant sysoper to emi;