본문 바로가기

Archived(CSE Programming)/Database(Oracle)

Chap 5-6. Database 권한(Privilege)

1. 권한의 정의

특정 사용자가 가지는 

  • Oracle 서버에 연결, User와 DB Object를 생성, 삭제하는 특정 SQL 문을 실행할 수 있는 System 유형의 권한
  • 기존 특정 DB Object에 대해 특별히 명세하는 접근만 할 수 있는 Object 유형의 권한

2-1. 시스템 권한(System Privileges)

GRANT [system_privilege_name | role_name]
TO [user_name | role_name | PUBLIC] [WITH ADMIN OPTION]
REVOKE [system_privilege_name | role_name]
FROM [user_name | role_name | PUBLIC]

TO Public을 통해 모든 사용자들에게 권한을 한 번에 부여할 수 있다.

WITH ADMIN OPTION을 통해 부여받은 권한을 다시 다른 사용자들에게 부여하는 것도 가능하다.

 

2-2. 객체 권한(Object Privileges)

객체 권한은 객체 유형에 따라 다르기에 해당 표를 참조하여 부여할 수 있다.

GRANT [object_privilege_name | all] ([column_name])
ON [schema_name.] object_name
TO [user_name | role_name | PUBLIC] [WITH GRANT OPTION]
REVOKE object_privilege_name ON [schema_name.] object_name
FROM [user_name | role_name | PUBLIC] [CASCADE CONSTRAINTS]

WITH GRANT OPTION은 부여받은 객체 권한을 다시 다른 사용자들에게 부여하는 것도 가능하다.

CASCADE CONSTRAINTS는 객체 권한에서 사용된 참조 무결성 제약을 같이 삭제할 수 있다.

SELECT * FROM [DBA_TAB_PRIVS | DBA_COL_PRIVS]
WHERE OWNER = 'USERNAME'; // 조회

3. 롤(ROLE)

롤은 사용자에게 부여할 권한들의 집합이며 이름을 가진다.

CREATE ROLE role_name
[NOT IDENTIFIED | IDENTIFIED BY [password | EXTERNALLY]]
① ROLE의 생성 : CREATE ROLE db_manager 
② ROLE에 시스템 권한 부여 : GRANT create session, create table, create view TO db_manager 
③ ROLE을 사용자 또는 다른 ROLE에게 부여 : GRANT db_manager TO ycpark, system_manager

4. 시노님(Synonym)

소유한 객체에 대해 다른 이름을 부여한 것을 시노님이라고 한다.

긴 객체 이름에 대하여 짧은 이름을 붙여 사용할 수 있어 효율적으로 접근 가능.

CREATE SYNONYM kd_emp FOR kdhong.emp;
CREATE SYNONYM ex_emp FOR excellent_employee_table;
CREATE PUBLIC SYNONYM emp FOR jmil.emp;
DROP SYNONYM kd_emp;

5. 시퀀스(Sequence)

자동으로 유일한 순차값을 생성하는 DB Object이다.

주로 기본키의 값을 생성할 때 사용한다.

CREATE SEQUENCE sequence_name
[ INCREMENT BY n ] // 증가값
[ START WITH n ] // 시작 값
[ MAXVALUE n | NOMAXVALUE ] // 최대값
[ MINVALUE n | NOMINVALUE ] // 최소값
[ CYCLE | NOCYCLE ] // 최대 최소 도달 시 계속 진행여부(NO 기본)
[ CACHE n | NOCACHE ] // 메모리에 캐시저장(접근속도)

사용 예시

CREATE SEQUENCE emp_seq
INCREMENT BY 1
START WITH 1
MAXVALUE 100000
NOCACHE
NOCYCLE;
"시작 값이 1이고 1씩 증가하고, 최대값이 100000이 되는 시퀀스를 생성"

INSERT INTO emp(eid, ename, did) VALUE(emp_seq.NEXTVAL, ‘jmil’, 2);
"eid는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여 자동으로
입력할 수 있다"

"CURRVAL : 현재 값을 반환한다.
NEXTVAL : 현재 시퀀스의 다음 값을 반환한다."

'Archived(CSE Programming) > Database(Oracle)' 카테고리의 다른 글

Chap 7. PL/SQL  (0) 2019.11.27
Chap 6. JDBC  (0) 2019.11.27
Chap 5-4. DataBase 뷰(View)  (1) 2019.11.12
Chap 5. SQL  (0) 2019.10.22
Chap 3. Table Index & B+tree  (0) 2019.10.22