SQL - DCL

박현·2022년 11월 8일
0

SQL

목록 보기
31/34

DCL (Data Control Language)
: 유저를 생성하고 권한을 제어할 수 있는 명령어.

  • 유저와 권한을 관리하는 이유
    : 데이터보호와 보안을 위해 관리한다.

  • Oracle은 유저를 통해 데이터베이스에 접속하는 형태이다.
    즉 아이디와 비밀번호 방식으로 인스턴스에 접속을 하고 그에 해당하는 스키마에 오브젝트 생성등의 권한을 부여받게 된다.

유저 생성과 시스템 권한 부여

사용자가 실행하는 모든 DDL문장은 그에 해당하는 적절한 권한이 있어야만 문장을 실행할 수 있다.

유저를 생성하고 권한을 부여해보도록 하자.
새로운 유저를 생성하려면 일단 유저생성권한이 있어야 한다.

CONN SCOTT
//연결됐습니다.
CREATE USER SQLD IDENTIFIED BY DB2019;
//1행에 오류:
// ORA-01031: 권한이 불충분합니다.

현재 scott는 유저를 생성할 권한이 없기 때문에 권한이 불충분하다는 오류가 발생한다.
권한을 부여하기 위해 DBA권한을 가지고 있는 SYSTEM유저로 접속하여 유저생성권한을 다른 유저에게 부여해보도록 하자.

GRANT CREATE USER TO SCOTT;
//권한이 부여됐습니다.

권한을 부여한 후 다시 새로운 사용자를 생성하면 오류가 발생하지 않고 생성이 완료된다.

유저가 생성됐지만 아무런 권한도 부여받지 못했기 때문에 로그인을 하면 CREATE SESSION 권한이 없다는 오류가 발생한다.

GRANT CREATE SESSION TO SQLD;

로그인 권한을 얻고 테이블을 생성하려고 하면 권한이 불충분하다는 오류가 발생한다. 이때 테이블생성 권한도 추가해주어야 한다.

GRANT CREATE TABLE TO SQLD;

OBJECT에 대한 권한 부여

특정 유저가 소유한 객체 권한에 대해 알아보도록 하자.
객체권한은 테이블, 뷰 등에 대한 SELECT,INSERT,DELETE,UPDATE작업 명령어를 의미한다.

테이블을 생성하고 SELECT,INSERT,DELETE,UPDATE를 하려고 하면 오류가 발생한다. 권한을 따로 부여받아야 조회,삽입,삭제,업데이트가 가능하다.

GRANT SELECT ON 테이블명 TO 유저;
GRANT INSERT ON 테이블명 TO 유저;
GRANT DELETE ON 테이블명 TO 유저;
GRANT UPDATE ON 테이블명 TO 유저;

GRANT SELECT,INSERT,DELETE,UPDATE ON 테이블명 TO 유저;

ROLE을 이용한 권한 부여

  • 관리해야 할 유저가 점점 늘어나고 자주 변경되는 상황에서 권한 관리하기 힘들기 때문에 데이터베이스에서 유저들과 권한들 사이에서 중개 역할을 하는 ROLE을 제공한다.

  • 데이터베이스 관리자는 ROLE을 생성하고 ROLE에 각종 권한들을 부여 한 후, ROLE을 다른 ROLE이나 유저에게 부여할 수 있다.

  • ROLE에는 시스템권한과 객체권한을 모두 부여할 수 있다.

  • ROLE을 만들어 사용하는 것이 권한을 직접 부여하는 것보다 빠르고 안전하게 유저를 관리할 수 있는 방법이다.

ROLE 생성하는 법

CREATE ROLE 롤이름;

ROLE에 권한 부여

GRANT CREATE SESSION, CREATE TABLE TO 롤이름;

오라클에서는 기본적으로 몇가지 ROLE을 제공한다. 그 중에서 가장 많이 사용하는 ROLE은 CONNECT와 RESOURCE이다.

CONNECT는 CREATE SESSION과 같은 로그인권한이 포함되어있고
RESOURCE는 오브젝트의 생성권한이 포함되어있다.

아래의 표는 CONNECT와 RESOURCE ROLE에 부여된 권한목록을 정리한 것이다.

REVOKE

  • 권한을 취소하는 명령어
REVOKE CREATE SESSION FROM 유저;

참고자료 : SQL전문가가이드

0개의 댓글