hyeonga_code
Database_59_사용자 접근 제어_DCL 본문
-- 사용자 접근 제어
-- DCL
-- GRANT : 권한을 부여합니다.
-- REVOKE : 부여한 권한을 철회합니다.
-- 권한
-- 데이터베이스 보안
-- 시스템 보안 : 인증받은 사용자만 접근할 수 있습니다.
-- 계정 관리
-- 계정 생성 : 이름, 암호, 저장공간 할당
/* CREATE USER username IDENTIFIED BY pqssword */
-- 계정 수정 : 암호, 상태
/* ALTER USER username IDENTIFIED BY passoword */
/* ALTER USER username ACCOUNT [ LOCK | UNLOCK ] */
-- 계정 삭제
/* DROP USER username CASCADE; */
-- 스키마 삭제
-- 시스템 권한 : 데이터베이스를 엑세스할 수 있습니다.
-- 관리자 권한
-- 새 사용자 생성_CREATE USER
-- 사용자 제거_DROP USER
-- 테이블 생성_CREATE ANY TABLE
-- 테이블 백업_BACKUP ANY TABLE
-- 데이터 보안 : 데이터 마다 접근할 수 있는 권한이 필요합니다.
-- 계정 관리(스키마) + 객체 권한
-- 객체 권한 : 데이터에 엑세스 할 수 있는 권한입니다.
-- SELECT, INSERT, UPDATE, DELETE, ALTER, INDEX, REFERENCE, EXECUTE
-- ROLL : 권한 관리를 쉽고 빠르게 하기 위해 생성하는 명명된 권한의 모음입니다.
-- 일반적으로 대부분의 사용자들에게 부여해야 하는 권한을 모아 한 번에 부여할 수 있습니다.
-- 생성
/* CREATE ROLE role */
-- 권한 지정
/* GRANT grant TO role; */
-- 삭제
/* DROP ROLE role */
-- 스키마 : 테이블, 뷰, 시퀀스 등과 같은 객체의 Collection입니다.
-- 데이터 보안의 범위입니다.
-- DCL_Data Control Language : 권한 관리 명령문
-- 권한 부여
-- 한 번에 여러 개의 권한을 부여할 수 있습니다.(콤마로 구분)
/*
GRANT '시스템 권한' | '객체 권한' | '롤'
TO [ '사용자' | '롤' | 'PUBLIC' ]
[ WITH ADMIN OPTION ] : 시스템 권한/롤인 경우 사용합니다.
-- 다른 사용자에게 권한을 부여할 수 있게 됩니다.
-- 회수하는 경우 연쇄 회수가 발생하지 않습니다.
[ WITH GRANT OPRION ] : 객체 권한인 경우 사용합니다.
*/
-- 데이터 보안으로 오류가 발생하는 경우
-- 권한 회수
/*
REVOKE [ '시스템 권한' | '객체 권한' | '롤' ]
FROM [ '사용자' | '롤' | PUBLIC ]
*/
SELECT * FROM scott.player;
/*
<오류>------------------------------------------
ORA-00942: table or view does not exist
00942. 00000 - "table or view does not exist"
--------------------------------------------------
-- 테이블에 접근할 수 없어도 뷰에 접근할 수는 있습니다.
*/
--------------------------------------------------------------------------------------------------------
----------관리자 데이터베이스--------------------------------------------------------------------
-- 전체 사용자 계정을 조회합니다.
SELECT username, password
FROM dba_users;
/*
USERNAME PASSWORD
------------------------------------------------------------------------------------------------
SYS ( null ) : 최상위 관리자입니다.
SYSTEM ( null ) : SYS 하위 관리자입니다. DB 시작/종료를 할 수 없습니다.
ANONYMOUS ( null )
SCOTT ( null ) : 실습용으로 생성한 사용자입니다.
HR ( null ) : 실습용으로 생성한 사용자입니다.
APEX_PUBLIC_USER ( null )
FLOWS_FILES ( null )
APEX_040000 ( null )
OUTLN ( null )
DIP ( null )
ORACLE_OCM ( null )
XS$NULL ( null )
MDSYS ( null )
CTXSYS ( null )
DBSNMP ( null )
XDB ( null )
APPQOSSYS ( null )
-- 각자의 역할을 가진 사용자를 Oracle이 자동으로 생성한 계정들이 있습니다.
-- PASSWORD가 null 값으로 조회되는 이유는 암호화되어 있기 때문입니다.
*/
-- 사용자 생성
-- 물리적인 권한을 아무것도 허가하지 않은 사용자를 생성합니다.
/*
CREATE USER user
IDENTIFIED BY password;
*/
-- 데이터파일을 저장할 수 있는 사용자를 생성합니다.
CREATE USER demo
IDENTIFIED BY demo
DEFAULT TABLESPACE users;
/*
User DEMO이(가) 생성되었습니다.
-- 접속 시도 오류
상태: 실패 -테스트 실패: ORA-01045: user DEMO lacks CREATE SESSION privilege; logon denied
*/
-- 전체 사용자 계정을 조회합니다.
SELECT username, password
FROM dba_users;
/*
USERNAME PASSWORD
-------------------------------------
DEMO ( null )
-- DEMO 계정이 생성되었지만 권한이 없어 접속이 불가능합니다.
*/
-- 권한
-- CREATE SESSION
-- CREATE TABLE
-- CREATE SEQUENCE
-- CREATE VIEW
-- CREATE PROCEDURE
-- 특정 시스템 권한을 부여할 수 있습니다.
-- 접속 권한을 부여합니다.
GRANT create session TO demo;
/*
Grant을(를) 성공했습니다.
*/
--------------------------------------------------------------------------------------------------------
----------DEMO 데이터베이스--------------------------------------------------------------------
CREATE TABLE demoemp(
id NUMBER(3),
name VARCHAR(20)
);
/*
<오류>-------------------------------------------------------------------------
오류 보고 -
ORA-01031: insufficient privileges
01031. 00000 - "insufficient privileges"
*Cause: An attempt was made to perform a database operation without
the necessary privileges.
*Action: Ask your database administrator or designated security
administrator to grant you the necessary privileges
---------------------------------------------------------------------------------
*/
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
----------관리자 데이터베이스-------------------------------------------------------------------
-- 테이블 생성 권한을 부여합니다.
GRANT create table TO demo;
/*
Grant을(를) 성공했습니다.
*/
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
----------DEMO 데이터베이스--------------------------------------------------------------------
CREATE TABLE demoemp(
id NUMBER(3),
name VARCHAR(20)
);
/*
<오류>-------------------------------------------------------------------------
오류 보고 -
ORA-01950: no privileges on tablespace 'USERS'
01950. 00000 - "no privileges on tablespace '%s'"
*Cause: User does not have privileges to allocate an extent in the
specified tablespace.
*Action: Grant the user the appropriate system privileges or grant the user
space resource on the tablespace.
---------------------------------------------------------------------------------
-- 공간 설정 권한만 있고 사용할 수 있는 권한을 부여하지 않았습니다.
*/
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
----------관리자 데이터베이스-------------------------------------------------------------------
-- 무제한 용량, 개수를 사용할 수 있는 권한을 부여합니다.
GRANT unlimited tablespace TO demo;
/*
Grant을(를) 성공했습니다.
*/
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
----------DEMO 데이터베이스--------------------------------------------------------------------
CREATE TABLE demoemp(
id NUMBER(3),
name VARCHAR(20)
);
/*
Table DEMOEMP이(가) 생성되었습니다.
*/
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
----------관리자 데이터베이스-------------------------------------------------------------------
-- 계정 잠금
ALTER USER demo ACCOUNT LOCK;
/*
User DEMO이(가) 변경되었습니다.
*/
-- 전체 사용자 계정을 조회합니다.
SELECT username, password, created, account_status
FROM dba_users;
-- 계정 잠금을 해제합니다.
ALTER USER demo ACCOUNT UNLOCK;
/*
User DEMO이(가) 변경되었습니다.
*/
-- 전체 사용자 계정을 조회합니다.
SELECT username, password, created, account_status
FROM dba_users;
--------------------------------------------------------------------------------------------------------
'Oracle Database' 카테고리의 다른 글
Database_61_SQL 활용 실습 1 (0) | 2023.08.17 |
---|---|
Database_60_사용자 접근 제어 실습_SQL 자격증 시험 데이터 기반 (0) | 2023.08.15 |
Database_58_데이터베이스 객체_동의어_SYNONYM (0) | 2023.08.13 |
Database_57_데이터베이스 객체_시퀀스_Sequence (0) | 2023.08.13 |
Database_56_데이터베이스 객체_뷰_VIEW (0) | 2023.08.12 |