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

Oracle 学习笔记7 —— 权限管理2

2013-05-19 15:35 411 查看
1、对象权限的分类

根据不同的对象类型,Oracle数据库设置了多种类型的对象权限。

alterdeleteexecuteindexinsertreadreferenceselectupdate
directoryNNNNNYNNN
functionNNYNNNNNN
procedureNNYNNNNNN
packageNNYNNNNNN
sequenceYNNNNNNYN
tableYYNYYNYYY
viewNYNNYNNYY
2、授予对象权限

oracle dba和对象权限有该对象的拥有者可以为其他用户授权,非对象的拥有者不能向其他用户授予对象权限。

grant { object_priv [(column_list)][,object_priv[(column_list)]]... | all [privilege]} on [ schema.]object
to { user | role | public} [, { user | role | public }] ...
[with grant option]


其中,object_priv 是对象权限,column_list用于标识权限所对应的列表,schema表示模式名,user表示被授权的用户,role表示被授权的角色。对象权限不仅可以授予用户、角色,也可以授予public。将对应权限授予public后,会使所有用户都具有该对象权限。授予对象权限时可以带with grant option选,被授权用户可以将对应权限转授给其他用户。

需要注意的是,with grant option选项不能授予给角色。
grant select on scott.emp to USER_NAME;
-- 授予scott模式,emp表的查询权限

grant update(sal) on scott.emp to USER_NAME;
-- 授予scott模式,emp表sal字段的修改权限。


3、显示对象权限

授予对象权限时,Oracle会将对象权限的信息存放到数据字典中。下边列出与对象权限相关的数据字典视图。

DBA_TAB_PRIVS 显示所有用户或角色的对象权限信息

DBA_COL_PRIVS 显示所有用户或角色的列权限信息

ALL_COL_PRIVS_MADE 显示对象所有者或授权用户授出的所有列权限

ALL_COL_PRIVS_RECD 显示用户或public组被授予的列权限

ALL_TAB_PRIVS_MADE 显示对象所有者或授权用户授出的所有对象权限

ALL_TAB_PRIVS_RECD 显示用户或public组被授予的对象权限

下边的语句将查询DBA_TAB_PRIVS显示用户被授予的所有对象权限。

select grantor, owner || '.' || table_name object, privilege
from DBA_TAB_PRIVS
where grantee = 'USER_NAME';


4、收回对象权限

和系统权限相似,收回对象权限是由对象的所有者完成的。如果以其他用户收回对象权限,则要求该用户必须是权限授予者。收回对象权限的revoke语句的形式如下:

revoke { object_priv [, object_priv] ... | all [privileges]}
on [ schema.]object
from { user | role | public}
[ cascade constrainsts];


收回对象权限时需要注意,授权者只能从自己授权的用户那里收回对象权限。如果被授权用户基于一个对象权限创建了存储过程,视图,当收回对象权限以后,这些存储过程,视图将变为无效。

revoke select on scott.emp from USER_NAME;
-- 收回对象scott模式,emp表查询权限


同样,收回对象权限,不会级联收回。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: