본문 바로가기

Oracle

[Oracle] 권한 관리(부여/회수) 및 ROLE 관리

 

1. 권한

  1. READ ONLY (SELECT)
  2. WRITE (ALTER, DROP, CREATE 등)
  3. 객체 참조 (SYNONYM)

 


 

2. 권한 종류

  2-1. 시스템 권한

SELECT * FROM DBA_SYS_PRIVS;

 

사용자 계정 RESOURCE   개체 생성/변경/제거
CONNECT  DB 연결 권한(계정 생성 후 필수 부여. 부여하지 않으면 접속 불가)
DBA DB 관리자 권한
시스템 권한 CREATE USER 데이터베이스 유저생성 권한
CREATE/SELECT/ALTER
ANY TABLE/VIEW
모든 유저의 테이블/뷰 등 생성/조회/변경
CREATE SESSION 데이터베이스 접속 권한
CREATE TABLE 테이블 생성 권한

 

 

 

   2-2. 객체 권한

SELECT * FROM DBA_TAB_PRIVS;
오브젝트 권한
(DB 객체)
ALTER, INSERT, SELECT,
UPDATE, DELETE
테이블에 대한 데이터 삽입 갱신 및 삭제 권한

 

 

 

   2-3. 롤

SELECT * FROM DBA_ROLE_PRIVS;
  • 여러 개의 권한을 그룹으로 묶은 권한의 묶음으로 사용자에게 ROLE을 부여하면 해당 ROLE이 가지고 있는 권한들을 가질 수 있음 (다음 포스팅에서 자세히 설명)

 


   2-4. 기타 옵션

기타옵션 WITH GRANT OPTION  권한을 할당받은 유저가 다른 유저에게 해당 권한을 재할당
PUBLIC  해당 권한을 DB에 존재하는 모든 유저에게 할당

 


 

3. 권한 부여

  3-1. 계정에 권한 부여

GRANT 권한1, 권한2 USER TO 사용자;

 

 

  3-2. 객체에 권한 부여

GRANT SELECT/UPDATE/INSERT/DELETE ON [유저명].[테이블명] TO [권한을 부여할 유저명];

 

 


 

4. 권한 회수

  4-1. 계정에 권한 회수

REVOKE 권한1, 권한2 USER FROM 사용자;

 

 

  4-2. 객체에 권한 회수

REVOKE SELECT/UPDATE/INSERT/DELETE ON [유저명].[테이블명] FROM [권한을 부여할 유저명];

 

 


 

5. 실습 : 권한 부여 및 회수

  5-1. 계정 생성

  • system 계정에서 SCOTT 계정을 생성한다.
CREATE USER SCOTT IDENTIFIED BY scott;

 


  5-2. 권한 부여

  • system 계정에서 SCOTT 계정 접속 권한 및 계정 생성 권한을 부여한다.
  • SCOTT 계정에 A.TEST테이블의 조회 권한을 부여한다
GRANT CONNECT, CREATE USER TO SCOTT;
GRANT SELECT ON A.TEST TO SCOTT;

 

 

  5-3. SCOTT계정 접속

-- LINUX
conn SCOTT/scott

-- dbeaver 또는 orange같은 DB Tool사용
해당 DB에 username, password 사용해 접속

 


  5-4. 권한 회수

  • system 계정에서 SCOTT 계정 생성 권한을 회수한다.
  • SCOTT 계정에 A.TEST테이블의 조회 권한을 회수한다
REVOKE CREATE USER FROM SCOTT;
REVOKE SELECT ON A.TEST FROM SCOTT;

 

 


 

6. ROLE

  6-1. 개념 및 필요성

  • 여러 개 권한을 하나의 그룹으로 묶은 것
  • ROLE을 사용자에게 부여하면, ROLE에 속한 권한들을 한 번에 사용자 계정에 부여하거나 회수 가능해 간소화 가능
  • 업무별로 필요한 권한만을 포함해 보안 유지 가능
  • 같은 역할을 하는 여러 사용자에게 동일한 권한 부여를 통한 일관성 유지 가능
  • 유지보수 용이
 

  6-2. ROLE 부여, 조회, 회수, 삭제

      1) ROLE 생성

CREATE ROLE 롤이름;

 

      2) 권한 부여

GRANT 권한1, 권한2, 권한3,,, TO 롤이름;

 

      3) ROLE을 사용자에게 부여

GRANT 롤이름 TO 사용자명;

 

      4) ROLE을 사용자로부터 회수

REVOKE 롤이름 FROM 사용자명;

 

      5) 사용자의 ROLE 확인

SELECT *
  FROM DBA_ROLE_PRIVS
 WHERE GRANTEE = '사용자이름';

 

      6) ROLE에 포함된 권한 확인

SELECT * 
  FROM DBA_SYS_PRIVS
 WHERE GRANTEE = '롤이름';

 

      7) ROLE 삭제

DROP 롤이름;