hyeonga_code

Database_59_사용자 접근 제어_DCL 본문

Oracle Database

Database_59_사용자 접근 제어_DCL

hyeonga 2023. 8. 14. 05:59
반응형

-- 사용자 접근 제어
    -- 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;


--------------------------------------------------------------------------------------------------------

반응형