zoukankan      html  css  js  c++  java
  • 用户管理及授权管理

    一:创建用户语法

    目的

    使用CREATE USER语句来创建和配置数据库。用户,它是一个帐户,您可以通过该帐户登录数据库,并建立Oracle数据库允许用户访问的方法。

    可以在Oracle自动存储管理(Oracle ASM)群集中发出此语句,以便将用户和密码组合添加到当前节点的Oracle ASM实例的本地密码文件中。每个节点的Oracle ASM实例都可以使用此语句更新自己的密码文件。密码文件本身必须是由ORAPWD效用。

    您可以使用户通过代理应用程序或应用程序服务器连接到数据库。 

    先决条件

    你一定有CREATE USER系统特权创建一个具有CREATE USER语句时,用户的权限域为空。要登录到Oracle数据库,用户必须具有CREATE SESSION系统特权因此,在创建用户之后,您应该至少将CREATE SESSION系统特权参考格兰特想了解更多信息。

    只有经过身份验证的用户AS SYSASM可以发出此命令修改Oracle ASM实例密码文件。

    句法

    CREATE USER user
       IDENTIFIED { BY password
                  | EXTERNALLY [ AS 'certificate_DN'  |  AS 'kerberos_principal_name' ]
                  | GLOBALLY [ AS '[ directory_DN ]' ]
                  }
       [ DEFAULT TABLESPACE tablespace
       | TEMPORARY TABLESPACE
            { tablespace | tablespace_group_name }
       | { QUOTA { size_clause | UNLIMITED } ON tablespace }...
       | PROFILE profile
       | PASSWORD EXPIRE
       | ACCOUNT { LOCK | UNLOCK }
         [ DEFAULT TABLESPACE tablespace
         | TEMPORARY TABLESPACE
              { tablespace | tablespace_group_name }
         | { QUOTA { size_clause | UNLIMITED } ON tablespace }...
         | PROFILE profile
         | PASSWORD EXPIRE
         | ACCOUNT { LOCK | UNLOCK }
         | ENABLE EDITIONS
         ]...
      ] ;

    IDENTIFIED:子句允许您指示Oracle数据库如何对用户进行身份验证。

    BY password:子句允许您创建本地用户并指示用户必须指定password登录到数据库。密码区分大小写。任何后续CONNECT中使用的相同情况(上、下或混合),用于将此用户连接到数据库的字符串必须指定密码。CREATE USER声明或后续ALTER USER声明。密码可以包含数据库字符集中的任何单字节、多字节或特殊字符,或这些字符的任何组合。

    EXTERNALLY:若要创建一个外部用户。这样的用户必须通过外部服务(如操作系统或第三方服务)进行身份验证。在这种情况下,Oracle数据库依赖于操作系统或第三方服务的身份验证,以确保特定的外部用户能够访问特定的数据库用户。

    certificate_DN:此子句仅适用于通过SSL身份验证的外部用户。大证书DN用户钱包中的PKI证书中的可分辨名称。最大长度证书DN是1024个字符

    Kerberos_main_name :此子句仅用于Kerberos认证的外部用户。最大长度Kerberos_main_name是1024个字符。

    警告:Oracle强烈建议您不要使用IDENTIFIED EXTERNALLY具有固有的弱登录安全性的操作系统。

    对创建外部用户的限制以下限制适用于创建外部用户:用户SYS不能是外部用户。Oracle ASM不支持创建外部用户。

    GLOBALLY 子句允许您创建全局用户。这样的用户必须得到企业目录服务(Oracle Internet Directory)的授权。

    directory_DN字符串可以采取两种形式之一:

    • 标识此用户的企业目录服务中的X.509名称。它应该是形式的CN=username,other_attributes,在哪里other_attributes是目录中用户的其他可分辨名称(DN)。此表单创建私有全局模式.;

    • 一个空字符串(‘),指示企业目录服务将通过身份验证的全局用户映射到此数据库模式,并具有适当的角色。此表单与指定GLOBALLY关键字并创建共享全局模式.

    最大长度directory_DN是1024个字符。您可以控制应用程序服务器以指定用户的身份连接并使用ALTER USER声明

     

     对创建全局用户的限制:Oracle ASM不支持创建全局用户。

     DEFAULT TABLESPACE:为在用户架构中创建的对象指定默认表空间。如果省略此子句,则用户的对象将存储在数据库默认表空间中。如果没有为数据库指定默认表空间,则用户的对象将存储在SYSTEM表空间。

     对默认表空间的限制:不能指定本地管理的临时表空间(包括撤消表空间)或字典管理的临时表空间作为用户的默认表空间。

     TEMPORARY TABLESPACE :为用户的临时段指定表空间或表空间组。如果省略此子句,则用户的临时段存储在数据库默认临时表空间中,如果没有指定,则存储在SYSTEM表空间。

    • 指定tablespace指示用户的临时表空间。

    • 指定tablespace_group_name指定的表空间组中的任何表空间中,用户可以保存临时段。tablespace_group_name.

    对临时表空间的限制该条款受以下限制:

    • 表空间必须是临时表空间,并且必须具有标准块大小。

    • 表空间不能是撤消表空间或具有自动段空间管理的表空间。

     QUOTA :配额条款

    使用QUOTA子句指定用户可以在表空间中分配的最大空间。

    CREATE USER语句可以有多个QUOTA用于多个表空间的子句。

    UNLIMITED允许用户不受绑定地在表空间中分配空间。

    您可以指定的最大空间为2TB(TB)。如果需要更多的空间,请指定UNLIMITED.

    配额限制:不能为临时表空间指定此子句。

    PROFILE:指定要分配给用户的配置文件。配置文件限制了用户可以使用的数据库资源的数量。如果省略此子句,则Oracle数据库将指定DEFAULT配置文件给用户。

    注:Oracle建议您使用数据库资源管理器而不是SQL配置文件来建立数据库资源限制。数据库资源管理器提供了一种更灵活的管理和跟踪资源使用的方法。有关数据库资源管理器的详细信息,请参阅Oracle数据库管理员指南。

     PASSWORD EXPIRE :指定PASSWORD EXPIRE如果您希望用户的密码过期。此设置强制用户或DBA在用户登录到数据库之前更改密码。

     ACCOUNT:指定ACCOUNT LOCK若要锁定用户帐户并禁用访问权限,请执行以下操作。指定ACCOUNT UNLOCK若要解除用户帐户的锁定并启用对帐户的访问,请执行以下操作。

    ENABLE :启用版本;这个条款是不可逆的。指定ENABLE EDITIONS允许用户使用版本在此架构中创建多个版本的可编辑对象。不能编辑架构中未启用版本的可编辑对象。

    二:用户管理实验操作

    1:创建一个数据库验证用户,同时为它指定口令、默认表空间、临时表空间、空间配额,并要求他登录后更改口令。

    --0)查表空间
    select tablespace_name from dba_tablespaces;
    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)创建用户
    SQL> CREATE USER w01 IDENTIFIED BY w01 DEFAULT TABLESPACE users TEMPORARY TABLESPACE tempts QUOTA 10M ON users PASSWORD EXPIRE;
    用户已创建
    --3)为用户授基本权限
    SQL> GRANT CONNECT,RESOURCE TO w01;
    授权成功。
    --4)使用新用户登录数据库
    SQL> CONN w01/w01
    ERROR:
    ORA-28001: the password has expired
    更改u01 的口令
    新口令:
    重新键入新口令:
    口令已更改
    已连接。

    2、创建数据库验证用户,同时为它指定口令、缺省表空间、临时表空间、 空间配额,并设置该用户为锁定状态。

    ---0)查表空间
    select tablespace_name from dba_tablespaces;
    --创建表空间
    Create tablespace indx datafile '/u01/app/oracle/oradata/orcl/indx.dbf' size 2M;
    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)创建用户
    SQL>CREATE USER w02 IDENTIFIED BY w02 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON indx QUOTA 1m ON users ACCOUNT LOCK;
    用户已创建
    --3)为用户授基本权限
    SQL> grant connect,resource to w02;
    授权成功。
    --4)使用新用户登录数据库
    SQL> CONN w02/w02
    ERROR:
    ORA-28000: the account is locked
    警告: 您不再连接到ORACLE。
    --5)以管理员身份重新登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --6)为账户解锁
    SQL> ALTER USER w02 ACCOUNT UNLOCK;
    用户已更改。
    --7)使用新账户登录数据库
    SQL> CONN w02/w02
    已连接。

    3、创建一个操作系统验证的用户ops$w03。(外部用户

    --1.使用root创建用户
    [root@oracle ~]# useradd -G oinstall w03
    [root@oracle ~]# passwd w03
    --2.修改环境变量
    [root@oracle ~]# su – w03
    [w03@ocp ~]$ whoami
    [w03@ocp ~]$ vim .bash_profile
    export ORACLE_SID=orcl
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
    export PATH=$ORACLE_HOME/bin:$PATH
    [w03@ocp ~]$source .bash_profile
    --3.在ORACLE中创建
    SQL> conn / as sysdba
    SQL>create user ops$w03 identified externally;
    ----4.为用户授权连接
    SQL>grant connect to ops$w03;
    --5.尝试连接
    [w03@ocp ~]$ sqlplus /
    SQL> show user
    USER is "OPS$W03"

    4、用户w02修改自己的口令

    --1)以用户u2 登录
    SQL>connect w02/w02
    已连接。
    --2)修改用户口令
    ALTER USER w02 IDENTIFIED BY w002;
    用户已更改。

    5、把用户w02 在USERS 表空间上的配额改为0

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)修改配额
    SQL>ALTER USER w02
    QUOTA 0 ON USERS;
    用户已更改。
    CREATE USER w011 IDENTIFIED BY w011 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    SELECT tablespace_name,blocks*100/max_blocks || '%' "ok" FROM dba_ts_quotas WHERE username='W011' AND max_blocks<>-1;
    TABLESPACE_NAME ok
    ------------------------------ -----------------------------------------
    USERS 0%
    SQL> alter user w011 quota 1k on users;
    SQL> grant connect to w011;
    Grant succeeded.
    SQL> grant create table to w011;
    Grant succeeded.
    SQL> conn w011/w011
    SQL> create table ss(sdf int);
    insert into ss values(1);
    create table ss(sdf int)
    *
    ERROR at line 1:
    ORA-01536: space quota exceeded for tablespace 'USERS'

    6、对用户进行修改,要求用户w02 登录后更改口令

    SQL> CONN / AS SYSDBA
    SQL> ALTER USER w02 PASSWORD EXPIRE;

    7、锁定用户账号

    SQL>CONNECT / AS SYSDBA
    ALTER USER w02 ACCOUNT LOCK;

    8、解锁用户账号

    SQL>CONNECT / AS SYSDBA
    ALTER USER w02 ACCOUNT UNLOCK;

    9、删除用户

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)删除用户
    SQL>DROP USER w01 CASCADE;
    --当前正连接的用户是不能删除的,如果确定要删除该用户, 那么首先终止用户会话,然后删除该用户
    Select sid,serial# from v$session where username=’u1’;
    Alter system kill session ‘8,25’;
    DROP USER u1 CASCADE;

    10、查询所有用户的默认表空间

    ---1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)查询信息
    SQL> SELECT username, default_tablespace FROM dba_users;
    USERNAME DEFAULT_TABLESPACE
    ------------------------------ ------------------------------
    SYS SYSTEM
    SYSTEM SYSTEM
    SCOTT SYSTEM
    U02 USERS
    HR EXAMPLE
    RMAN TOOLS
    ……
    已选择35 行。

    11、显示用户w02的默认表空间和临时表空间信息

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)查询信息
    SQL> SELECT default_tablespace,temporary_tablespace
    FROM dba_users WHERE username='W02';
    DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
    ------------------------------ ------------------------------
    USERS TEMP

    12、查看用户scott 的表空间配额

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)查询信息
    SQL>SELECT tablespace_name,blocks*100/max_blocks || '%' FROM dba_ts_quotas WHERE username='SCOTT' AND max_blocks<>-1;
    TABLESPACE_NAME 已用空间百分比
    ----------------------------- -------------------
    USERS 6.25%


    三:系统权限和对象权限

    1、授予用户aaron1 具有创建表和视图的权限。

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    -2)创建用户
    SQL> CREATE USER aaron1 IDENTIFIED BY aaron1 DEFAULT TABLESPACE users
    TEMPORARY TABLESPACE temp;
    用户已创建
    --3)授予权限
    SOL>GRANT create session,CREATE TABLE,CREATE VIEW to aaron1;
    GRANT UNLIMITED TABLESPACE TO aaron1 ;
    授权成功。
    --4)使用权限创建表
    SOL>connect aaron1/aaron1
    已连接。
    SOL>create table t1(cola int, colb char(3));
    表已创建。
    SOL>insert into t1 values(1,'a');
    已创建1 行。
    SOL>COMMIT;
    提交完成。
    create view a as select * from t1;

    2、授予用户W01D连接数据库和创建表的权限

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)创建用户
    SQL> CREATE USER w01d IDENTIFIED BY w01d DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    --3)授予权限
    SOL>GRANT create session,CREATE TABLE to w01d;
    --4)使用权限创建表
    SOL>connect w01d/w01d
    已连接。
    SOL>create table t1(cola int, colb char(3));
    表已创建。
    

    3、其它用户授予SYSDBA权限

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)创建用户
    SQL> CREATE USER dd IDENTIFIED BY dd DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    --3)授予权限
    SOL>GRANT SYSDBA to dd;
    授权成功。
    SOL>CONN dd/dd AS SYSDBA;
    已连接。
    Show user
    SOL>SHUTDOWN immediate
    

    4、回收用户aaron1 的创建表的权限。

    --1)以管理员身份登录
    SOL>CONNECT / AS SYSDBA
    已连接。
    --2)回收权限
    SOL>REVOKE CREATE TABLE FROM aaron1;
    撤销成功。

    5、授予用户bb1有创建存储过程的权限,要求带WITH ADMIN OPTION参数。

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)创建用户
    SQL> CREATE USER bb1 IDENTIFIED BY bb1 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    SQL> CREATE USER bb2 IDENTIFIED BY bb2 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    --3)管理员授予系统权限,并允许传递
    SOL>GRANT create session,CREATE PROCEDURE to bb1 WITH ADMIN OPTION;
    授权成功。
    --4)以aa1用户登录,授予用户aa2创建存储过程的权限
    SOL>CONNECT bb1/bb1
    已连接。
    SOL>GRANT create session,CREATE PROCEDURE to bb2;
    授权成功。
    --5)创建存储过程
    SOL>connect bb2/bb2
    已连接。
    SOL> CREATE OR REPLACE PROCEDURE pp
    AS
    BEGIN
    DBMS_OUTPUT.PUT_LINE('ok ');
    END;
    /
    过程已创建

    6、回收用户aa1的创建存储过程的权限。

    --1)以管理员身份登录
    SOL>CONNECT / AS SYSDBA
    已连接。
    --2)回收权限
    SOL>REVOKE CREATE PROCEDURE FROM bb1;
    撤销成功。
    --3)创建存储过程
    SOL>connect bb2/bb2
    已连接。
    SOL> CREATE OR REPLACE PROCEDURE pp1
    AS
    BEGIN
    DBMS_OUTPUT.PUT_LINE('ok');
    END;
    /
    过程已创建
    --当DBA 收回了bb1的CREATE PROCEDURE 系统权限后,用户bb2仍然具有CREATE PROCEDURE 系统权限。因为系统权限不会被级联收回.

    四:对象权限管理

    1、ss用户把wq表的查询权限授予cc用户

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)创建用户
    SQL> CREATE USER ss IDENTIFIED BY ss DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    SQL> CREATE USER cc IDENTIFIED BY cc DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    --3)管理员授予系统权限,并允许传递
    SOL>GRANT create session,CREATE table to ss;
    Grant create session to cc;
    --4)以ss用户登录,创建表插入记录
    SOL>CONNECT ss/ss
    Create table wq (ee int);
    Insert into wq values(12);
    --5)ss授予wq对象权限
    SOL>GRANT SELECT ON wq to cc;
    授权成功。
    --6)cc查询wq表
    SOL>connect cc/cc
    已连接。
    SOL>SELECT * FROM ss.wq;

    2、ss用户把wq表的ee列的插入和更新权限授予cc用户。

    --1)以ss用户登录
    SOL>CONNECT ss/ss
    已连接。
    --2)ss用户授予cc列权限
    SOL>GRANT INSERT(ee),UPDATE(ee) ON wq to cc;
    授权成功。
    --3)cc插入数据到ss的wq表
    SOL>connect cc/cc
    已连接。
    SOL>INSERT INTO ss.wq(ee) VALUES(343);
    已创建1 行。

    3、为了使得用户cc可以在ss的wq表建立索引,就必须授予INDEX 对象权限。

    --1)以SYSTEM 用户登录
    SOL>CONNECT ss/ss
    已连接。
    --2)授权
    SOL>GRANT INDEX ON wq to cc;
    授权成功。
    --3)创建索引
    SQL>connect cc/cc
    已连接。
    SQL>CREATE INDEX idx1 ON ss.wq(ee);
    索引已创建。
    --4)查询索引
    SQL> select index_name from user_indexes;

    4、cc用户要基于表ss.wq建立从表,则必须要被授予REFERENCES 对象权限。


    --1)以SYSTEM 用户登录
    SQL>connect ss/ss
    已连接。
    --2)建约束
    SQL> alter table wq add constraint pk_wq primary key (ee);
    SQL> select constraint_name from user_constraints;
    删除约束
    alter table tempi drop constraint SYS_C002845;
    --2)授权
    SQL>GRANT REFERENCES ON wq TO cc;
    授权成功。
    --3)创建外键
    conn / as sysdba
    SYS@orcl> grant create table to cc;
    SQL>connect cc/cc
    已连接。
    SQL> CREATE TABLE tempi(cola int constraint fk_wq_tempi REFERENCES ss.wq(ee));
    表已创建。
    SQL> select constraint_name from user_constraints;
    

    5、回收用户cc的wq表的查询权限

    --1)以ss用户登录
    SOL>CONNECT ss/ss
    已连接。
    --2)回收权限
    SOL>REVOKE SELECT ON wq FROM cc;
    撤销成功。
    --3)回收权限后,查询出错
    SQL>connect cc/cc
    已连接。
    SQL>SELECT * FROM ss.wq;

    6、回收用户cc在ss.wq表上创建索引的权限

    --1)以SYSTEM 用户登录
    SOL>CONNECT ss/ss
    已连接。
    --2)授权
    SOL>revoke INDEX ON wq from cc;
    授权成功。
    --3)创建索引
    SQL>connect cc/cc
    已连接。
    SQL>CREATE INDEX idx11 ON ss.wq(ee);

    7、使用WITH GRANT OPTION 参数,进行传递授权。

    --1)以管理员身份登录
    SQL>CONNECT / AS SYSDBA
    已连接。
    --2)创建用户
    SQL> CREATE USER x1 IDENTIFIED BY x1_x1 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    SQL> CREATE USER x2 IDENTIFIED BY x2_x2 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; SQL> CREATE USER x3 IDENTIFIED BY x3_x3 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    --3)管理员授予系统权限,并允许传递
    SOL>GRANT create session,CREATE table to x1;
    SOL>Grant create session to x2;
    SOL>Grant create session to x3;
    --4)以x1用户登录
    SOL>CONNECT x1/x1_x1
    已连接。
    --5)建立表
    SOL>create table ww(w1 int);
    Insert into ww values(123);
    --6)授予x2对象权限
    SOL>GRANT select ON ww to x2 WITH GRANT OPTION;
    --7)以x2用户登录
    SOL>CONNECT x2/x2_x2
    已连接。
    --8)授予x3对象权限
    SOL>GRANT select ON x1.ww to x3;
    授权成功。
    --9)以x3用户登录
    SOL>CONNECT x3/x3_x3
    Select * from x1.ww;

    8、验证对象权限的级联回收。

    --1)以x1用户登录
    SOL>CONNECT x1/x1_x1
    --2)回收权限
    SOL>REVOKE select ON ww FROM x2;
    --3)以x2用户登录
    SOL>CONNECT x2/x2_x2
    Select * from x1.ww;
    --4)以x3用户登录
    SOL>CONNECT x3/x3_x3
    Select * from x1.ww;

    9、当把ORACLE resource 角色授予一个user 的时候,不但会授予ORACLE resource 角色,本身的权限,而且还有unlimited tablespace 权限。

    conn / as sysdba
    SQL> create user desk identified by desk;
    SQL> grant create session to desk;
    SQL> conn desk
    SQL> select PRIVILEGE from user_sys_privs;
    SQL> conn / as sysdba
    DESK@orcl> conn / as sysdba
    SYS@orcl> SELECT PRIVILEGE FROM ROLE_SYS_PRIVS WHERE ROLE='RESOURCE';
    SQL> grant resource to desk;
    SQL> conn desk
    SQL> select PRIVILEGE from user_sys_privs;
    SELECT username, granted_role FROM user_role_privs WHERE username='DESK';
    SQL> show user
    USER is "SYS"
    SQL> create role testrole identified using testrole;
    SQL> revoke resource from desk;
    SQL> grant resource to testrole;
    SQL> grant testrole to desk;
    SQL> conn desk
    SQL> select privilege from user_sys_privs;

    10、创建不需要验证的角色oe_clerk。

    --1)以管理员身份登录
    SOL>CONNECT / AS SYSDBA
    已连接。
    --2)创建角色
    SOL>CREATE ROLE oe_clerk not identified;
    
    11、创建数据库验证的角色hr_clerk。
    
    --1)以管理员身份登录
    SOL>CONNECT / AS SYSDBA
    已连接。
    --2)创建角色
    SOL>CREATE ROLE hr_clerk IDENTIFIED BY bonus;
    角色已创建
    验证角色生效
    

    五:角色管理及角色赋权限

    create user wl identified by wl DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    grant create session to wl;
    create role ro_wl identified by ro_wl;
    grant ro_wl to wl;
    create role ro1_wl identified by ro1_wl;
    grant ro1_wl to wl;
    SQL> conn wl/wl
    select PRIVILEGE from user_sys_privs;
    create table ww(w1 int);
    create view aa as select * from ww;
    SQL> conn / as sysdba
    grant create table to ro_wl;
    Grant create view to ro1_wl;
    SQL> conn wl/wl
    SELECT username, granted_role FROM user_role_privs WHERE username='WL';
    SQL> create table ww(w1 int);
    不可以建视图
    SQL> create view aa as select * from ww;
    不可以建视图
    SQL> SET ROLE ro_wl IDENTIFIED BY ro_wl;
    SQL> create table ww1(w1 int);
    可以建表
    create view a1a as select * from ww1;
    不能建视图
    SQL> SET ROLE ro1_wl IDENTIFIED BY ro1_wl;
    create view a1a as select * from ww1;
    可以建视图
    SQL> create table ww2(w1 int);
    不可以建表
    --显示当前会话生效的角色
    SOL>SELECT * FROM session_roles;
    SOL>SET ROLE NONE;
    create view a2a as select * from ww1;
    不可以建视图
    create table ww3(w1 int);
    不可以建表

    2、回收角色

    SOL>CONNECT / AS SYSDBA
    SOL>REVOKE ro_wl FROM wl;

    3、删除角色

    SOL>CONNECT / AS SYSDBA
    SOL>DROP ROLE ro_wl;

    4、给角色授系统权限

    --1)以管理员身份登录
    SOL>CONNECT / AS SYSDBA
    已连接。
    -2)角色授权
    SOL>GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW TO oe_clerk WITH ADMIN OPTION;
    授权成功。
    
    

    5、给角色a3授予wl.aa 的DELETE 权限

    SQL> CONNECT / AS SYSDBA
    SQL> CREATE USER wl IDENTIFIED BY wl_3 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    CREATE USER wll IDENTIFIED BY wll_3 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
    CREATE ROLE a3;
    GRANT CREATE SESSION TO a3;
    CREATE ROLE a4;
    GRANT CREATE SESSION,create table TO a4;
    Grant a4 to wl;
    SQL> conn wl/wl_3
    SQL> create table aa(ad int);
    SQL> insert into aa values(34);
    Conn / as sysdba
    Grant delete on wl.aa to a3;
    Grant a3 to wll;
    Conn wll/wll_3
    SQL> delete from wl.aa;
    1 row deleted.
    

    6、查询数据库中所有的角色。

    SOL>SELECT role, password_required FROM dba_roles;

    7、显示角色所具有的系统权限

    SOL>SELECT * FROM ROLE_SYS_PRIVS WHERE role=' RO1_WL';

    8、角色所具有的对象权限

    SOL>SELECT owner, table_name, privilege, grantable FROM ROLE_TAB_PRIVS WHERE role= ' RO1_WL';

    9、显示用户的默认角色

    SQL> SELECT granted_role FROM dba_role_privs WHERE grantee='WL' AND default_role='YES';

    10、显示当前用户所具有的所有角色

    SQL> SELECT username, granted_role FROM user_role_privs WHERE username='WL';

    11、显示当前会话生效的角色

    SOL>SELECT * FROM session_roles;

    此子句仅适用于通过SSL身份验证的外部用户。大证书DN用户钱包中的PKI证书中的可分辨名称。最大长度证书DN是1024个字符

  • 相关阅读:
    Azure School女神相邀,把每分钟都过的更充实
    Java、Node.js、PHP还是.Net? 无论你选谁,我都能教你一招!
    一样的Java,不一样的HDInsight大数据开发体验
    第五代微软小冰 | 你有一个来自人工智能的电话待接听
    2017“编程之美”终章:AI之战勇者为王
    大数据freestyle: 共享单车轨迹数据助力城市合理规划自行车道
    语音识别技术里程碑:错误率降至5.1%,超过专业速记员
    wait和waitpid
    Linux网络编程wait()和waitpid()的讲解
    如何测试Linux 中的wait函数能不能等待子进程的子进程?
  • 原文地址:https://www.cnblogs.com/ios9/p/9222417.html
Copyright © 2011-2022 走看看