SQLD 문법 정리 - DCL
3. DCL(데이터 제어어, Data Control Language)
3.1 GRANT
- 사용자에게 각종 권한을 부여할수 있는 명령어.
- 권한은 크게 시스템 권한, 객체 권한으로 나누어진다.
3.1.1 시스템 권한(System Privilege)
- 사용자가 데이터베이스에서 특정 작업을 수행할수 있도록 한다.
- DBA 권한을 가진 유저(SYS, SYSTEM)만 시스템 권한을 부여/회수할수 있다.
- 권한의 ANY 키워드는 사용자가 모든 스키마에서 권한을 가지는것을 의미한다.
3.1.1.1 대표적인 시스템 권한
- CREATE SESSION
- 데이터베이스를 연결할수 있는 권한
- CREATE(ALTER, DROP) USER
- 사용자를 생성(변경, 삭제) 할 수 있는 권한
- CREATE(ALTER, DROP) TABLE
- 테이블을 생성(변경, 삭제)할수 있는 권한
- CREATE(ALTER, DROP) SEQUENCE
- 시퀀스를 생성(변경, 삭제)할 수 있는 권한
- CREATE (DROP) VIEW
- 뷰를 생성(삭제)할수 있는 권한
- CREATE(ALTER, DROP) PROCEDURE
- 프로시저를 생성(변경, 삭제)할 수 있는 권한
- CREATE(ALTER, DROP) ROLE
- 오라클 데이터베이스 역할을 생성할 수 있는 권한
- CREATE(ALTER, DROP) SYNONYM
- 동의어를 생성(변경, 삭제) 할 수 있는 권한
- CREATE(ALTER, DROP) TRIGGER
- 트리거를 생성(변경, 삭제) 할 수 있는 권한
3.1.1.2 시스템 권한 부여 문법
GRANT 시스템 권한명 [, 시스템 권한명2, … | 역할명]
TO 유저명 [,유저명2, …| 역할이름 | PUBLIC |
WITH ADMIN OPTION];
- 시스템 권한명
- 부여할 시스템 권한의 이름
- 역할명
- 권한을 부여받을 사용자 이름
- PUBLIC
- 시스템 권한 또는 데이터베이스 역할을 다른 모든 사용자에 부여한다.
- WITH ADMIN OPTION
- TO절의 대상자가 자신이 받은 권한을 다른 유저에게 부여할 수 있다.
3.1.1.3 예제
sys 권한으로 접속
CONNECT sys AS SYSDBA
scott에게 유저 생성, 편집, 삭제 및 해당 권한들을 부여할수 있게함.
GRANT CREATE USER, ALTER USER, DROP USER TO scott WITH ADMIN OPTION;
3.1.2 객체 권한
- 사용자가 소유하고 있는 특정 개체를 다른 사용자들이 접근/조작할수 있도록 하는 권한.
- 테이블, 뷰, 시퀀스, 프로시저, 함수/패키지 중 지정된 한 객체에 특별한 작업을 수행할수 있게 됨.
- 객체 소유자는 다른 사용자에게 특정 객체 권한을 부여할수 있음.
- PUBLIC으로 객체권한 부여시 회수할때도 PUBLIC으로 회수해야 한다.
- 소유한 객체에 대해서는 모든 권한이 자동적으로 획득된다.
3.1.2.1 객체 권한 종류
- ALTER
- 객체에 대해 변경할 수 있는 권한
- COMMENT
- 객체에 대해 COMMENT 할 수 있는 권한
- DELETE
- 객체에 대해 자료를 삭제할 수 있는 권한
- GRANT
- 객체에 대해 권한을 부여할 수 있도록 하는 권한.
- INDEX
- 인덱스를 생성할 수 있는 권한
- INSERT
- 데이터를 삽입할 수 있는 권한
- RENAME
- 이름을 변경할 수 있는 권한
- SELECT
- 데이터를 조회할 수 있는 권한
- UPDATE
- 데이터를 갱신할 수 있는 권한
- REFERENCES
- 데이터를 참조할 수 있는 권한
- EXECUTE
- 프로시저, 함수, 패키지를 실행할 수 있는 권한
3.1.2.2 객체 권한 부여 기본 문법
GRANT 객체권한명 (컬럼) [ON 객체명]
TO {유저명 | 역할명 | PUBLIC} [WITH GRANT OPTION]
- 객체권한명
- 객체에 사용 가능한 권한
- 컬럼명
- 만약 ON절에서 지정한 객체가 Table, View일때 사용.
- ON 객체명
- 테이블, 뷰, 시퀀스, 프로시저 등의 권한 부여시 사용.
- TO { 유저명 | 역할명 | PUBLIC }
- 사용자를 일일이 나열하거나
- 역할에 소속된 사용자 전체를 지정하거나
- 모든 사용자에게 권한을 설정한다.
- WITH GRANT OPTION
- TO절의 대상자가 자신이 받은 권한을 다른 유저에게 부여 가능.
3.1.1.3 예제
scott에게 emp 객체의 조회, 삽입 권한 및 해당 권한들을 부여할수 있게함.
GRANT SELECT, INSERT ON emp TO scott WITH GRANT OPTION;
3.1.3 ROLE의 개념
- 사용자에게 허가할 수 있는 관련된 권한들의 그룹
3.2 REVOKE
- 사용자에게 부여된 권한을 회수할 때 사용.
- WITH GRANT OPTION으로 객체 권한을 부여한 사용자의 객체 권한을 회수하면 권한을 부여받은 사용자가 부여한 객체 권한 또한 같이 철회됨.
- A가 B에게 WITH GRANT OPTION으로 권한을 주고,
B가 C에게 권한을 주었을때- A가 B의 권한을 회수하면 C의 권한 역시 함께 회수된다.
- A가 B에게 WITH GRANT OPTION으로 권한을 주고,
3.2.1 시스템 권한 회수
scott에게서 유저 생성, 변경, 삭제 권한을 회수
REVOKE CRATE USER, ALTER USER, DROP USER TO scott
3.2.2 객체 권한 회수
scott에게서 emp 객체의 데이터 조회, 삽입 권한을 회수
REVOKE SELECT, INSERT ON emp FROM scott [CASCADE CONSTRAINTS]
- CASCADE CONSTRAINTS
- 참조 객체 권한에서 사용된 참조 무결성 제한을 함께 삭제 가능.
3.3 COMMIT
- 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어
- 트랜젝션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장한다.
- COMMIT을 수행하면 하나의 트랜젝션 과정을 종료하게 된다.
- 트랜젝션(INSERT, UPDATE, DELETE)작업 내용을 실제 DB에 저장한다.
- 이전 데이터가 완전히 UPDATE된다.
- 모든 사용자가 변경한 데이터의 결과를 볼 수 있다.
- DDL, DCL 명령문 수행시 자동으로 COMMIT된다.
3.4 ROLLBACK
- 작업중 문제가 발생했을 때, 트랜젝션의 처리 과정에서 발생한 변경 사항을 취소하고, 트랜젝션 과정을 종료시킨다.
- 트랜젝션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.
- 트랜젝션(INSERT, UPDATE, DELETE) 작업 내용을 취소한다.
- 이전 COMMIT한 곳 까지만 복구한다.
- 트랜젝션 작업중 하나라도 문제가 발생하면 모든 작업을 취소해야 하기 때문에 트랜젝션은 하나의 논리적인 작업 단위로 구성해 놓아야 한다.
- 문제 발생시 논리적인 작업의 단위를 모두 취소해버리면 되기 때문이다.