계정에게 권한을 부여하거나 회수하는 명령
오라클 권한(PRIVILEGE) : 시스템 권한(관리자)과 객체 권한(일반 사용자)으로 구분
형식) GRANT {PRIVILEGE | ROLL}, {PRIVILEGE | ROLL}, ... TO {계정명 | PUBLIC}
[WITH ADMIN OPTION] [IDENTIFIED BY 암호]
시스템 권한을 부여받을 계정이 없는 경우 자동으로 계정 생성
GRANT 명령으로 계정이 생성될 경우 반드시 IDENTIFIED BY를 이용하여 암호 설정
--KIM 계정 생성 (관리자 세션에서 작업)
CREATE USER KIM IDENTIFIED BY 1234;
- KIM 계정으로 오라클 서버에 접속 (SQLPLUS 사용 : 접속 불가능)
- DOS> SQLPLUS /NOLOG >> 로그인을 시도하지 않고 SQLPLUS 프로그램 실행
- SQL> CONN KIM/1234 >> 오라클 서버에서 접속하기 위해 계정과 비밀번호 입력
- 로그인 처리(인증을 통한 권한 획득)
- ORA-01045: 사용자 KIM는 CREATE SESSION 권한을 가지고 있지 않음; 로그온이 거절되었습니다.
GRANT CREATE SESSION TO KIM; --KIM 계정에게 CREATE SESSION 시스템 권한 부여
- CREATE SESSION 시스템 권한을 부여받은 후 KIM 계정으로 오라클 서버에 접속 (SQLPLUS 사용)
- SQL> CONN KIM/1234
- 연결되었습니다.
- KIM 계정으로 SAWON 테이블 생성 : 사원번호(숫자형-PRIMARY KEY),사원이름(문자형),급여(숫자형)
- SQL> CREATE TABLE SAWON(NO NUMBER(4) PRIMARY KEY,NAME VARCHAR2(20),PAY NUMBER);
- ORA-01031: 권한이 불충분합니다 (테이블 생성 불가능)
GRANT CREATE TABLE TO KIM; --KIM 계정에게 CREATE TABLE 시스템 권한 부여
- CREATE TABLE 시스템 권한을 부여받은 후 KIM 계정으로 SAWON 테이블 생성
- SQL> CREATE TABLE SAWON(NO NUMBER(4) PRIMARY KEY,NAME VARCHAR2(20),PAY NUMBER);
- 테이블이 생성되었습니다 (테이블 생성 가능)
모든 시스템 권한을 회수해도 계정 미삭제
형식) REVOKE {PRIVILEGE | ROLL}, {PRIVILEGE | ROLL}, ... FROM {계정명 | PUBLIC}
[WITH ADMIN OPTION]
--관리자가 KIM 계정에게 부여한 CREATE SESSION 시스템 권한 회수 (관리자 세션에서 작업)
REVOKE CREATE SESSION FROM KIM;
--관리자가 LEE 계정에게 CONNECT와 RESOURCE 롤 부여 (관리자 세션에서 작업)
GRANT CONNECT,RESOURCE TO LEE IDENTIFIED BY 1234;
- LEE 계정으로 오라클 서버에 접속하여 SAWON 테이블 생성 (서버 접속 및 테이블 생성 가능)
- SQL> CONN LEE/1234
- 연결되었습니다.
- SQL> CREATE TABLE SAWON(NO NUMBER(4) PRIMARY KEY,NAME VARCHAR2(20),PAY NUMBER);
- 테이블이 생성되었습니다
--관리자가 LEE 계정에게 CONNECT와 RESOURCE 롤 회수 (관리자 세션 작업)
REVOKE CONNECT,RESOURCE FROM LEE;
객체 권한 : 사용자 스키마의 객체 관련 명령(DQL 및 DML) 사용에 대한 권한
형식) GRANT {ALL | PRIVILEGE,PRIVILEGE,...} ON 객체명 TO 계정명 [WITH GRANT OPTION]
객체 권한은 INSERT,UPDATE,DELETE,SELECT 등 키워드로 표현
--SCOTT 계정의 DEPT 테이블에 저장된 모든 행 검색 - 계정 소유의 객체는 [계정명.객체명]으로 표현
SELECT * FROM SCOTT.DEPT;
--현재 접속 계정의 객체인 경우 계정명 생략 가능
SELECT * FROM DEPT;
- KIM 계정으로 SCOTT 계정의 DEPT 테이블에 저장된 모든 행 검색 (검색 불가능)
- SQL> SELECT * FROM SCOTT.DEPT;
- >> 현재 접속된 계정의 객체가 아닌 경우 반드시 [계정명.객체명]으로 표현
- ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
- KIM 계정은 SCOTT 계정에 존재하는 DEPT 테이블에 접근할 수 있는 객체 권한이 없으므로 에러 발생
- KIM 계정이 SCOTT 계정에게 DEPT 테이블에 접근할 수 있는 객체 권한 요청
--SCOTT 계정이 KIM 계정에게 DEPT 테이블에 저장된 행을 검색할 수 있는 권한 부여
GRANT SELECT ON DEPT TO KIM;
- 객체 권한을 부여 받은 후 KIM 계정으로 SCOTT 계정의 DEPT 테이블에 저장된 모든 행 검색
- SQL> SELECT * FROM SCOTT.DEPT; (검색 가능)
--다른 계정에게 부여한 객체 권한 확인
--USER_TAB_PRIVS_MADE : 부여한 객체 권한 정보를 제공하는 딕셔너리
SELECT * FROM USER_TAB_PRIVS_MADE;
--다른 계정에게 부여받은 객체 권한 확인
--USER_TAB_PRIVS_RECD : 부여받은 객체 권한 정보를 제공하는 딕셔너리
SELECT * FROM USER_TAB_PRIVS_RECD;
--SCOTT 계정이 KIM 계정에게 DEPT 테이블에 저장된 행을 검색할 수 있는 권한 회수
REVOKE SELECT ON DEPT FROM KIM;
SELECT * FROM USER_TAB_PRIVS_MADE;