출처 : http://naver.kaist.ac.kr/oracle_sql/s16.htm
1. 시스템 권한
◈80개 이상의 권한이 있다.
◈DBA는 상위 레벨의 시스템 권한을 갖는다.
◈새로운 사용자 생성
◈사용자 삭제
◈테이블 삭제
◈테이블 백업
◈DBA는 SQL 명령인 CREATE USER를 써서 사용자를 생성한다.
◈시스템 권한은 대개 데이터 베이스 관리자 (DBA)가 부여한다.
시스템 권한 | 할 수 있는 일 |
CREATE USER | 다른 Oracle 사용자를 생성할 수 있게 한다. |
DROP USER | 다른 사용자를 삭제 할 수 있다. |
DROP ANY TABLE | 스키마에 있는 테이블을 삭제 할 수 있다. |
♣ 사용자 생성
◈DBA는 여러 시스템 권한을 사용하여 Oracle의 새로운 사용자를 생성 할 수도 있다.
CREATE USER 사용자 IDENTIFIED BY 암호 ;
◈사용자는 생성되는 사용자의 이름이고, 암호는 로그인을 할 때 사용된다.
♠실습 :
SQL> CREATE USER scott IDENTIFIED BY tiger; |
♣ 사용자 시스템 권한
◈사용자를 생성하면 DBA는 GRANT 명령을 실행하여 사용자에게 권한을 부여할 수 있다.
◈전형적인 사용자 권한
시스템 권한 | 권한을 통해 할 수 있는 일 |
CREATE SESSION | 데이터베이스에 접속할 수 있도록 한다. |
CREATE TABLE | 사용자가 테이블을 생성할 수 있도록 한다. |
CREATE SEQUENCE | 사용자가 Sequence를 생성할 수 있도록 한다. |
CREATE VIEW | 사용자가 View를 생성할 수 있도록 한다. |
CREATE PROCEDURE | 사용자가 Store Procedure 또는 패키지를 생성할 수 있도록 한다. |
◈DBA는 사용자에게 시스템 권한을 할당하기 위해 GRANT명령을 이용한다.
GRANT 권한[,권한…] TO 사용자[,사용자…] ;
◈사용자가 권한을 받으면 즉시 그 권한을 사용할 수 있다.
♠실습 :
SQL> GRANT Create table, create sequence, create view TO scott; |
2. Role이란 무엇인가?
♣ Role이란?
◈Role은 사용자에게 허가할 수 있는 관련된 권한들의 그룹이다.
◈이러한 role을 이용하면 권한 부여와 회수를 쉽게 할 수 있다.
◈한 사용자가 여러 role을 액세스할 수 있고 다른 여러 사용자에게 같은 role을 지정할 수 있다.
◈DBA가 role을 생성해야 하고 다음에 권한을 role에 지정하고 사용자에게 role을 부여한다.
◈Syntax : CREATE ROLE Role;
Role; - 생성되는 role의 이름임.
◈Role이 생성되면 DBA는 role에 권한을 지정한 것과 마찬가지로 사용자에게 role을 지정하기 위해
GRANT명령을 사용할 수 있다.
♠실습 : Role을 생성하고 생성된 role에 테이블과 뷰를 생성할 수 있는 권한을 설정한다.
이 role을 Velasquez와 Ropeburn에게 준다.
SQL> CREATE ROLE manager; |
3. 암호 변경
◈사용자가 생성되었을 때 각 사용자는 DBA가 초기화한 암호를 갖게 된다.
◈ALTER USER 명령을 써서 암호를 변경한다.
◈ Syntax : ALTER USER 사용자 IDENTIFIED BY 암호 ;
◈사용자는 사용자의이름이고, 암호는 새로운 암호임.
♠실습 :
SQL> ALTER USER scott IDENTIFIED BY lion; |
4. 객체 권한 부여
◈DBA는 객체 권한을 사용자에게 부여하여 특정 테이블,뷰,Sequence,Stored Procedure에 대한
작업을 수행할 수 있게 한다.
◈소유자는 객체에 대한 모든 권한을 갖는다.
◈권한은 객체 유형에 따라 매우 다양한다.
◈소유자는 소유한 객체에 대해 특정 권한을 다른 사용자에게 줄 수 있다.
객체권한 | 테이블 | 뷰 | Sequence | Procedure | Snapshot |
ALTER | ∨ |
| ∨ |
|
|
DELETE | ∨ | ∨ |
|
|
|
EXECUTE |
|
|
| ∨ |
|
INDEX | ∨ |
|
|
|
|
INSERT | ∨ | ∨ |
|
|
|
REFERENCES | ∨ |
|
|
|
|
SELECT | ∨ | ∨ | ∨ |
| ∨ |
UPDATE | ∨ | ∨ |
|
|
|
◈ 객체권한부여 Syntax
GRANT 객체 권한[(Column)]
ON 객체
TO {사용자|Rrle|PUBLIC}
[WITH GRANT OPTION] ;
◈객체권한은 허가되는 객체권한이고,
◈ALL은 모든 객체권한.
◈Column은 권한이 허가된 테이블이나 뷰의 column.
◈ON 객체는 권한이 허가된 객체.
◈TO는 권한을 허가받을 사용자.
◈PUBLIC은 모든 사용자에게 객체권한을 허가한다.
◈WITH GRANT OPTTION은 권한을 받은 사용자가 다른 사용자에게 권한을 부여할 수 있도록 한다.
♠실습 : s_emp 테이블을 select와 update를 할 수 있도록 scott와 Rich에게 권한을 주도록 하라.
SQL> GRANT select,update ON s_emp TO scott, rich |
♠실습 : scott이 시스템의 모든 사용자에게 s_dept테이블을 Query할 수 있게 하라.
SQL> GRANT update(first_name,last_name) ON s_emp TO PUBLIC; |
5. 부여된 권한 확인
◈부여받거나 부여한 권한을 확인하기 위해 Dictionary뷰를 액세스한다.
◈예를 들어,DELETE 권한이 없는 테이블의 행을 삭제하는 것과 같이, 허가되지 않은 작업을
수행 하려 한다면 Oracle7 Server는 작업을 허용하지 않을 것이다. Oracle7 Server의 오류 메시지인
"테이블이나 뷰가 없습니다"를 받게 되면 다음 중 한 가지를 했다는 뜻이다:
◈않는 테이블이나 뷰의 이름 사용
◈적절한 권한이 없는 테이블이나 뷰에 대한 작업 시도
◈ 부여받은 권한은 무엇인가?
Dictionary뷰를 액세스하면 부여받은 권한을 볼 수 있다.
데이터 사전 테이블 | 설명 |
ROLE_SYS_PRIVS | role에 부여된 시스템 권한 |
ROLE_TAB_PRIVS | role에 부여된 테이블 권한 |
USER_ROLE_PRIVS | 사용자가 액세스할 수 있는 role |
USER_TAB_PRIVS_MADE | 사용자가 부여한 객권한 |
USER_TAB_PRIVS_RECD | 사용자에게 부여된 객체 권한 |
USER_COL_PRIVS_RECD | 특정 Column에 대하여 사용자에게 부여된 객체 권한 |
6. 객체에 대한 권한 회수
◈REVOKE 명령을 써서 다른 사용자에게 허가된 권한을 취소한다.
◈WITH GRANT OPTION에 의해 다른 사용자에게 허가된 권한도 취소된다.
◈Alice는 S_DEPT 테이블에 대해 Scott에게 준 SELECT와 INSERT권한을 회수한다.
◈ Syntax
REVOKE [권한 (, 권한...):ALL}
ON 객체
FROM {사용자[, 사용자...]:role |PUBLIC}
♠실습 :
SQL> REVOKE select, insert ON s_dept FROM scott |
7. Synonym생성
◈Synonym을 생성하여 객체를 객체에 대한 액세스를 간단하고 쉽게 하게 한다.
◈다른 사용자가 소유한 테이블에 대한 참조
◈긴 객체 이름을 짧게 만든다.
◈다른 사용자가 소유한 테이블을 참조하려면 테이블 생성자의 이름 뒤에 점을 찍고 테이블 이름을
써야 한다.
◈스키마로 객체 이름을 수식할 필요가 없도록 Synonym을 만들어 객체에 대한 다른 이름을 쓴다.
◈뷰와 같이 긴 이름으로 된 객체에 이런 방법을 쓰면 아주 유용하다.
◈ Syntax
CREATE [PUBLIC] 동의어
FOR 객체;
PUBLIC은 모든 사용자가 액세스할 수 있는 Synonym을 만들게 하고 동의어는 생성되는
Synonym의 이름, 객체는 생성된 동의어에 대한 객체이다.
◈ Guideline : Private Synonym은 동일한 사용자가 소유한 다른 객체 명과는 달라야 한다.
♠실습 : Scott이 Alice의 S_DEPT 테이블에 대해 S_DEPT라는 Private Synonym을 만든다.
SQL> CREATE SYNONYM s_dept FOR alice.s_dept; |
♠실습 : 빠른 참조를 위해 DEPT_SUM_VU에 대한 Synonym을 만든다.
SQL> CREATE SYNONYM d_sum FOR dept_sum_vu; |
♠실습 : DBA는 모든 사용자가 액세스할 수 있는 Public Synonym을 만들 수 있다
SQL> CREATE PUBLIC SYNONYM s_dept FOR alice.s_dept; |
◈ Synonym 삭제
Synonym을 삭제하려면 DROP SYNONYM 명령을 쓰시오. DBA만이 Public Synonym 을 삭제할 수 있다.
SQL> DROP SYNONYM s_dept; |