PLT 3.3 Role
롤은 여러 가지 권한과 롤의 그룹으로 사용자에게 동시에 부여되고 철회될 수 있고 각 사용자 별로 활성화 여부를 결정할 수 있습니다. SQL명령어 CREATE ROLE을 사용하여 롤을 생성할 수 있습니다. 롤을 생성하려면 CREATE ROLE시스템 권한이 있어야 하며 일반적으로 보안 관리자만이 이 시스템 권한을 가집니다.
ROLE 이란 사용자에게 허가할 수 있는 권한들의 집합 이라고 할 수 있습니다.
l ROLE을 이용하면 권한 부여와 회수를 쉽게 할 수 있습니다.
l ROLE은 Create Role권한을 가진 User에 의해서 생성 됩니다.
l 한 사용자가 여러 개의 ROLL을 ACCESS할 수 있고, 여러 사용자에게 같은 ROLE을 부여할 수 있습니다.
l 시스템 권한을 부여하고, 취소할 때와 동일한 명령을 사용하여 사용자에게 부여하고, 취소 합니다.
l 사용자는 ROLE에 ROLE을 부여할 수 있습니다.
l 오라클 데이터베이스를 설치하면 기본적으로 CONNECT, RESOURCE, DBA ROLE이 제공 됩니다.
참고
롤을 생성한 즉시 롤이 롤에 관련된 시스템 권한을 가지는 것은 아니다. 새로운 롤과 권한을 연결하려면 새로운 롤에 권한 또는 다른 롤을 부여해야 한다. |
ROLE의 부여 순서
1. ROLE의 생성 : CREATE ROLE manager
2. ROLE에 권한 부여 : GRANT create session, create table TO manager
3. ROLE을 사용자 또는 ROLE에게 부여 : GRANT manager TO scott, test;
롤 이름
롤을 생성할 때 롤에 데이터베이스의 기본 사용자명이나 롤 이름과 구분되는 고유한 이름을 지정해야 한다. 롤은 모든 사용자의 스키마에 있지 않다.
미리 정의된 롤
아래 나열된 롤은 오라클 데이터베이스에서 자동으로 정의됩니다. 이 롤은 이전 Oracle버전과 역방향 호환성를 제공하며. 이러한 미리 정의된 롤에 사용자가 정의한 롤에 수행하는 것과 마찬가지로 권한과 롤을 부여하거나 철회할 수 있다.
CONNECT ( a ) |
ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, |
RESOURCE ( a, b ) |
CREATE CLUSTER, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER |
DBA ( a, c, d ) |
WITH ADMIN OPTION에 있는 모든 시스템 권한 |
EXP_FULL_DATABASE ( e ) |
SELECRT ANY TABLE, BACKUP ANY TABLE, INSERT, DELETE, UPDATE ON THE TABLES, SYS.INCVID, SYS,INCFIL, SYS.INCEXP |
IMP_FULL_DATABASE ( e ) |
BECOME USER |
DELETE_CATALOG_ROLE ( f ) |
이 롤에 대한 모든 딕셔너리 패키지의 DELTE 권한 |
EXECUTE_CATALOG_ROLE ( f ) |
이 롤에 대한 모든 딕셔너리 페키지의 EXECUTE 권한 |
SELECT_CATALOG_ROLE ( f ) |
이 롤에 대한 모든 카타로그 테이블 및 뷰의 SELECT권한 |
a. SQL.BSQ에 의해 생성된다.
b. RESOURCE롤을 부여 받은 사용자는 UNLIMITED TABLESPACE시스템 권한도 명시적으로 부여 받는다. (UNLIMITED TABLESPACE시스템 권한은 RESOURCE롤의 일부가 아니다.)
c. DBA롤을 부여 받은 사용자는 ADMIN OPTION과 함께 UNLIMITED TABLESPACE시스템 권한도 명시적으로 부여받는다. (ADMIN OPTION과 함께 사용하는 UNLIMITED TABLESPACE시스템 권한은 DBA롤의 일부가 아닙니다), 따라서 DBA롤을 철회하면 UNLIMITED TABLESPACE권한도 철회되어야 합니다.
d. CATEXP.SQL을 실행하면 EXP_FULL_DATABASE와 IMP_FULL_DATABASE롤도 포함된다.
e. CATEXP.SQL에 의해 생성된다.
f. 이러한 롤은 DBA롤이 없는 사용자에게 부여되어야 하지만 데이터 딕셔너리의 뷰와 테이블을 액세스해야 한다.
사용자가 롤을 활성 하고자 할 때 데이터베이스 롤은 선택적으로 인증을 요구할 수 있다. 롤 인증은 암호를 사용한 데이터베이스, 운영 체제, 네트워크 서비스에 의해 유지 관리될 수 있다. 롤 인증 방법을 변경하려면 ALTER ANY ROLE 시스템 권한이 있거나 ADMIN OPTION을 가진 롤을 부여 받아야 한다.
데이터베이스에 의한 롤 인증
롤 사용은 관련된 암호로 보호할 수 있다. 암호를 사용하여 보호되는 롤을 부여 받으면 SET ROLE명령어에 해당 롤에 대한 적합한 암호를 주어 롤을 활성화하거나 비활성화할 수 있다.
운영 체제에 의한 롤 인증
다음 명령문은 ACCTS_REC라는 롤을 생성하고 운영 체제가 롤 사용을 인증한다.
다음 명령문은 ACCTS_REC라는 롤을 생성하고 운영 체제가 롤 사용을 인증한다.
CREATE ROLE role INDENTIFIED EXTERNALLY; |
운영 체제를 사용한 롤 인증은 운영 체제가 운영 체제 권한과 응용 프로그램을 동적으로 링크할 수 있을 때만 유용하다. 사용자가 프로그램을 실행할 때 운영 체제는 사용자에게 운영 체제 시스템 권한을 부여한다. 부여된 운영 체제 권한은 해당 응용 프로그램과 관련된 롤에 대응하며 응용 프로그램은 응용 프로그램 롤을 활성화 한다. 응용 프로그램을 종료할 때 이전에 부여된 운영 체제 권한은 사용자 운영 체제 계정에서 철회된다. 운영 체제가 롤을 인증하면 운영 체제 레벨에서 각 사용자에 대한 정보를 구성해야 한다.
롤 인증과 네트워크 클라이언트
사용자가 SQL*Net으로 데이터베이스에 접속했다면 기본적으로 운영 체제는 사용자의 롤을 인증할 수 없다. 이것은 접속이 SQL*Net을 필요로 하는 것처럼 다중 스레드 서버를 통한 접속을 포함한다. 원격 사용자는 네트워크 접속으로 다른 운영 체제 사용자를 가장할 수 있으므로 이 제한은 기본이다. 보안 위험을 생각하지 않고 네트워크 클라이언트에 대해 운영 체제 롤 인증을 사용하려면 데이터베이스 매개변수 파일에서 매개변수 REMOTE_OS_ROLES를 TRUE로 설정한다. 이러한 변경 사항을 반영하려면 인스턴스를 재시작하고 데이터베이스를 마운트해야 한다. (이 매개변수의 기본값은 FALSE이다.)
사용자의 기본 롤 변경
SQL명령어 ALTER USER을 사용하여 사용자의 기본 롤 목록은 변경할 수 있다.
ALL 키워드 사용 : 사용자의 기본 롤 목록을 ALL로 지정하면 사용자에게 부여된 모든 롤이 사용자의 기본 롤 목록에 자동으로 추가된다. 이후에 사용자의 기본 롤 목록을 수정하면 사용자의 기본 롤 목록에서 새로 부여된 롤을 제거할 수 있다.
롤 삭제
어떤 경우에는 데이터베이스에서 롤을 삭제해야 한다. 삭제된 롤을 부여 받은 모든 사용자와 롤의 보안 도메인은 삭제도 롤 권한이 없음을 반영하기 위해 즉시 변경된다. 삭제된 롤에 간접적으로 부여된 모든 롤도 연관된 보안 도메인으로부터 제거되어야 한다. 롤 삭제는 모든 사용자의 기본 롤 목록에서 롤을 자동으로 제거한다. 객체 생성은 롤을 통해 받은 권한에 종속적이지 않으므로 롤 삭제 시 테이블과 다른 개체들은 삭제되지 않는다. 롤을 삭제하려면 DROP ANY ROLE시스템 권한이나 ADMIN OPTION을 포함하는 롤을 부여 받아야 한다. 다음 명령문은 CLERK롤을 삭제한다.
DROP ROLE CLERK; |
PLT 3.4 시스템 권한(System Privileges)
SQL명령어 GRANT를 사용하여 시스템 권한과 롤을 다른 사용자나 롤에 부여할 수 있다. 시스템 권한이나 롤을 부여하려면 부여할 모든 시스템의 권한과 롤에 대해 ADMIN_OPTION을 가지고 있어야 한다. 또한 GRANT ANT ROLE시스템 권한이 있는 사용자는 데이터베이스에 있는 모든 롤을 부여할 수 있다. 다음 명령문은 사용자 JWARD에게 시스템 권한과 ACCT_PAY롤을 부여한다.
GRANT create session, accts_pay TO jward; |
SYSTEM PRIVILEGES
- 시스템 권한은 사용자가 데이터베이스에서 특정 작업을 수행 할 수 있도록 합니다
- 약 126개의 시스템 권한이 있으며 그 수는 계속 증가하고 있습니다.
- 권한의 ANY 키워드는 사용자가 모든 스키마에서 권한을 가짐을 의미 합니다.
- GRANT 명령은 사용자 또는 Role에 대해서 권한을 부여 합니다.
- REVOKE 명령은 권한을 삭제 합니다.
시스템 권한 부여 문법(Syntax)
GRANT [ system_privilege | role ] TO [ user | role | PUBLIC ]
[ WITH ADMIN OPTION ] |
- system_privilege : 부여할 시스템 권한의 이름
- role : 부여할 데이터베이스 역할의 이름
- user, role : 부여할 사용자 이름과 다른 데이터 베이스 역할 이름
- PUBLIC : 시스템 권한, 또는 데이터베이스 역할을 모든 사용자에게 부여할 수 있습니다.
- WITH ADMIN OPTION : 권한을 부여 받은 사용자도 부여 받은 권한을 다른 사용자 또는 역할로 부여할 수 있게 되며, 만약 사용자가 WITH ADMIN OPTION과 같이 역할을 부여 받는다면 부여된 역할은 그 사용자에 의해 변경 또는 삭제 될 수 있습니다
권한과 롤 부여
SQL명령어 GRANT를 사용하여 롤과 사용자에게 개체 권한을 부여할 수 있다. 개체 권한을 부여하려면 다음 조건 중 하나를 만족해야 한다.
사용자가 지정된 개체를 소유하고 있는 경우
사용자가 GRANT OPTION으로 개체 권한을 부여받은 경우 다음 명령문은 EMP테이블의 모든 열에 대한 SELECT, INSERT, DELETE 개체 권한을 사용자 JFEE와 TSMITH에게 부여한다.
GRANT SELECT, INSERT, DELETE ON EMP TO JFEE, JSMITH;
사용자 JFEE와 TSMITH에게 EMP테이블의 ENAME과 JOB열에 대해서만 INSERT개체 권한을 부여하려면 다음 명령문을 수행한다.
GRANT insert( ename, job ) ON emp TO jfee, tsmith;
사용자 JFEE에게 SALARY뷰에 대해 모든 개체 권한을 부여하려면 다음 예처럼 ALL단축키를 사용한다. GRANT ALL ON salary TO jfee;
주 : 동일한 GRANT명령문에서 시스템 권한 및 롤을 개체 권한과 함께 부여할 수 없다.
GRANT OPTION
스키마에 개체를 포함하는 사용자는 모든 연관된 개체 권한을 GRANT OPTION과 함께 자동으로 부여받는다. 이러한 큭별한 권한은 퀀한을 부여받은 사용자에게 다음과 같은 확장된 권한을 허용한다.
권한을 부여받은 사용자는 데이터베이스의 모든 사용자와 모든 롤에 개체 권한을 부여할 수 있다. 권한을 부여받은 사용자는 GRANT OPTION이 없어도 다른 사용자에게 권한을 부여할 수 있다. 권한을 부여받은 사용자가 GRANT OPTION으로 테이블에 대해 개체 권한을 받았고 권한을 부여받은 사용자가 CREATE VIEW나 CREATE ANY VIEW시스템 권한을 가지고 있다면 권한을 부여받은 사용자는 테이블에 뷰를 생성할 수 있으며 뷰의 해당 권한을 데이터베이스의 다른 사용자나 롤에 부여할 수 있다.
GRANT OPTION은 롤에 개체 권한을 부여할 때는 사용할 수 없다. Oracle은 롤을 부여받은 사용자가 롤을 통해 부여받은 개체 권한을 전달할 수 없도록 롤울 통한 개체 권한 전달을 막는다.
3) 열에 권한 부여
테이블의 각 열에 INSERT, UPDATE. 또는 REFERENCES권한을 부여할 수 있다.
주 : 열에 INSERT권한을 부여하기 전에 테이블이 NOT NULL제약 조건을 정의한 열을 포함하고 있는지 확인한다. NOT NULL열 없이 선택적 삽입 기능을 부여한다면 사용자는 테이블에 어떤 행도 삽입할 수 없다.
이러한 상황을 방지하려면 각 NOT NULL열을 삽입가능하게 하거나 NULL이 아닌 기본값을 가지도록 한다. 그렇지 않으면 권한을 부여받은 사용자는 테이블에 행을 삽입할 수 없으며 오류를 받게 된다.
SCOTT에게 ACCOUNTS테이블의 ACCT_NO열에 대한 INSERT권한을 부여한다.
GRANT INSERT ( acct_no ) ON accounts TO scott;
사용자가 GRANT OPTION으로 개체 권한을 부여받은 경우 다음 명령문은 EMP테이블의 모든 열에 대한 SELECT, INSERT, DELETE 개체 권한을 사용자 JFEE와 TSMITH에게 부여한다.
GRANT SELECT, INSERT, DELETE ON EMP TO JFEE, JSMITH;
사용자 JFEE와 TSMITH에게 EMP테이블의 ENAME과 JOB열에 대해서만 INSERT개체 권한을 부여하려면 다음 명령문을 수행한다.
GRANT insert( ename, job ) ON emp TO jfee, tsmith;
사용자 JFEE에게 SALARY뷰에 대해 모든 개체 권한을 부여하려면 다음 예처럼 ALL단축키를 사용한다. GRANT ALL ON salary TO jfee;
주 : 동일한 GRANT명령문에서 시스템 권한 및 롤을 개체 권한과 함께 부여할 수 없다.
GRANT OPTION
스키마에 개체를 포함하는 사용자는 모든 연관된 개체 권한을 GRANT OPTION과 함께 자동으로 부여받는다. 이러한 큭별한 권한은 퀀한을 부여받은 사용자에게 다음과 같은 확장된 권한을 허용한다.
권한을 부여받은 사용자는 데이터베이스의 모든 사용자와 모든 롤에 개체 권한을 부여할 수 있다. 권한을 부여받은 사용자는 GRANT OPTION이 없어도 다른 사용자에게 권한을 부여할 수 있다. 권한을 부여받은 사용자가 GRANT OPTION으로 테이블에 대해 개체 권한을 받았고 권한을 부여받은 사용자가 CREATE VIEW나 CREATE ANY VIEW시스템 권한을 가지고 있다면 권한을 부여받은 사용자는 테이블에 뷰를 생성할 수 있으며 뷰의 해당 권한을 데이터베이스의 다른 사용자나 롤에 부여할 수 있다.
GRANT OPTION은 롤에 개체 권한을 부여할 때는 사용할 수 없다. Oracle은 롤을 부여받은 사용자가 롤을 통해 부여받은 개체 권한을 전달할 수 없도록 롤울 통한 개체 권한 전달을 막는다.
3) 열에 권한 부여
테이블의 각 열에 INSERT, UPDATE. 또는 REFERENCES권한을 부여할 수 있다.
주 : 열에 INSERT권한을 부여하기 전에 테이블이 NOT NULL제약 조건을 정의한 열을 포함하고 있는지 확인한다. NOT NULL열 없이 선택적 삽입 기능을 부여한다면 사용자는 테이블에 어떤 행도 삽입할 수 없다.
이러한 상황을 방지하려면 각 NOT NULL열을 삽입가능하게 하거나 NULL이 아닌 기본값을 가지도록 한다. 그렇지 않으면 권한을 부여받은 사용자는 테이블에 행을 삽입할 수 없으며 오류를 받게 된다.
SCOTT에게 ACCOUNTS테이블의 ACCT_NO열에 대한 INSERT권한을 부여한다.
GRANT INSERT ( acct_no ) ON accounts TO scott;
시스템 권한의 박탈
REVOKE [ system_privilege | role ] FROM [ user | role | PUBLIC ] |
SQL명령어 REVOKE을 사용하여 시스템권한이나 롤을 철회할 수 있다. 시스템 권한이나 롤에 대해 ADMIN OPTION을 가진 사용자는 다른 데이터베이스 사용자나 롤로부터 권한이나 롤을 철회할 수 있다. 권한 부여자가 원래의 권한이나 롤을 부여한 사용자일 필요는 없다. 또 GRANT ANY ROLE을 가진 사용자는 어떤 롤도 철회할 수 있다.
[출처] PLT 3.3 Role|작성자 후루꾸
'DataBase > Oracle' 카테고리의 다른 글
PLT 4.4 데이터베이스 TRANSACTION (0) | 2008.04.17 |
---|---|
Chapter 4 데이터 조작어(DML) - PLT 4.1 INSERT, UPDATE, DELETE (0) | 2008.04.17 |
Chapter 3 Oracle 사용자 관리 - PLT 3.1 사용자 생성 (0) | 2008.04.17 |
PLT 2.5 SYNONYM (0) | 2008.04.17 |
PLT 2.4 SEQUENCE (0) | 2008.04.17 |