💁♀️ 사용자 관리 & 보안을 위한 데이터 베이스 관리자란,
- 사용자 관리
: 사용자의 계정과 암호 설정, 권한 부여- 보안을 위한 데이터 베이스 관리자
: 사용자가 데이터 베이스의 객체(테이블, 뷰 등)에 대해 특정 권한을 가질 수 있게 하는 권한이 있음. 다수의 사용자가 공유하는 데이터 베이스 정보에 대한 보안 설정.
💁♀️ 시스템 권한이란,
데이터베이스 관리자가 가지고 있는 권한으로 오라클 접속, 테이블, 뷰, 인덱스 등의 생성 권한
- CREATE USER(사용자 계정 만들기)
- DROP USER(사용자 계정 삭제)
- CREATE SESSION(데이터베이스에 접속)
- CREATE TABLE(테이블 생성)
- CREATE VIEW(뷰 생성)
CREATE USER C##계정명 IDENTIFIED BY 비밀번호;
-- < 시스템 계정으로 실행 >
CREATE USER C##SAMPLE IDENTIFIED BY SAMPLE;
GRANT CREATE SESSION TO C##계정명;
>>> 생성한 SAMPLE 계정으로 접속 시도 시 접속 권한(CREATE SESSION)이 없기 때문에 접속 불가
>>> SAMPLE 계정에게 접속 권한 부여
-- <시스템 계정으로 실행>
GRANT CREATE SESSION TO C##SAMPLE;
GRANT CREATE TABLE TO C##계정명;
-- <샘플 계정으로 실행>
>>> 실행 시, '권한이 불충분합니다' 오류 (테이블 생성 권한이 부여 안됨)
CREATE TABLE TSET_TABLE(
COL1 VARCHAR(20)
, COL2 NUMBER
);
>>> 테이블 생성 권한이 없어 생성 불가하므로 권한 부여
-- <시스템 계정으로 실행>
GRANT CREATE TABLE TO C##SAMPLE;
-- <샘플 계정으로 실행>
>>> 실행 시, 생성완료
CREATE TABLE TSET_TABLE(
COL1 VARCHAR(20)
, COL2 NUMBER
);
WITH ADMIN OPTION
: 사용자에게 시스템 권한을 부여할 때 사용
권한을 부여받은 사용자는 다른 사용자에게 권한을 지정할 수 있음
-- <시스템 계정으로 실행>
GRANT CREATE SESSION TO C##SAMPLE
WITH ADMIN OPTION;
>>> SAMPLE도 접속 권한을 줄 수 있는 상태가 됨
-- <시스템 계정으로 실행>
CREATE USER C##SAMPLE2 IDENTIFIED BY SAMPLE2;
-- <샘플 계정으로 실행>
GRANT CREATE SESSION TO C##SAMPLE2; >>> 시스템 계정 뿐만 아니라 샘플 계정도
>>> 샘플2 계정에게 접속 권한을 줄 수 있음
GRANT CREATE TABLE TO C##SAMPLE2; >>> 그렇다고 TABLE 생성 권한까지 부여받은건 아님
>>> '권한이 불충분합니다' 오류
📌 Ref.
* 샘플 계정이 WITH ADMIN OPTION으로 부여 받은 CREATE SESSION은 다른 사용자에게
부여 가능하나, 그 외의 권한은 부여할 수 있는 권한 X
💁♀️ 객체 권한이란,
사용자가 특정 객체(테이블, 뷰, 시퀀스, ...)를 조작하거나 접근할 수 있는 권한DML(SELECT/INSERT/UPDATE/DELETE) GRANT 권한 종류(EX.SELECT, INSERT, UPDATE, DELETE) [(컬럼명)] | ALL(모든 객체 권한) ON 객체명(EX.C##EMPLOYEE.EMPLOYEE) | ROLE명(EX.C##MYROLE) TO 사용자명(EX.C##SAMPLE) | PUBLIC(모든 사용자)
WITH GRANT OPTION
: 사용자가 특정 객체를 조작하거나 접근할 수 있는 권한을 부여받으면서 그 권한을 다른 사용자에게 다시 부여할 수 있는 권한 옵션
-- <직원관리계정에서 실행>
GRANT SELECT ON C##EMPLOYEE.EMPLOYEE TO C##SAMPLE
WITH GRANT OPTION;
>>> SAMPLE계정에게 EMPLOYEE 테이블에서 셀렉할 수 있는 권한 및
>>> 다른 계정에게 권한을 다시 부여할 수 있는 권한을 줌
-- <샘플 계정으로 실행>
SELECT
EE.*
FROM C##EMPLOYEE.EMPLOYEE EE;
GRANT SELECT ON C##EMPLOYEE.EMPLOYEE TO C##SAMPLE2;
>>> SAMPLE계정에서 SAMPLE2계정도 셀렉할 수 있게 권한을 줌
GRANT INSERT ON C##EMPLOYEE.EMPLOYEE TO C##SAMPLE2;
>>> '권한이 불충분합니다' 오류
>>>SAMPLE계정이 가진 셀렉 권한을 회수(철회)
-- <직원관리계정에서 실행>
REVOKE SELECT ON C##EMPLOYEE.EMPLOYEE FROM C##SAMPLE;
-- <샘플 계정으로 실행>
>>> 권한을 회수 했기 때문에 테이블 조회가 불가능
SELECT
EE.*
FROM C##EMPLOYEE.EMPLOYEE EE;
>>> '테이블 또는 뷰가 존재하지 않습니다' 오류
📌 Ref. WITH GRANT OPTION과 WITH ADMIN OPTION의 차이
* 'WITH GRANT OPTION'은 REVOKE시 다른 사용자에게도 부여한 권한을 같이 회수
- EX) SAMPLE이 SAMPLE2에게 줬던 SELECT 권한도 회수되어 SAMPLE2도 조회할 수 없게됨
* 'WITH ADMIN OPTION'은 특정 사용자의 권한만 회수되고 나머지 다른 사용자에게 부여한 권한은 회수되지 않음
- EX) 회수된 계정만 회수되고 회수된 계정이 다른 계정한테 줬던 권한은 그대로 남아있음
💁♀️ 역할(ROLE)이란,
여러 개의 권한을 묶어 놓는 것
- 사용자마다 일일히 권한을 부여하는 것은 번거롭기 때문에 간편하게 권한을 부여할 수 있는 방법으로 ROLE 제공
- 사용자에게 부여한 권한을 수정하고자 할 때도 그 롤만 수정하면 해당 롤의 권한을 부여 받은 사용자들의 권한이 자동으로 수정됨
오라클 설치 시 시스템에서 기본적으로 제공
- EX) CONNECT, RESOURCE
-- <시스템 계정으로 실행>
SELECT
GRANTEE
, PRIVILEGE
FROM DBA_SYS_PRIVS
-- WHERE GRANTEE = 'RESOURCE';
WHERE GRANTEE = 'CONNECT';
💻 Mini Console
CREATE ROLE 명령으로 롤을 생성
- 롤 생성은 반드시 DBA 권한이 있는 사용자만 가능
CREATE ROLE 롤이름;
CREATE ROLE C##MYROLE;
GRANT 권한종류 TO 롤이름;
GRANT CREATE VIEW, CREATE SEQUENCE TO C##MYROLE;
GRANT 롤이름 TO 사용자명;
GRANT C##MYROLE TO C##SAMPLE;
SELECT
GRANTEE
, PRIVILEGE
FROM DBA_SYS_PRIVS
WHERE GRANTEE = 'C##MYROLE'; >>> 부여된 두 가지 권한 확인 가능
💻 Mini Console
SELECT
DRP.*
FROM DBA_ROLE_PRIVS DRP
WHERE GRANTEE = 'C##SAMPLE';
💻 Mini Console
-- <샘플 계정으로 실행> : 접속 해제 후 재접속하여 테스트하면 객체 생성 가능
CREATE SEQUENCE SEQ_TEST;
>>> SAMPLE이 시퀀스 생성할 권한을 부여받았기 때문에 생성 완료