1、权限分类
Oracle的权限可以分为系统权限和对象权限。系统权限是指执行特定类型sql的权限。用于控制用户可以执行的数据库操作。当用户具有CREATE ANY TABLE权限时,可以在任何模式中创建表。系统权限是针对用户而设置的,用户必须被授予相应的系统权限,才可以连接到数据库并进行相应的操作。
对象权限是指在对象级控制数据库的操作的权限,即访问其他用户模式对象的权限。
Oracle数据库允许权限传递,也就是已经具有权限的用户将其权限授予其他用户。Oracle提供了200多种系统权限,可以通过数据字典视图 system_privilege_map查询。
dba可以将系统权限授予用户、角色、public公共用户组。一般情况下,系统权限只能授予信任的用户。
public 公共用户组是在创建数据库时自动创建的用户组。该用户组有什么权限,数据库中所有的用户就具有什么权限。可以利用这个特点,将公共权限授予数据库中所有的用户。
2、系统权限的授权
一般情况下,授予系统权限是有dba完成的;如果要以其他用户身份授予系统权限,则要求改用户必须具有grant any privilege 系统权限,或在相应系统权限上具有 with admin option选项。给用户授予权限的语句如下:
grant system_priv [, system_priv, ...]
to { public | role | user }[, {user | role | public}]...
[with admin option]
其中system_priv 用于指定系统权限,如果指定多个系统权限,需要用逗号分隔; user 用于指定被授权的用户; role 用于指定被授权的角色,如果有指定多角色,需要用逗号分隔。另外,在授予系统权限时可以附加 with admin option选项,使用该选项后,被授权的用户,角色可以将对应的系统权限授予其他用户,角色。
grant create session, create table to [USER_NAME]
with admin option;
grant create view to [USER_NAME];
3、查看系统权限
oracle提供了一些数据字典,以记录数据库中各种权限信息。
DBA_SYS_PRIVS包含了数据库管理员所有用户有的系统权限信息
SESSION_PRIVS包含了当前用户可以使用的权限信息
SYSTEM_PRIVILEGE_MAP 包含了系统中所有的系统权限信息
4、收回系统权限
与授予权限相似,一般收回系统权限的操作也是由dba完成,如果要以其他用户收回系统权限,要有该用户必须具有相应的系统权限以及转授系统权限(with admin option)。收回系统权限关键字为revoke。
revoke system_priv[,system_priv]...
from { public | role | user }[, {user | role | public}]...
revoke create session, create table from USER_NAME;
用户权限被收回后,经过传递获得权限的用户不会被收回。这个和linux的权限不同。