您的位置:首页 > 数据库 > Oracle

oracle 10g 管理权限和角色,以及有关方面的数据字典的使用方法总结

2011-11-14 14:11 851 查看
(提示:若要转载,请标明出处,谢谢)

管理权限和角色笔记目录:

一权限:系统权限和对象权限

系统权限

对象权限

二.角色

1角色的目的:简化权限的管理,是权限管理的方式

2角色分类:系统预定义角色 和 自定义角色

(一)系统预定义角色

(二)自定义角色

3.删除角色

三.在数据字典中查询某个角色或用户所对应的权限

1用户为中心

2角色为中心

3oracle中系统权限的总数

4 oracle中对象权限的总数

重要:结论1,结论2,结论3



一权限:系统权限和对象权限

系统权限
1 什么是系统权限??

用户针对数据库的一些权限,比如:建立数据库,建立表等对象,登录数据库等等。

2如何查询oracle中的所有的系统权限??

select * from system_privilege_map;

3常见角色中所包含的系统权限:

(1)CONNECT角色

CREATE SESSION权限,没有对象权限

(2)RESOUCE角色,没有对象权限

create table, create trigger, create procedure, create sequence,

create clustor, create type, create indextype, create operator

4.授予系统权限

(1)with admin option

一般情况下,系统权限的授予是由DBA完成的。

如果用其他用户A而并非DBA来授予系统权限,则要求该用户A必须具有“with admin option”。



查询某个用户所具有的系统权限(假设用户为vendition)

方法一:直接查询用户本身数据字典user_sys_privs

查询数据字典user_sys_privs。例如

select username, privileges, admin_option from user_sys_privs

在结果中,“ADM”是“admin_option的缩写”“系统权限传递参数”,NO表示该权限不允许被传递,YES表示可以

方法二:间接通过一定条件在oracleDBMS中查询

select * from dba_sys_privs where grantee=’VENDITION’;

5.回收系统权限



对象权限

对象权限

对象权限:某个特定用户对其他用户的的数据对象的的操作权限。

一个用户A去访问另一个用户B所对应的方案中的对象的权限,就叫做“对象权限”

查询对象权限:

方法一: select * from user_tab_privs;

注意另一种方法dba_tab_privs+where grantee=’用户名’;

方案:方案的名字和用户的名字是一样的,而且方案和系统权限以及对象权限是一点都不搭边的。方案中包含各种各样的数据对象。





注意:对象权限是谁赋予的,回收时就要这个用户来回收,并不是所有的兑现权限都能通过DBA来回收。

二.角色

1


1.1) 角色的概念:一系列系统权限的集合。Oracle认为,当一个数据库管理员建立一个数据库后,往往需要一些基本的权限,于是从系统权限中挑出一部分权限,将其交给“角色”,所以角色就像权限的批量授权。

1.2)角色的目的:简化权限的管理,是权限管理的方式

在oracle种,所有的角色都可以通过“select * from dba_roles”(oracle中一般包含25中角色)

注意:

视图dba_roles,保存了oracleDBMS中所有现存的角色,包含已经被其他用户使用的和未被其他用户使用的所有角色

视图dba_role_privs,仅仅保存了已经被其他用户使用的角色,不包含没有被用户使用的角色。

这也就是为什么“dba_roles”可以被用来查询oracle DBMS中包含的所有角色,而“dba_role_privs”不可以这样用

2角色分类:系统预定义角色 和 自定义角色

(一) 系统预定义角色

(1)CONNECT角色

CREATE SESSION权限,没有对象权限

(2)RESOUCE角色,没有对象权限

create table, create trigger, create procedure, create sequence,

create clustor, create type, create indextype, create operator

(3)DBA角色

Dba角色具有所有的系统权限,以及“with admin oprion”选项。

默认的DBA用户为:sys和system,他们可以将任何系统权限授予其他用户。

但要注意的是:DBA角色不具备“sysdba”和“sysoper”的特权(启动和关闭数据库)

(二) 自定义角色

根据自己的需要来定义一个角色。

一般是DBA来创建。如果是别的用户来创建,则需要有“create role”的权限。

在创建自定义角色时,可以制定验证方式(不验证,数据库验证等)

验证方式的作用:为了防止将来要修改角色时,要不要输入一个密码

方式一:如果角色是公用的角色,可以采用不验证的方式建立角色

例题:建立一个名为“myrole1”的角色,并且这个角色拥有“连接数据库,对scott用户下的emp表能够查看,更新,删除,增加的权限。”

第一步:建立角色名“空壳”

create role 角色名 not identified;(注意:此时创建的角色没有任何权限,只是一个空壳)

create role myrole1 not identified;

第二步:给“空壳”角色授权。

(注意:

1这些权限的授予一定要有系统管理员(DBA用户)来完成

2一般情况下,对于对象权限,要查看哪个用户方案下的对象,就由这个用户来授权



sql>conn system/zjrodger

sql>grant create session to myrole1 with admin option;

sql>conn scott/oracle

sql>grant select on emp to myrole1;

sql>grant update on emp to myrole1;

sql>grant insert on emp to myrole1;

sql>grant delete on emp to myrole1;

这后再将这个myrole1的角色赋给一个用户,这个用户就具有了这个角色中的所用权限了

3.删除角色

删除自定义的角色后,即使某个用户拥有该角色,也无法使用该角色中的权限了。

4





5.有待细研究



三.在数据字典中查询某个角色或用户所对应的权限



1用户为中心

(1)查询一个用户所具有的系统权限

方法一直接:select privilege from user_sys_privs;

方法二间接:dba_sys_privs+where grantee=’用户名’;

(2)查询一个用户所具有的对象权限

方法一直接:select * from user_tab_privs;

方法二间接:dba_tab_privs+where grantee=’用户名’;

(3) 查看一个给定用户具有哪些角色(假设查询vendition用户拥有那些角色)

方法一直接:前提是先要登录到指定用户下

select granted_role from user_role_privs;

方法二间接:DBA权限

select granted_role from dba_role_privs where grantee='VENDITION';

2角色为中心

(1)查看一个给定用户具有哪些角色(假设查询vendition用户拥有那些角色)

方法一直接:前提是先要登录到指定用户下

select granted_role from user_role_privs;

方法二间接:DBA权限

select granted_role from dba_role_privs where grantee='VENDITION';

(2)查看某个角色(比如:RESOURCE角色)中分别拥有哪些权限——系统权限和对象权限

系统权限:

方法一直接:select * from role_sys_privs where role=’RESOURCE’ ;

方法二间接:select privilege from dba_sys_privs where grantee='RESOURCE';

对象权限:

方法一直接:select * from role_tab_privs where role=’RESOURCE’ ;

方法二间接:select grantee, privilege from dba_tab_privs where grantee=' RESOURCE ';

(3)数据库中总共有哪些角色?

select * from dba_roles order by role; 结果 33

select distinct granted_role from dba_role_privs order by granted_role; 结果32

一个简单的方法,直接通过sql语句就能找出dba_roles 比 dba_role_privs多的那个角色:

select role from dba_roles where role not in (select granted_role from dba_role_privs );

结果

dba_roles 比 dba_role_privs多的那个角色为:GLOBAL_AQ_USER_ROLE

结论1:

视图dba_roles和视图dba_role_privs的区别(自己的猜想)

视图dba_roles,保存了oracleDBMS中所有现存的角色,包含已经被其他用户使用的和未被其他用户使用的所有角色

视图dba_role_privs,仅仅保存了已经被其他用户使用的角色,不包含没有被用户使用的角色。

这也就是为什么“dba_roles”可以被用来查询oracle DBMS中包含的所有角色,而“dba_role_privs”不可以这样用

3oracle中系统权限的总数

(1)select name from system_privilege_map;; 结果166

(2) select distinct privilege from dba_sys_privs; 结果161

通过“select name from system_privilege_map where name not in (select distinct privilege from dba_sys_privs);”可以查到数据字典system_privilege_map比数据字典dba_sys_privs多的系统权限为:

SYSOPER

EXEMPT ACCESS POLICY

EXEMPT IDENTITY POLICY

ALTER ANY OPERATOR

SYSDBA

但要注意的是:DBA角色不具备“sysdba”和“sysoper”的特权(启动和关闭数据库)

结论2:要查看数据库中“系统权限”的总数就应该选“system_privilege_map”,而不是“dba_sys_privs”

结论3:

“dba_roles”和“system_privilege_map”这两个视图都是静态的,他们都包含各自相关的全部信息——包括已经被用户(角色)使用的和未被使用的。

“xxxx_role/sys/tab_privs”只包含已经被用户或者角色使用的角色、系统权限或者对象权限

4 oracle中对象权限的总数

select distinct privilege from dba_tab_privs; 结果17
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐