1、对象权限的分类
根据不同的对象类型,Oracle数据库设置了多种类型的对象权限。
alter | delete | execute | index | insert | read | reference | select | update | |
---|---|---|---|---|---|---|---|---|---|
directory | N | N | N | N | N | Y | N | N | N |
function | N | N | Y | N | N | N | N | N | N |
procedure | N | N | Y | N | N | N | N | N | N |
package | N | N | Y | N | N | N | N | N | N |
sequence | Y | N | N | N | N | N | N | Y | N |
table | Y | Y | N | Y | Y | N | Y | Y | Y |
view | N | Y | N | N | Y | N | N | Y | Y |
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表查询权限
同样,收回对象权限,不会级联收回。