본문 바로가기

오라클

사용자 관리(권한,조건확인 등)

//************************************************

-- 주요 자료사전(data dictionary)


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

-- SYS 계정


-- 사용자 목록 확인

SELECT username, password, created FROM dba_users;

SELECT username, password, created FROM dba_users WHERE username='사용자명';


SELECT * FROM all_users;    -- 전체 사용자 확인



-- 시스템 권한(CREATE TABLE, CREATE VIEW 등)

SELECT * FROM dba_sys_privs;  -- 부여된 모든 시스템 권한 조회

SELECT * FROM system_privilege_map; -- 전체 시스템 권한 목록



-- 롤 확인

SELECT * FROM DBA_ROLES;


-- 롤에 부여된 시스템 권한(CREATE TABLE, CREATE VIEW 등) 확인

SELECT * FROM role_sys_privs;

SELECT * FROM role_sys_privs WHERE role='CONNECT';

SELECT * FROM role_sys_privs WHERE role='RESOURCE';



-- 롤에 존재하는 롤 확인

SELECT * FROM role_role_privs;



-- 롤이 가지고 있는 객체 권한(INSERT, SELECT 등) 확인

SELECT * FROM role_tab_privs



-- 테이블스페이스 할당량을 확인

SELECT username, tablespace_name, bytes/1024, max_bytes/1024 FROM dba_ts_quotas;



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

-- 사용자 계정


-- 사용자의 시스템 권한(CREATE TABLE, CREATE VIEW 등) 확인

SELECT * FROM user_sys_privs;



-- 사용자에게 부여된 롤 확인

SELECT * FROM user_role_privs;



-- 가지고 있는 객체 권한 확인(INSERT, UPDATE, SELECT, DELETE 등)

SELECT * FROM user_tab_privs;



-- 다른 사용자로 부터 받은 객체 권한 확인(INSERT, UPDATE, SELECT, DELETE 등)

SELECT * FROM user_tab_privs_recd;



-- 테이블 목록 확인

SELECT * FROM tab;



-- 테이블 컬럼 확인

SELECT * FROM col WHERE tname='테이블명';

SELECT * FROM cols WHERE table_name='테이블명';

SELECT * FROM user_tab_columns WHERE table_name='테이블명';

SELECT * FROM all_tab_columns WHERE owner ='디비계정' and table_name = '테이블명' 



-- 제약조건 확인

    DESC user_constraints; -- user_constraints 구조 확인


    SELECT * FROM user_constraints WHERE table_name='INSA'; -- 어떤 컬럼에 제약조건이 부여되었는지 확인 불가

            P : 기본키, C : NOT NULL 등, U : UNIQUE, R : 참조키 등


     SELECT constraint_name, table_name, constraint_type FROM user_constraints;


-- 현재 user가 가지고 있는 column에 할당된 제약조건에 대한 정보

    SELECT * FROM user_cons_columns; -- 어떤 컬럼에 기본키가 부여되었는지 확인 가능



-- procedure, function 목록 확인

    SELECT object_name FROM user_procedures;



-- 테이블의 프로시저, 함수, 패키지 등 상호 참조되는 관계 확인

SELECT * FROM user_dependencies;



 -- 트리거 확인

SELECT trigger_name, trigger_type, table_name FROM user_triggers;



-- 프로시저, 함수등의 소스 확인

SELECT text FROM user_source;



-- 뷰 목록, 소스 확인

SELECT view_name, text FROM user_views;



-- 시퀀스 목록 확인

SELECT * FROM seq;

SELECT * FROM user_sequences;



//************************************************

-- 사용자 확인, 락 설정, 해제

-- SYS 계정

SQLPLUS sys/"암호" as sysdba

SELECT * FROM all_users;    -- 전체 사용자 확인


-- soctt LOCK 설정

ALTER USER scott ACCOUNT LOCK;


-- SCOTT 계정

CONN scott/"암호"

    -- 에러 : Lock이 설정되어 오라클 접속을 할수 없다.


-- SYS 계정

SQL>CONN sys/"암호" as sysdba


-- soctt LOCK 해제

SQL>ALTER USER scott ACCOUNT UNLOCK;



//************************************************

-- 사용자 관리 - 사용자 추가

-- SYS 계정

CREATE USER sky0 IDENTIFIED BY abc;

    -- 로그온 권한이 없어서 CONN가 불가능


-- sky0 사용자에게 데이터베이스에 접속할 수 있는 권한 부여

GRANT CREATE SESSION TO sky0;


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

-- sky0 계정

-- 테이블 작성

CREATE TABLE TEST(id NUMBER);

   -- 테이블 스페이스 사용 권한이 없으므로 테이블을 작성할 수 없다.



//************************************************

--사용자 삭제

-- SYS 계정

-- sky0 사용자가 CONN 되어 있는 상태에서는 삭제 불가

DROP USER sky0;  -- 테이블등이 존재하면 오류

   -- DROP USER sky0 CASCADE; -- 테이블등이 존재하면 객체도 같이 삭제



//************************************************

-- 테이블스페이스를 사용할수 있는 권한을 부여하여 sky0 사용자 추가

-- SYS 계정

CREATE USER sky0 IDENTIFIED BY abc

       DEFAULT TABLESPACE USERS

       QUOTA UNLIMITED ON USERS; -- 무한대

    --   QUOTA 50M ON USERS;


GRANT CREATE SESSION TO sky0;  -- DB 접속 권한


-- 테이블 스페이스의 권한을 부여 했지만 테이블을 만들수 있는 권한이 없으므로 테이블 생성 불가



//************************************************

-- SYS 계정

-- 롤 권한 확인

SELECT * FROM role_sys_privs WHERE role='CONNECT';

SELECT * FROM role_sys_privs WHERE role='RESOURCE';


-- 테이블 생성 권한 부여

GRANT CREATE TABLE TO sky0;

   -- RESOURCE : 롤 -> 테이블스페이스, 테이블 생성, 자료형 생성등 몇가지 권한을 모아모은것

   -- GRANT RESOURCE TO sky0;


-- 사용자에 CONN, 테이블스페이스, 테이블작성등의 권한을 한번에 부여

   -- GRANT CONNECT, RESOURCE TO sky0;


DROP USER sky0;  -- 테이블이 존재하면 삭제 불가능

   -- DROP USER sky0 CASCADE;  -- 테이블 등의 개체가 존재해도 삭제


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

-- SYS 계정

CREATE USER sky0 IDENTIFIED BY abc;


-- 사용자에게 테이블 스페이스 권한 부여

ALTER USER sky0

       DEFAULT TABLESPACE USERS

       QUOTA 50M ON USERS;


-- 테이블스페이스 할당량을 확인

SELECT * FROM dba_ts_quotas;

SELECT username, tablespace_name, bytes/1024,

            max_bytes/1024 FROM dba_ts_quotas;



//************************************************

-- SYS 계정

-- 암호 관리

GRANT CREATE SESSION TO sky0;  -- DB 접속 권한


-- SYS에 의해 암호 변경

ALTER USER sky  IDENTIFIED BY king;


-- sky0 계정

-- sky0 자신이 암호변경

ALTER USER sky0  IDENTIFIED BY king1;


-- SYS 계정

-- sky 사용자의 암호를 만료 시킴

ALTER USER sky0 PASSWORD EXPIRE;

    -- sky 사용자로 CONN시 오류출력후 새로운 암호 입력 요구


DROP USER sky0;



//************************************************

-- SYS 암호 변경

CMD>sqlplus / as sysdba

            -- CMD>sqlplus /nolog : connect가 되지 않은 상태로 sqlplus 만 실행된 상태

SQL>ALTER USER sys  IDENTIFIED BY 암호;

SQL>CONN sys/암호



//************************************************

-- 시스템 권한 : DB 작업, 연산을 수행하기 위해 필요한 권한

        -- CREATE TABLE, CREATE USER, CREATE SESSION.....


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

-- SYS 계정

    SELECT * FROM dba_sys_privs;  -- 부여된 모든 시스템 권한 조회

    SELECT * FROM system_privilege_map; -- 전체 시스템 권한 목록


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

-- 사용자가 시스템 권한 확인

-- 사용자 계정

    SELECT * FROM user_sys_privs;


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

-- SYS 계정

CREATE USER sky1 IDENTIFIED BY king1;

CREATE USER sky2 IDENTIFIED BY king2;


GRANT CREATE SESSION TO sky1;   -- DB 접근 권한 부여

GRANT CREATE SESSION TO sky2;


-- sky1 계정

  -- 부여된 시스템 권한 확인

  SELECT * FROM USER_SYS_PRIVS;


-- SYS 계정

GRANT CREATE TABLE, CREATE VIEW TO sky1;

GRANT RESOURCE TO sky2;


-- sky1 계정

CREATE TABLE TEST(id NUMBER); -- 오류 : 테이블 스페이스 권한이 없어서


-- sky2

-- 사용자에게 부여된 롤 확인

SELECT * FROM user_role_privs;


CREATE TABLE TEST(id NUMBER);

          -- RESOURCE 롤은 CREATE TABLE, 테이블스페이스등의 권한이 존재하므로


-- sky1 계정

GRANT CREATE VIEW TO sky2;  -- ADMIN 권한을 가지고 있지 않으므로 다른 사용자에게 권한을 부여 하지 못함


-- SYS 계정

GRANT CREATE TABLE, CREATE VIEW TO sky1

           WITH ADMIN OPTION;  -- ADMIN 권한 부여


-- sky1 계정

GRANT CREATE VIEW TO sky2;



//************************************************

-- 권한 회수

-- SYS 계정

REVOKE CREATE TABLE, CREATE VIEW FROM sky1;


-- 사용자 제거

DROP USER sky1;

DROP USER sky2 CASCADE; -- 테이블등이 존재하면 오류가 발생하는데 CASCADE 옵션을 붙이면 테이블도 자동 삭제



//************************************************

-- 객체 권한(INSERT, UPDATE....... 등) 확인


-- 사용자 계정

  -- 가지고 있는 객체 권한 확인

  SELECT * FROM user_tab_privs;


  -- 다른 사용자로 부터 받은 객체 권한 확인

  SELECT * FROM user_tab_privs_recd;


-- SYS 계정

  -- 모든 테이블 관련 권한 확인

  SELECT * FROM dba_tab_privs;


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

-- SYS : 객체 권한

CREATE USER sky1 IDENTIFIED BY king1;

CREATE USER sky2 IDENTIFIED BY king2;


GRANT CONNECT, RESOURCE, CREATE VIEW TO sky1;

GRANT CONNECT, RESOURCE TO sky2;

         -- CONNECT, RESOURCE : 롤


-- sky1

CREATE TABLE TEST(id NUMBER, name VARCHAR2(20));

INSERT INTO TEST (id, name) VALUES(1, 'aaa');

INSERT INTO TEST (id, name) VALUES(2, 'bbb');

COMMIT;


GRANT SELECT ON test TO sky2;

    -- sky1이 sky2한테 test 테이블의 SELECT 권한 부여


-- sky2

SELECT * FROM sky1.test;


SELECT * FROM user_tab_privs; -- 가지고 있는 객체 권한

SELECT * FROM user_tab_privs_recd;   -- 받은 객체 권한 확인


INSERT INTO sky1.test (id, name) VALUES (3, 'ccc');

                -- 오류 : INSERT 권한이 없으므로


-- sky1 계정

  -- sky2 에게 sky1 테이블에 INSERT 권한 부여

GRANT INSERT(id, name) ON test TO sky2;

 -- 또는 GRANT INSERT ON test TO sky2;


-- sky2 계정

INSERT INTO sky1.test (id, name) VALUES (3, 'ccc');

COMMIT;

SELECT * FROM sky1.test;


-- 권한 회수

-- sky1

REVOKE SELECT ON test FROM sky2;


-- sky2 계정

SELECT * FROM sky1.test;

       -- 오류


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

--SYS 계정

DROP USER sky1 CASCADE;

DROP USER sky2 CASCADE;



//************************************************

--ROLE : 관리의 효율성을 위해 서로 연관된 권한을 한데 묶은 그룹


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

-- SYS 계정

-- ROLE 확인

SELECT * FROM dba_roles;


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

--  ROLE 생성과정

   -- 롤생성 -> 롤에 권한 부여 -> 롤을 사용자에 부여


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

-- Role 생성

CREATE ROLE std_role;

SELECT * FROM dba_roles;


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

-- 암호를 가진 롤 생성

CREATE ROLE std_role1 IDENTIFIED BY aaa;

SELECT * FROM dba_roles;


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

-- 롤에 시스템 권한 부여

GRANT RESOURCE, CONNECT, CREATE VIEW TO std_role;

          -- std_role 에 RESOURCE, CONNECT 롤, CREATE VIEW 시스템 권한 부여


SELECT * FROM role_role_privs WHERE role='STD_ROLE';

        -- 롤안의 롤 확인


SELECT * FROM role_sys_privs WHERE role='STD_ROLE';

        -- 시스템 권한 확인


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

-- 롤에 객체 권한 부여

-- 사용자

GRANT SELECT, INSERT, UPDATE ON insa TO std_role;


--sys

SELECT * FROM ROLE_TAB_PRIVS WHERE role='STD_ROLE';

          -- 객체 권한 확인



//************************************************

-- ROLE 변경

-- 롤의 암호 제거

ALTER ROLE std_role1 NOT IDENTIFIED;

SELECT * FROM dba_roles WHERE role='STD_ROLE1';


-- 사용자에게 ROLE 부여

CREATE USER sky1 IDENTIFIED BY king1;


-- 사용자에게 ROLE 적용

GRANT STD_ROLE TO sky1;


-- sky1 계정

SELECT * FROM scott.insa;


-- sky1이 권한 확인

    SELECT * FROM user_role_privs; -- 롤 확인

    SELECT * FROM user_tab_privs;  -- 객체 권한 확인

    SELECT * FROM user_sys_privs;  -- 시스템 권한 확인


    -- roll의 권한은 시스템 계정에서 확인

       -- SELECT * FROM role_role_privs

       -- SELECT * FROM role_sys_privs

       -- SELECT * FROM role_tab_privs



//************************************************

-- 사용자의 ROLE 회수

-- SYS 계정

REVOKE std_role FROM sky1;



//************************************************

-- PUBLIC 롤 : 모든 사용자에게 자동으로 권한 부여


CREATE ROLE pub_role; -- 롤 생성

-- 롤에 권한 부여

GRANT RESOURCE, CREATE VIEW, CONNECT TO pub_role;

-- PUBLIC 롤

GRANT pub_role TO PUBLIC WITH ADMIN OPTION;


-- PUBLIC 롤 회수

REVOKE pub_role FROM PUBLIC;

   -- REVOKE pub_role FROM sky1;  -- 오류


-- sky1 CONN 오류


-- ROLE 삭제

DROP ROLE  pub_role;

DROP ROLE std_role;

DROP ROLE std_role1;


'오라클' 카테고리의 다른 글

오라클 접속 방법  (0) 2013.06.15
EXERD 모델링 프로그램  (0) 2013.06.10
동적 SQL  (0) 2013.06.08
데이터 링크  (0) 2013.06.08
커서(Cursor)  (0) 2013.06.06