在Oracle数据库中,用户可以直接访问同名Schema下的数据库对象,如果需要访问其它Schema下的数据库对象,就需要具有相应的对象权限。对象权限授予的SQL语法为:
GRANT object_privilege_list | ALL [PRIVILEGES] [ (column,...) ] ON [schema.]object TO user_name_list | role_list | PUBLIC [WITH GRANT OPTION];
其中:
-object_privilege_list:对象权限列表,以逗号分隔;
-ALL PRIVILEGES:全部权限;
-[schema.]object:待授权的对象;
-user_name_list:用户列表,以逗号分隔;
-role_list:角色列表,以逗号分隔;
-PUBLIC:所有用户
(2)对象权限的回收
回收对象权限的SQL语法为:
REVOKE object_privilege_list | ALL [PRIVILEGES] ON [schema.]object FROM user_name_list | role_list | PUBLIC [CASCADE CONSTRAINTS] | [FORCE];
其中:
-CASCADE CONSTRAINTS:当回收REFERENCE对象权限或回收ALL PRIVILEGES,删除利用REFERENCES对象权限创建的外键约束;
-FORCE:当回收在表中被使用的用户自定义对象类型的EXECUTE权限时,必须指定FORCE关键字。
回收对象权限需要注意以下3点:
多个管理员授予同一个用户相同的对象权限,一个管理员将该对象权限回收后,该用户不再具有该对象权限;
为了回收用户对象权限的传递性,须先回收该对象权限,再重新赋予给用户该对象权限;
如果一个用户的对象权限具有传递性,并且已经给其它用户授权,那么该用户的对象权限被回收后,其它用户的对象权限也将被收回。(值得注意的是,这一条与系统权限传递性的回收不相同)。
4.3 查询权限信息
视图名称 说明DBA_SYS_PRIVS 包含所有用户和角色获得的系统权限信息
ALL_SYS_PRIVS 包含当前用户可见的全部用户和角色获得的系统权限信息
USER_SYS_PRIVS 当前用户获得的系统权限信息
DBA_TAB_PRIVS 包含所有用户和角色获得的对象权限信息
ALL_TAB_PRIVS 包含当前用户可见的全部用户和角色获得的对象权限信息
USER_TAB_PRIVS 当前用户获得的对象权限信息
DBA_COL_PRIVS 包含数据库中所有列对象的权限信息
ALL_COL_PRIVS 包含当前用户可见的所有列对象的权限信息
USER_COL_PRIVS 当前用户拥有的或授予其它用户的所有列对象的权限信息
SESSION_PRIVS 当前会话可以使用的所有权限信息
5.角色管理
假如我们直接给每一个用户赋予权限,这将是一个巨大又麻烦的工作,同时也不方便DBA进行管理。通过采用角色,使得:
权限管理更方便。将角色赋予多个用户,实现不同用户相同的授权。如果要修改这些用户的权限,只需修改角色即可;
角色的权限可以激活和关闭。使得DBA可以方便的选择是否赋予用户某个角色;
提高性能,使用角色减少了数据字典中授权记录的数量,通过关闭角色使得在语句执行过程中减少了权限的确认。
图. 用户、角色、权限关系图
由于个人接触的数据库用户较少,没有单独创建角色,故角色的创建、修改、删除、激活、禁用、授予、回收不再一一讲述,只要知道如何查询角色信息即可。
在Oracle中,包含角色的数据字典如下:
视图名称 说明DBA_ROLE_PRIVS 包含数据库中所有用户拥有的角色信息
USER_ROLE_PRIVS 包含当前用户拥有的角色信息
ROLE_ROLE_PRIVS 角色拥有的角色信息
ROLE_SYS_PRIVS 角色拥有的系统权限信息
ROLE_TAB_PRIVS 角色拥有的对象权限信息
DBA_ROLES 当前数据库中所有角色及其描述信息
SESSION_ROLES 当前会话所具有的角色信息
6.审计