美文网首页
Oracle由简入繁[用户]

Oracle由简入繁[用户]

作者: judeshawn | 来源:发表于2019-07-23 17:57 被阅读0次

    用户是使用者合法访问数据库内容的必需的方式,其包含了使用者对数据库各种操作的权限、各种资源使用的限制,同时,每个数据库对象必然隶属于某一个用户,任何数据库对象隶属于其被创建时连接的用户。

    创建用户


    create user u_sample identified by passwd;

    dba_users视图


    SQL> desc dba_users
    名称                          空值?      类型             
    --------------------------- -------- -------------- 
    USERNAME                    NOT NULL VARCHAR2(30)   
    USER_ID                     NOT NULL NUMBER         
    PASSWORD                             VARCHAR2(30)   
    ACCOUNT_STATUS              NOT NULL VARCHAR2(32)   
    LOCK_DATE                            DATE           
    EXPIRY_DATE                          DATE           
    DEFAULT_TABLESPACE          NOT NULL VARCHAR2(30)   
    TEMPORARY_TABLESPACE        NOT NULL VARCHAR2(30)   
    CREATED                     NOT NULL DATE           
    PROFILE                     NOT NULL VARCHAR2(30)   
    INITIAL_RSRC_CONSUMER_GROUP          VARCHAR2(30)   
    EXTERNAL_NAME                        VARCHAR2(4000) 
    

    用户密码


    --查看加密密码
    SQL> select username,password from dba_users 
      where username like 'U_SAMPLE';
    
    USERNAME                       PASSWORD                      
    ------------------------------ ------------------------------
    U_SAMPLE                       5CC163D09B897DCD
    
    --修改密码
    SQL> alter user u_sample identified by oracle;
    
    User U_SAMPLE已变更。
    
    USERNAME                       PASSWORD                      
    ------------------------------ ------------------------------
    U_SAMPLE                       7EB47D942C3BED5B              
    

    password字段存放明文密码被hash算法加密后的密文

    账户状态


    SQL> select username,account_status from dba_users 
    where username like 'U_SAMPLE';
    USERNAME                       ACCOUNT_STATUS                  
    ------------------------------ --------------------------------
    U_SAMPLE                       OPEN                            
    
    
    • OPEN表示账户为解锁状态;
    • EXPIRED表示账户为过期状态(需要设置口令才能解除此状态);
    • LOCKED表示账户为锁定状态。
    演示
    SQL> alter user u_sample account lock;
    
    User U_SAMPLE已变更。
    
    SQL> select username,account_status from dba_users 
    where username like 'U_SAMPLE';
    
    USERNAME                       ACCOUNT_STATUS                  
    ------------------------------ --------------------------------
    U_SAMPLE                       LOCKED                          
    
    SQL> alter user u_sample account unlock;
    
    User U_SAMPLE已变更。
    
    SQL> select username,account_status 
            from dba_users 
         where username like 'U_SAMPLE';
    USERNAME                       ACCOUNT_STATUS                  
    ------------------------------ --------------------------------
    U_SAMPLE                       OPEN                         
    
    SQL> alter user u_sample identifid by oracle; --重新设置密码,可解除expired状态,这里不便重现账户过期的场景
    
    User U_SAMPLE已变更。
    
    

    默认表空间


    用户的默认表空间

    SQL> select username,default_tablespace 
          from dba_users 
         where username like 'U_SAMPLE';
    
    USERNAME                       DEFAULT_TABLESPACE            
    ------------------------------ ------------------------------
    U_SAMPLE                       USERS     
    
    • 表空间是由一个或多个数据文件组成的用于存放各种数据库对象的命名集合
    • 用户的默认表空间是指用户创建表或索引等对象且语句中未指定表空间时,数据库会为对象默认分配的表空间

    数据库默认表空间

    SQL> select property_name,property_value 
          from database_properties 
         where property_name like 'DEFAULT_PERMANENT_TABLESPACE';
    
    PROPERTY_NAME                  PROPERTY_VALUE 
    ------------------------------ ----------------------------                
    DEFAULT_PERMANENT_TABLESPACE   USERS    
    
    • 数据库默认表空间是指新建用户且语句中未指定默认表空间时,数据库会为用户默认分配的默认表空间
    • 数据库默认表空间在数据库创建时已经被指定为USERS表空间,因此新建用户u_sample的默认表空间为USERS

    修改默认表空间(以新建的sample_tbs表空间为例)

    --创建表空间
    
    SQL> create tablespace sample_tbs datafile '/oracle/ITLTEST/sample_tbs01.dbf' size 50M; 
    
    Tablespace SAMPLE_TBS 已创建。
    
    SQL> select tablespace_name,sum(bytes/1024/1024) size_mb from dba_data_files 
    where tablespace_name like 'SAMPLE_TBS' 
    group by tablespace_name; 
    
    TABLESPACE_NAME                   SIZE_MB
    ------------------------------ ----------
    SAMPLE_TBS                             50
    
    --修改数据库默认表空间
    
    SQL> alter database default tablespace sample_tbs;  
    Database已变更。
    
    SQL> select property_name,property_value from database_properties 
    where property_name like 'DEFAULT_PERMANENT_TABLESPACE';
    
    PROPERTY_NAME                  PROPERTY_VALUE 
    ------------------------------ ----------------------------                
    DEFAULT_PERMANENT_TABLESPACE   SAMPLE_TBS    
    
    --修改用户默认表空间
    
    SQL> alter user u_sample default tablespace sample_tbs; 
    
    User U_SAMPLE已变更。
    
    SQL> select username,default_tablespace from dba_users where username like 'U_SAMPLE';
    
    USERNAME                       DEFAULT_TABLESPACE            
    ------------------------------ ------------------------------
    U_SAMPLE                       SAMPLE_TBS                    
    

    用户Profile


    限制用户对数据库和实例资源的使用相关的资源限制参数和密码参数的命名集合

    --查看用户分配的profile
    
    SQL> select username,profile from dba_users where username like 'U_SAMPLE';
    
    USERNAME                       PROFILE                       
    ------------------------------ ------------------------------
    U_SAMPLE                       DEFAULT                       
    
    --查看default profile内容
    
    SQL> select * from dba_profiles where profile like 'DEFAULT';
    
    PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                                   
    ------------------------------ -------------------------------- -------- ----------------------------------------
    DEFAULT                        COMPOSITE_LIMIT                  KERNEL   UNLIMITED                               
    DEFAULT                        SESSIONS_PER_USER                KERNEL   UNLIMITED                               
    DEFAULT                        CPU_PER_SESSION                  KERNEL   UNLIMITED                               
    DEFAULT                        CPU_PER_CALL                     KERNEL   UNLIMITED                               
    DEFAULT                        LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITED                               
    DEFAULT                        LOGICAL_READS_PER_CALL           KERNEL   UNLIMITED                               
    DEFAULT                        IDLE_TIME                        KERNEL   UNLIMITED                               
    DEFAULT                        CONNECT_TIME                     KERNEL   UNLIMITED                               
    DEFAULT                        PRIVATE_SGA                      KERNEL   UNLIMITED                               
    DEFAULT                        FAILED_LOGIN_ATTEMPTS            PASSWORD 10                                      
    DEFAULT                        PASSWORD_LIFE_TIME               PASSWORD UNLIMITED                               
    DEFAULT                        PASSWORD_REUSE_TIME              PASSWORD UNLIMITED                               
    DEFAULT                        PASSWORD_REUSE_MAX               PASSWORD UNLIMITED                               
    DEFAULT                        PASSWORD_VERIFY_FUNCTION         PASSWORD NULL                                    
    DEFAULT                        PASSWORD_LOCK_TIME               PASSWORD UNLIMITED                               
    DEFAULT                        PASSWORD_GRACE_TIME              PASSWORD UNLIMITED                               
    
    • 资源类
      • COMPOSITE_LIMIT:资源使用综合限制。考虑用四个参数来计算加权的composite_limit,分别
        为:cpu_per_session,logical_reads_per_sessions,connect_time,private_sga。可以使用alter resource cost来设置.。
      • SESSIONS_PER_USER:限制用户可以并发打开的最大会话数。
      • CPU_PER_SESSION:限制每个用户会话内使用CPU的最大时间,单位为0.01s。
      • CPU_PER_CALL:限制用户会话中每个调用使用CPU的最大时间,单位为0.01s。
      • LOGICAL_READS_PER_SESSION:限制每个用户会话的最大数据块逻辑读取次数。
      • LOGICAL_READS_PER_CALL:限制每个会话调用的最大数据块逻辑读取次数。
      • IDLE_TIME:限制用户会话处于空闲状态下能持续的最大分钟数。
      • CONNECT_TIME:限制用户会话能保持连接到数据库的最大分钟数
      • PRIVATE_SGA:限制用户请求私有SGA(仅适用于共享服务器模式)。
    • 密码类
      • FAILED_LOGIN_ATTEMPTS:指用户被锁之前可以尝试的最大登录数。
      • PASSWORD_LIFE_TIME:指定使用特定密码的时间限制,如果超出此时间间隔,那么密码将过期。
      • PASSWORD_REUSE_TIME:指定重新使用密码要经过多少天。
      • PASSWORD_REUSE_MAX:指定重新使用某个特定密码前,要经过多少次修改。
      • PASSWORD_VERIFY_FUNCTION:此参数允许指定Oracle提供的密码验证函数(主要是复杂度验证)来建立自动密码验证。
      • PASSWORD_LOCK_TIME:指用户被锁之前可以尝试的最大登录次数。
      • PASSWORD_GRACE_TIME:设置一个时间段,在此时间段内将发出一个密码过期警告。
    • 在名为default的profile中,所有资源相关的限制值均为unlimited,表示无限制,密码相关的限制中,除了FAILED_LOGIN_ATTEMPTS限制密码最大错误尝试为10次和PASSWORD_VERIFY_FUNCTION为null表示无密码复杂度验证以外,其他均无限制。
    • 用户会话是指用户访问数据库时建立的连接,必须建立连接才能向数据库请求运行SQL
    • 用户会话的调用是运行SQL语句的子处理过程。一条SQL的运行分为多个阶段,而每个阶段都由多个调用组成
    创建新的用户profile
    SQL>  create profile pf_sample limit PASSWORD_LOCK_TIME 1 PASSWORD_GRACE_TIME 7 IDLE_TIME 30;
    
    Profile PF_SAMPLE 已创建。
    
    SQL> select * from dba_profiles where profile like 'PF_SAMPLE';
    
    PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                                   
    ------------------------------ -------------------------------- -------- ----------------------------------------
    PF_SAMPLE                      COMPOSITE_LIMIT                  KERNEL   DEFAULT                                 
    PF_SAMPLE                      SESSIONS_PER_USER                KERNEL   DEFAULT                                 
    PF_SAMPLE                      CPU_PER_SESSION                  KERNEL   DEFAULT                                 
    PF_SAMPLE                      CPU_PER_CALL                     KERNEL   DEFAULT                                 
    PF_SAMPLE                      LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT                                 
    PF_SAMPLE                      LOGICAL_READS_PER_CALL           KERNEL   DEFAULT                                 
    PF_SAMPLE                      IDLE_TIME                        KERNEL   30                                      
    PF_SAMPLE                      CONNECT_TIME                     KERNEL   DEFAULT                                 
    PF_SAMPLE                      PRIVATE_SGA                      KERNEL   DEFAULT                                 
    PF_SAMPLE                      FAILED_LOGIN_ATTEMPTS            PASSWORD DEFAULT                                 
    PF_SAMPLE                      PASSWORD_LIFE_TIME               PASSWORD DEFAULT                                 
    PF_SAMPLE                      PASSWORD_REUSE_TIME              PASSWORD DEFAULT                                 
    PF_SAMPLE                      PASSWORD_REUSE_MAX               PASSWORD DEFAULT                                 
    PF_SAMPLE                      PASSWORD_VERIFY_FUNCTION         PASSWORD DEFAULT                                 
    PF_SAMPLE                      PASSWORD_LOCK_TIME               PASSWORD 1                                       
    PF_SAMPLE                      PASSWORD_GRACE_TIME              PASSWORD 7           
    

    新建的profile,除了语句中指定了的限制项以外,其他限制项的值均为DEFAULT,表示继承default 用户profile中的值。 因此可以看出,default profile主要有两个特点

    • 新建用户默认分配的profile为default
    • 新建profile未指定的限制项的值来自于default

    用户的权限、角色


    权限
    • 权限规定了用户可以对数据库执行哪些操作
    • 权限分为系统权限和对象权限,对象权限是指用户对于特定对象的操作权限,而系统权限是指某一类操作的权限
    • 权限可以被授予和废除,需要
    --给用户授予create table系统权限
    
    SQL> grant create table to u_sample;
    
    Grant 成功。
    
    --给用户授予访问dba_tables的权限
    
    SQL>  grant select on dba_tables to u_sample;
    
    Grant 成功。
    
    --查看用户被授予的系统权限
    
    SQL> select * from DBA_SYS_PRIVS where grantee like 'U_SAMPLE';
    
    GRANTEE                        PRIVILEGE                                ADMIN_OPTION
    ------------------------------ ---------------------------------------- ---------------
    U_SAMPLE                       CREATE TABLE                             NO 
    
    --查看用户被授予的对象权限
    
    SQL> select * from DBA_TAB_PRIVS where grantee like 'U_SAMPLE';
    
    GRANTEE              OWNER           TABLE_NAME           GRANTOR        PRIVILEGE             GRANTABLE  HIERARCHY
    -------------------- --------------- -------------------- -------------- --------------------- ---------- ----------
    U_SAMPLE             SYS             DBA_TABLES           SYS            SELECT                NO         NO 
    
    --废除权限
    
     SQL> revoke create table from u_sample;
    
    Revoke 成功。
    
    SQL> revoke select on dba_tables from u_sample;
    
    Revoke 成功。
    
    SQL> select * from DBA_TAB_PRIVS where grantee like 'U_SAMPLE';
    
    未选择任何行
    
    SQL>  select * from DBA_SYS_PRIVS where grantee like 'U_SAMPLE';
    
    未选择任何行
    
    
    • 具有某种权限的用户可以将该权限授予给其他用户,同时也可以废除该权限,但需要注意的是:
      • 用户在被授予系统权限时语句中必须带有with admin option,才可以将该系统权限授予给其他用户
      • 用户在被授予对象权限时语句中必须带有with grant option,才可以将该系统权限授予个其他用户
    角色

    角色是权限的命名集合,可以包含系统权限或对象权限,也可以不包含任何权限

    • 角色里权限的来源:像用户一样被授予或废除权限或其他角色
    • 角色的使用:像系统权限一样,可以授予给用户,且授予用户需要对该角色具有admin_optiion(参考系统权限的授予)
    • 角色的创建:创建角色的用户本身需要具有create role系统权限(sys用户是最高权限用户,无需考虑)
    • 系统预先建立的角色:有很多系统里已经预先建立好的角色,理论上可以像用户新定义的角色那样添加或废除权限,但存在很高的风险,因为有很多系统用户可能会使用这些角色,修改风险难以预估。
    --创建新角色
    
    SQL> create role rl_sample;
    
    Role RL_SAMPLE 已创建。
    
    --向新建角色里添加connect和resource角色
    
    SQL> grant connect,resource to rl_sample;
    
    Grant 成功。
    
    --向角色里添加权限
    
    SQL> grant select any table to rl_sample;
    
    Grant 成功。
    
    SQL>  grant select on dba_tables to rl_sample;
    
    Grant 成功。
    
    --查看角色中的系统权限
    
    SQL> select * from ROLE_SYS_PRIVS where role in ('CONNECT','RESOURCE','RL_SAMPLE') order by 1;
    
    ROLE                           PRIVILEGE                                ADMIN_OPTION
    ------------------------------ ---------------------------------------- --------------
    CONNECT                        CREATE SESSION                           NO 
    RESOURCE                       CREATE CLUSTER                           NO 
    RESOURCE                       CREATE INDEXTYPE                         NO 
    RESOURCE                       CREATE OPERATOR                          NO 
    RESOURCE                       CREATE PROCEDURE                         NO 
    RESOURCE                       CREATE SEQUENCE                          NO 
    RESOURCE                       CREATE TABLE                             NO 
    RESOURCE                       CREATE TRIGGER                           NO 
    RESOURCE                       CREATE TYPE                              NO 
    
    --查看角色中的对象权限
    
    SQL> select * from ROLE_TAB_PRIVS where role in ('CONNECT','RESOURCE','RL_SAMPLE');
    
    ROLE            OWNER           TABLE_NAME           COLUMN_NAME          PRIVILEGE                 GRANTABLE
    --------------- --------------- -------------------- -------------------- ------------------------- ---
    RL_SAMPLE       SYS             DBA_TABLES                                SELECT                    NO 
    
    
    --查看角色中的角色
    
    SQL> select * from ROLE_ROLE_PRIVS where role in  ('CONNECT','RESOURCE','RL_SAMPLE');
    
    ROLE                           GRANTED_ROLE                   ADMIN_OPTION
    ------------------------------ ------------------------------ -------------
    RL_SAMPLE                      CONNECT                        NO 
    RL_SAMPLE                      RESOURCE                       NO 
    
    --将新建角色授予用户
    
    SQL>  grant rl_sample to u_sample;
    
    Grant 成功。
    
    --查看用户被授予的角色
    
    SQL>  select * from dba_role_privs where grantee like 'U_SAMPLE';
    
    GRANTEE                        GRANTED_ROLE                   ADM DEF
    ------------------------------ ------------------------------ --- ---
    U_SAMPLE                       RL_SAMPLE                      NO  YES
    
    --权限验证
    
    SQL> conn u_sample/oracle
    
    Connected.
    
    SQL> select count(*) from dba_tables;
    
    COUNT(*)
    ----------
    10160
    
    SQL> conn / as sysdba
    
    connected.
    
    SQL> revoke select on dba_tables from rl_sample;
    
    Revoke 成功.
    
    SQL> conn u_sample/oracle
    
    Connected.
    
    SQL> select count(*) from dba_tables;
    select count(*) from dba_tables
                         *
    ERROR at line 1:
    ORA-00942: table or view does not exist
    
    SQL> conn / as sysdba
    
    Connected.
    
    SQL> revoke connect from rl_sample;
    
    Revoke 成功.
    
    sys@ITLTEST>conn u_sample/oracle
    ERROR:
    ORA-01045: user U_SAMPLE lacks CREATE SESSION privilege; logon denied
    
    
    Warning: You are no longer connected to ORACLE.
    
    

    相关文章

      网友评论

          本文标题:Oracle由简入繁[用户]

          本文链接:https://www.haomeiwen.com/subject/gclslctx.html