DCL을 많이 다룰 필요가 없어 공부를 소홀히 하다가 이번에 SQLD공부를 하면서 한번 정리를 해볼 생각이다.
DCL 개요
- DML , DDL을 제외하고 유저를 생성하고, 권한을 제어할 수 있는 명령어입니다.
유저와 권한
- 다른 부서 간에 또는 다른 회사 간에 데이터를 공유하기 위해 데이터베이스를 오픈해야 하는 경우 새로운 유저를 생성하고, 생성한 유저에게 공유할 테이블이나 기타 오브젝트에 대한 접근 권한만을 부여한다면 공유가 가능해질 것이다.
ORACLE을 기준으로 제공해주는 기본 유저들이 존재한다.
SCOTT : 테스트용 샘플 유저이며 Defalut pwd : TIGER
SYS : DBA ROLE을 부여받은 유저
SYSTEM : 데이터베이스의 모든 시스템 권한을 부여받은 DBA유저이다. ORACLE 설치 시 패스워드를 생성한다.
Oracle은 유저를 통해 데이터베이스에 접속을 하는 형태이다. 즉 ID와 PWD방식으로 인스턴스에 접속을 하고 그에 해당하는 스키마에 오브젝트 생성 등의 권한을 부여받게 된다.
유저 생성과 시스템 권한 부여
유저를 생성하고 데이터베이스에 접속한다. 하지만 데이터베이스에 접속했다고 해서 자유롭게 테이블, 뷰, 인덱스 등과 같은 오브젝트를 생성하고 사용할 수는 없다.
사용자가 실행하는 모든 DDL문장은 그에 해당하는 적절한 권한이 있어야만 문장을 실행할 수 있다. 이러한 권한은 시스템 권한이라고 하여 약 100개 이상의 종류가 존재한다.
이러한 100개 이상의 시스템 권한을 일일이 사용자에게 설정하는 것은 너무 복잡하고 유저당 권한을 관리하기가 너무 어려워진다.
그래서 ROLE을 이용하여 간편하고 쉽게 권한을 부여하도록 데이터베이스에서 제공해 준다.
ORACLE의 DBA 권한을 가지고 있는 SYSTEM 유저로 접속하면 유저 생성 권한을 다른 유저에게 부여할 수 있다.
GRANT [CREATE USER] TO [USER_NAME];
[CREATE USER]라는 권한을 [USER_NAME] 유저에게 권한을 부여하는 DCL문이다.
유저를 만들고 해당 유저로 접속하여 테이블을 만들려고 하면 또 에러가 발생한다. 다시 테이블을 만들 수 있는 권한을 주자.
GRANT CREATE TABLE TO [USER_NAME];
이제 테이블을 만든 유저가 아닌 다른 유저가 해당 테이블에 접근하려고 해도 에러가 발생한다. 이것도 다른 유저가 접속할 수 있도록 테이블을 만든 유저가 권한을 줘야 하기 때문이다. SELECT, UPDATE, INSERT 등등 세부적으로 권한을 부여할 수 있다.
너무나 복잡하기 때문에 ROLE을 이용한 권한 부여를 해보자
데이터베이스 관리자는 ROLE을 생성하고 ROLE에 각종 권한들을 부여한 후 유저들에게 나누어 줄 수 있다.
ROLE을 만들어보자 DBA 권한을 가진 유저로 접속한다.
CREATE ROLE DEV_TEAM;
롤에 각종 권한을 부여한다.
GRANT CREATE SESSION,CREATE TABLE TO DEV_TEAM;
이제 DEV_TEAM권한은 접속과 테이블을 생성할 수 있는 권한을 가졌다. 이 권한을 유저에게 부여하자.
GRANT DEV_TEAM TO DEV1;
DEV1이라는 유저에게 DEV_TEAM권한을 부여했다.
하지만 이것도 귀찮기 때문에 오라클에서는 기본적으로 권한이 부여된 ROLE을 제공하고 있는데 대표적으로 CONNECT와 RESOURCE가 있다.
유저를 생성하고 해당 유저에게 제공 권한을 부여해보자.
CREATE USER DEV2 IDENTIFIED BY '1234';
GRANT CONNECT,RESOURCE TO DEV2;
'Database' 카테고리의 다른 글
SQL 최적화의 기본원리 (0) | 2021.05.01 |
---|---|
절차형 SQL (0) | 2021.05.01 |
그룹함수 (2) (0) | 2021.05.01 |
짧)VIEW 뷰 (0) | 2021.05.01 |
서브쿼리인데 셀프조인을 곁들인 (0) | 2021.04.29 |
댓글