DB-Oracle

Oracle Database - DCL – Data Control Language

jmeen 2021. 8. 5. 15:37
728x90

Database User

데이터베이스 사용자
  - 데이터베이스에 접속하여 데이터를 이용하기 위해 접근하는 모든 사람
  - 이용 목적에 따라 데이터베이스 관리자(Database Administrator: DBA), 최종 사용자, 응용프로그래머로 구분
  - Oracle 데이터베이스 생성시 기본적으로 생성되는 계정
     - SYS
        - Data Dictionary Table의 소유자
     - SYSTEM
        - 각종 Dictionary View의 소유자
  - 각 USER는 동일한 이름의 SCHEMA 소유자로, 해당 SCHEMA의 모든 객체들에 접근할 수 있다

 

사용자 관리

Syntax
사용자 생성 : CREATE USER username IDENTIFIED BY password;
비밀번호 변경 : ALTER USER username IDENTIFIED BY password;
사용자 삭제 : DROP USER username [CASCADE];

 

주의사항

  • 일반적으로 DBA의 일
  • 사용자를 생성하려면 CREATE USER 권한 필요
  • 생성된 사용자가 Login 하려면 CREATE SESSION 권한 필요
  • 일반적으로 CONNECT, RESOURCE의 ROLE을 부여하면 일반사용자 역할을 수행할 수 있음

[연습] bituser 사용자를 생성하고 비밀번호를 변경해 봅니다

SQL> conn system/manager
Connected.
SQL> CREATE USER c##bituser IDENTIFIED BY bituser;
User created.
SQL> conn bituser/bituser
ERROR:
ORA-01045: user BITUSER lacks CREATE SESSION privilege;
logon denied

  - USER를 생성해도 권한(Privilege)를 주지 않으면 아무 일도 할 수 없음
     - 위 예에서는 사용자가 CREATE SESSION 권한을 갖고있지 않아 오류 발생
  - 사용자는 DBA가 초기화한 암호를 갖게 되며, 로그인 후 ALTER USER 명령을 이용, 각자의 암호를 재설정

 

 

사용자 정보 확인

관련 DICTIONARY

  • USER_USERS : 현재 사용자 관련 정보
  • ALL_USERS : DB의 모든 사용자 정보
  • DBA_USERS : DB의 모든 사용자 상세 정보 (DBA만 사용 가능)
SELECT * FROM USER_USERS;

 

[연습] USER_USERS, ALL_USERS, DBA_USERS Dictionary로부터 user 목록을 각각 출력해 봅니다

SQL> conn scott/tiger
SQL> SELECT username FROM user_users;
SQL> SELECT username FROM all_users;
SQL> SELECT username FROM dba_users;
(ERROR 발생, DBA 권한을 갖고 있지 않음)
SQL> conn system/manager
SQL> /
(SUCCESS, system 계정은 DBA 권한을 갖고 있음)

권한(Privilege)과 롤(Role)

Privileges

권한(Privilege)
  - 사용자가 특정 SQL 문을 실행하거나 특정 정보에 접근할 수 있는 권리
  - 사용자는 작업에 요구되는 관련 권한에 대한 허가(GRANT)를 받아야 한다
  - 종류
     - 시스템 권한(80여개) :
     - 스키마 객체 권한

 

롤(Role)
  - 권한을 쉽게 관리하기 위하여 특정한 종류별로 묶어놓은 그룹

GRANT / REVOKE

권한/롤을 부여(GRANT)하거나 회수(REVOKE)
Syntax (System Privileges)  - 시스템 권한

GRANT [system_priv|role [,system_priv|role ...]
TO {user [,user ...]|role|PUBLIC}
[WITH ADMIN OPTION];
REVOKE [system_priv|role [,system_priv|role ...]
FROM {user [,user ...]|role|PUBLIC};

Syntax (Object Privileges) -  개별 객체 권한

GRANT {[object_priv [,object_priv ...]|ALL}
ON object TO {user [,user ...]|role|PUBLIC}
[WITH ADMIN OPTION];
REVOKE {[object_priv [,object_priv ...]|ALL}
FROM {user [,user ...]|role|PUBLIC};

GRANT, REVOKE 문장은 실행 즉시 효력을 발휘한다 (재접속 등 필요 없음)

 

시스템 권한: 관리자로 수행 (ADMIN OPTION/GRANT ANY PRIVILEGES 권한)

GRANT create session TO user1;
REVOKE create session FROM user1;

스키마 객체 권한

GRANT select ON emp TO user1;
REVOKE select ON emp FROM user1;

WITH GRANT OPTION
  - 해당 권한을 받은 사용자가 다시 제3자에게 권한을 부여할 수 있도록 하는 옵션
  - 권한을 REVOKE 하면 해당 사용자가 3자에게 부여한 권한들도 함께 회수됨

GRANT select ON emp TO user2
WITH GRANT OPTION;
------
-- dcl
-----
-- create : 데이터 베이스 객체 생성
-- alter : 데이터 베이스 객체 수정
-- drop : 데이터 베이스 객체 삭제

-- SYSTEM 계정으로 수행

-- 사용자 생성 : CREATE USER
CREATE USER c##bituser IDENTIFIED BY bituser;

-- SQLPLUSE에서 사용자로 로그인

-- 사용자 삭제 DROP USER
DROP USER c##bituser CASCADE; -- cascade : 연결된 모든 것을 함께 삭제

-- 다시 생성
CREATE USER c##bituser IDENTIFIED BY bituser;

-- 사용자 정보 확인
-- USER_ : 현재 사용자 관련 
-- ALL_ : 시스템 전체 객체
-- DBA : DBA전용, 객체 모든 정보

SELECT * FROM USER_USERS;
SELECT * FROM ALL_USERS;

SELECT * FROM DBA_USERS;

-- 새로 만든 사용자 확인
SELECT * FROM DBA_USERS WHERE username = 'C##BITUSER';

-- 권한 {privilege)와 역할 {ROLE)
-- 특정 작업 수행을 위해 적절한 권한을 가져야 한다.
-- CREATE SESSION

-- 시스템 권한의 부여 ; GRANT 권한 TO 사용자
-- c##bituser에게 crete sesstion 권한 부여
GRANT create session to C##BITUSER;

-- 일반적으로 CONNECT, RESOURCE롤을 부여하면 일반 사용자의 역할을 수행할 수 있다.
GRANT connect, resource to C##BITUSER;

-- 오라클 12이후로는 임의로 Table Space를 할당해줘야한다.
ALTER USER C##BITUSER -- 사용자 정보 수정
DEFAULT TABLESPACE USERS   -- 기본 테이블 스페이스를 USERS에 지정
QUOTA UNLIMITED ON USERS; -- 사용 용량 지정

-- 객체 권한 부여
-- C##BITUSER 사용자에게 HR.employees를 SELECT할수있는 권한 부여
GRANT SELECT on hr.employees to C##BITUSER;
-- 객체 권한 회수
REVOKE select on HR.employees FROM c##bituser;

-- 전체 권한 부여
-- GRANT ALL privileges ..