본문 바로가기
서버구축 (WEB,DB)

오라클 User 생성 및 권한관리

by 날으는물고기 2009. 6. 19.

오라클 User 생성 및 권한관리

SYS 권한(privilege) 유포 확인 쿼리

1) DATABASE에 있는 SYS가 나눠준 모든 권한 보기

SQL> select * from dba_sys_privs;

GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
HR                             UNLIMITED TABLESPACE                     NO
OE                             QUERY REWRITE                              NO
OE                             CREATE SNAPSHOT                          NO

;adm = with admin option으로 SYS가 HR에게 권한을 줄때 

EX) GRANT greate user TO hr with admin option을 받은 hr은 그 받은 권한만을 다른 대상에게 부여할 수 있다.

2) 모든 계정이 table에 대한 권한을 알아보려면.. 

SELECT  *   FROM  USER_TAB_PRIVS   --( 내가 가진 객체 권한 )

SELECT  *   FROM  USER_TAB_PRIVS_RECD  --( 내가 받은 권한 )

SELECT  *   FROM  USER_TAB_PRIVS_MADE  --( 모든 테이블의 권한 확인 )

SELECT  *   FROM  DBA_TAB_PRIVS  --( 모든 테이블 관련 권한 )


User의 생성 및 권한관리

    - User
      모든 Database객체는 특정 user의 소유로 되어 있으며 자신의 소유객체 외에 다른 소유의 객체는 권한이 있어야 접근이 가능
    - Oracle은 user로 Database 사용을 control
    - Database 생성시 자동으로 생성되는 User
      ① SYS
          DBA Role을 가지고 있으며 Data Dictionary Table의 소유자
      ② SYSTEM
          DBA Role을 가지고 있으며 Data Dictionary View의 소유자

⑴ User 생성 및 변경
    - User 생성 구문
       create user user명 identified by 패스워드명    

       SQL > show user          -- 현재 접속된 사용자명
       SQL > create user ocp identified by ocp;

    - User 변경 구문
       password 변경은 해당 user 혹은 dba Role안의 alter user 권한을 가지고 있는 user만 변경이 가능하다.

       SQL> alter user tonkjsp identified by tonkjsp1;
       SQL> conn tonkjsp/tonkjsp1
                연결되었습니다. 

⑵ 권한(Privilege)
    - 특정 SQL문을 수행 할 수 있는 권리.
    - Oracle의 모든 명령문은 그에 대한 권한이 있어야만 가능하다.
    - 권한에는 database에서 객체를 정의할 수 있는 System권한과 정의된 객체에 대한 특정 작업을 부여 할 수 있는 객체 권한이 있다.
    - System 권한에서 Any라는 옵션은 다른 계정 소유의 객체에게도 수행 할 수 있다.
       Drop any Table table명
    - 권한   

   - 권한 부여 및 회수

   ① system 권한 부여
       grant
               system 권한 [, system권한 ..., rol명... , role명 , .... ]
       to
               {user명 | role명  | public } , [{user명 | role명 | public } .... ]
               [with admin option] 

       SQL> grant create session, create table to user;
       SQL> grant create session to user1 with admin option 

   ② 객체 권한 부여
       grant
              객체 권한  [, 객체권한 ..., ] || all
              on 대상객체, 대상객체, ....
      to
             {user명 | role명 | public} [,{user명 | role명 | public } ... ]
             [with grant option] 

       SQL> grant execute on dbms_pipe
       SQL> to public ;
       SQL> grant upate(ename, sal) on emp
       SQL> to user1
       SQL> with grant option;        

   ③ system 권한 회수
        REVOKE
        system권한[, system권한.., role명, role명]
        from
        {user명 | role명 | public } [,{user명 | role명 | public } ...] 

        SQL> revoke create table from user1;

   ④ 객체 권한 회수
        REVOKE
        객체권한 [, 객체권한 ..,]  | ALL
        ON 대상객체, 대상객체, ....
        FROM
        {user명 | role명 | public } [,{user명 | role명 | public} ...]        

        SQL> revoke execute on dbms_pipe from winter;     

    ※ public , all,  with admin option , with grant option

     ① public
         특정 user가 아닌 모든 user에게 권한 부여 

     ② all
        객체 권한에 명시하는 것으로 해당 객체의 모든 권한을 부여 

     ③ with admin option
         권한 상속 

     ④ with grant option
        권한 상속, cascade ,,,,,, 

⑶ Role
    - 권한의 모음 , 권한을 묶어서 수많은 권한들을 편리하게 제어할 수 있는 기능 
    - 수행하는 명령문이 기존의 권한 부여 및 취소하는 명령과 동일
    - system권한 ,객체권한 모두, 같이 묶을 수 있다. 
    - role에 포함된 권한 설정을 변경하면 해당 role을 포함한 계정도 즉시 변경됨.
      그럼으로 구너한 설정 변경에 대한 조치를 취할 필요가 없다. 
    - 소유되지 않으면 schema  객체가 아니다. 
    - dba 관리자가 생성하면 아무 계정이나 자신의 권한을 포함시킬 수 있다. 
    - create role권한이 있으면 다른 계정이라도 role을 생성할 수 있으나 자신의 객체가 되지 않고 공동으로 사용하게 됨.

      SQL> conn system/manager
               연결되었습니다.
      SQL> create role arole;
               롤이 생성되었습니다.
      SQL> create role broke;
               롤이 생성되었습니다.
      SQL>  grant drop any table, select any table to arole;
                권한이 부여되었습니다.
      SQL> conn tonkjsp/tonkjsp1
                연결되었습니다.
      SQL> grant select on staff to broke;
                권한이 부여되었습니다.


=== User Managerment ===              

 - sys 사용자    : Database 내의 모든 권한을 갖구 있다.
 - system 사용자 : DBA, pw : manager     
 - scott 사용자 : pw : tiger, 사용자별 공간, 리소스 제한, 패스워드 관리, 세션관리 등
 - table, view, trigger등 database object는 사용자별로 생성, object 소유자는 해당 object를 생성한 사용자
                                      
* 사용자 생성 (system 계정에서)
  create user oratest identified by oratest;  //user:oratest pw:oratest
                                      
  create oratest indetified by oratest  
  default tablespace appl_data   // 해당 사용자 아이디가 사용할 테이블 등의 오브젝트들을 생성하고자 할때 할당되는 테이블스페이스
  temporary tablespace temp;     // 해당 사용자 아이디가 Sort, Group by 등의 작업을 수행하고자 할때 사용되는 테이블스페이스
                                      
  create oratest indetified by oratest  
  default tablespace appl_data        
  temporary tablespace temp           
  quota 15M on appl_data
  quota 10M on system;
                                      

* 변경
  alter user oratest identified by studyhard; (암호바꾸기)
                                      
  alter user oratest default tablespace users; (테이블스페이스 바꾸기)
                                      
  alter user oratest                    
  default tablespace users            
  quota 20M on users;                 
                                      

* 제거
  drop user oratest;                    
  drop user oratest cascade; (객체가 들어 있을때)

* user 보기 - 딕셔너리
  select * from dba_users;              
  select * from user_users;             

* 사용자 공간 할당 모니터링- 딕셔너리
  select * from user_ts_quotas;         
  select * from dba_ts_quotas;          
                                    
* 사용자 세션 모니터링 및 중단
  select sid, serial#, username, program from v$session;
  alter system kill session '13, 25060'; (sid, serial#)
                                      
  col program format A20;               
                                      

----------------------------------------------------------------------------------------
=== Password Managerment ===          
                                      
 - account locking : 횟수이상 틀리면 락 걸음.
 - password aging and expiration : password 유효기간 설정.
 - password history : 이전에 사용했던 password 다시 사용못함.
 - password complexity verification : 복잡성 체크

                                      
* account locking
 careate profile my_profile limit      
         failed_login_attempts 4  (4번 기회)
         password_lock_time 30;  (30일동안)
 alter user scott profile my_profile; (적용)
 alter user scott account unlock; (락걸렸을때 해제)
 alter user scott accout lock; (걍 잠구기)

                                       
* password aging and expiration
 create profile my_profile limit       
        failed_login_attempts 4  (4번 기회)
        password_lock_time 30  (30일동안)failed
        password_life_time 60  (유효 60일)
        password_grace_time 3  (유예기간 3일)
                                       
 alter user scott profile my_profile; (적용)
 alter user scott password expire; (걍 잠구기)

                                       
* password history
 create profile my_profile limit       
        password_reuse_time 60 (60일 동안 사용할수 없음)
        password_reuse_max unlimited;  
 alter user scott profile my_profile; (적용)

 create profile my_profile limit       
        password_reuse_max 3           
        password_reuse_max unlimited;  
 alter user scott profile my_profile; (적용)
                                       

* password complexity verification :스크립트(utlpwdmg.sql)사용
 - 스크립트 위치 : /oracle\Ora81\RDBMS\ADMIN\utlpwdmg.sql
 - sys 계정에서 해야한다.              
     
                                       
* 최종                                
 careate profile my_profile limit      
        failed_login_attempts 4  (4번 기회)      
        password_life_time 60  (패스워드 사용일수)
        password_reuse_time 60 (60일 동안 사용할수 없음)
        password_reuse_max unlimited   
        password_verify_function verify_function (암호검증_
        password_lock_time 1/24 (로그인 시도시 실패 후 account lock걸려있는 기간)
        password_grace_time 0; (첫번째 로그 성공후 password 소멸 전에 변경 할 수 있는 유예기간)

                                       
* profile 초기화
 careate profile my_profile unlimited  
        failed_login_attempts unlimited  (4번 기회)      
        password_life_time unlimited  (패스워드 사용일수)
        password_reuse_time unlimited (60일 동안 사용할수 없음)
        password_reuse_max unlimited   
        password_verify_function null (암호검증_
        password_lock_time unlimited  (로그인 시도시 실패 후 account lock걸려있는 기간)
        password_grace_time unlimited; (첫번째 로그 성공후 password 소멸 전에 변경 할 수 있는 유예기간)
                                       

* password 딕셔너리
 select resource_name, limit from dba_profiles
      where profile="my_profile' and resource_type = 'password';
                                       
 
 ----------------------------------------------------------------------------------------
 === 시스템 권한 === 
                  
 - create session : 궈한을 받은자(grantee) 데이타베이스 접속할 수 있게
 - create table : 테이블, 인덱스 생성, (unlimited tablespace 같이 준다.)
 - unlimited tablespace : 테이블스페이스에서 블록을 할당
 - select any table : 어떤 schema로 된 snapshot이라도 검색할 수 있다.
                                       
* 권한 주기 - system 권한에서
 create user acc_user identified by acc1030;
 grant create session to acc_user; (세션주기)
 grant create session to public; (전체 유저에게)
 grant create table, unlimited tablespace to acc_user;(table 생성 권한주기)
 
                                       
* 권한 회수
 revoke create session from acc_user; (권한 회수)
                                       
 
* 사용자가 다른사용자에게 권한주기 with admin option이 있어야 함
 connect system/manager                
 create user a_user identified by a1030;
 create user b_user identified by b1030;
 grant create session to a_user with admin option;
 connect a_user/a1030;                 
 grant create session to b_user with admin option;
                                       
* 딕셔너리                            
 select * from dba_sys_privs;          

                                       
----------------------------------------------------------------------------------------
=== object privileges ===                 
 
* 권한 주기
 connect scott/tiger                   
 grant select on emp to acc_user; (select 권한 주기)
 grant insert on emp to acc_user; (insert 권한 주기)
 grant update (sal) n emp to acc_user; (sal 컬럼 update 권한 주기)
 connect acc_user/acc1030;             
 select * from scott.emp;              
                                       
* 권한 회수
 revoke update on emp from acc_user;   
                                       
* 사용자가 다른사용자에게 권한주기 with admin option이 있어야 함
 - 시스템 권한은 계층적이다.           
 - revoke 할때 cascade 된다.           
                                       
* 딕셔너리                            
 user_tab_privs : 사용자가 소유자, 부여자 또는 권한을 받은 자인 경우의 오브젝트에 대한 권한.
 user_tab_privs_made : 사용자가 소유하고 있는 오브젝트에 대한 모든 권한
 user_tab_privs_recd : 사용자가 권한을 받은 자인 경우의 오브젝트에 대한 권한.
 user_col_privs : 사용자가 소유자, 부여자 또는 권한을 받은 자인 경우 열에 대한 권한
 user_col_privs_made : 사용자가 소유하고 있는 오브젝트의 열에 대한  모든 권한
 user_col_privs_recd : 사용자가 권하을 받은자인 경우의 열에 대한 권한
                                       
                                       
 ----------------------------------------------------------------------------------------
 
 === Roles ===                         
 
 - 권한들의 묶음                       
 - System권한, Object 권한 모두 구성되어 질수 있다.
 - Enable/Disable 될 수 있다.          
 - Role은 Password를 가질 수 있다.     
                                       
* 생성                                
 create role clerk_role not inentified; (암호 필요 X)
 create role clerk_role indentified by xyz901; (암호 필요)
                                       
* rolls에게 권한부여                 
 grant create session, create table to clerk_role;
                                       
* 사용자에게 부여                     
 grant clerk_role to sctt, other_role; 
                                       
* role 활성화/비활성화                
 set role clerk_role identified by xyz901; (clerk_role만 활성화, 나머진 비활성화)
 set role all excpt acct_role; (acct_role 빼구 모든 role 활성화)
 set role none; (모두 비활성화)        
                                       
* 예제                                
 create user pay_clack identified by pay_clerk;
 create user manager identified by manager;
 create user president identified by president;
                                       
 grant create session to pay_clerk, manager, president; (접속 권한 주기)
 grant create role to scott;(roll 생성 권한 주기)
                                       
 conn scatt/tiger;                     
 create role pay_clerk_role not identified;
 create role manager_role not identified;
 create role president_role not identified;
                                       
 grant select on emp to pay_clerk_role, manager_role;
 grant update(sal, comm) on emp to pay_clerk_role;
 grant update(mgr, depno) on emp to manager_role;
 grant pay_clerk_role, manager to president_role;
 grant pay_clerk_role to pay_clerk;    
 grant manager_role to manager;        
 grant preident_role to presidet;      
                                       
* 딕셔너리
 role_sys_privs  : role에 부여된 시스템 권한에 대한 정보
 role_tab_privs  : role에 부여된 테이블 권한에 대한 정보
 role_role_privs : 다른 role에 부여된 role에 대한 정보
 session_roles   : 현재 사용자에게 활성화된 role에 대한 정보
 user_role_privs : 사용자에게 부여된 role에 대한 정보
 dba_sys_privs   : 사용자 및 role에 부여된 시스템 권하에 대한 정보
 dba_roles       : 데이터베이스에 존재하는 모든 role에 대한 정보

728x90

댓글