如果想详细的查看相关的系统权限可以运行下面的查询,从而筛选你要的视图:
sys@ORCL>select distinct table_name from dict where table_name like '%PRIVS%';
我主要概括的是session级别的权限问题:
sys@ORCL>create user zhangyu account unlock identified by tiger;
sys@ORCL>select privilege,grantee from dba_sys_privs where grantee in ('CONNECT','RESOURCE');
PRIVILEGE GRANTEE
---------------------------------------- ------------------------------
CREATE TRIGGER RESOURCE
CREATE SEQUENCE RESOURCE
CREATE TYPE RESOURCE
CREATE PROCEDURE RESOURCE
CREATE CLUSTER RESOURCE
CREATE SESSION CONNECT
CREATE OPERATOR RESOURCE
CREATE INDEXTYPE RESOURCE
CREATE TABLE RESOURCE
---------------------------------------- ------------------------------
CREATE TRIGGER RESOURCE
CREATE SEQUENCE RESOURCE
CREATE TYPE RESOURCE
CREATE PROCEDURE RESOURCE
CREATE CLUSTER RESOURCE
CREATE SESSION CONNECT
CREATE OPERATOR RESOURCE
CREATE INDEXTYPE RESOURCE
CREATE TABLE RESOURCE
已选择9行。
上面的查询能够让我们了解我们授于的角色中都有哪些系统权限:
grant connect,resource to zhangyu;
conn zhangyu/tiger;
zhangyu@ORCL>select * from session_roles;
ROLE
------------------------------
PLUSTRACE
CONNECT
RESOURCE
------------------------------
PLUSTRACE
CONNECT
RESOURCE
上面的plustrace角色,我们知道是用来进行autotrace的角色,这个角色被授给了public了,所以每建
一个用户oracle都会自动将plustrace角色授于用户。
zhangyu@ORCL>set role connect;
角色集
查看当前会话权限:
zhangyu@ORCL>select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
zhangyu@ORCL>set role resource;
角色集
zhangyu@ORCL>create table test(x int);
表已创建。
zhangyu@ORCL>select * from session_privs;
PRIVILEGE
----------------------------------------
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
----------------------------------------
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
另外如果我们set role后,而sys又revoke了相应角色中包含的权限会怎样呢:
zhangyu@ORCL>set role resource;
角色集
zhangyu@ORCL>select * from session_privs;
PRIVILEGE
----------------------------------------
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
----------------------------------------
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
已选择9行。
sys@ORCL>revoke create table from zhangyu;
revoke create table from zhangyu
*
第 1 行出现错误:
ORA-01952: 系统权限未授予 'ZHANGYU'
从上面我们可以看到,zhangyu这个用户虽然有create table权限,但是这个权限是包含在resource角中
的,所以oracle认为zhangyu没有create table权限。
授权成功。
zhangyu@ORCL>set role connect;
角色集
zhangyu@ORCL>select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
zhangyu@ORCL>create table test(x int);
表已创建。
以上我们总结出,如果角色中有了该权限,而sys又显式的授于了此权限,则我们在set role时将取交集
,而如果set role时没有包含这个单独授于的权限,则权限取并集。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23102627/viewspace-659454/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23102627/viewspace-659454/