oracle数据库权限、用户、角色总结

1、oracle中的权限

(1)权限分类

系统权限:系统规定用户使用数据库的权限,系统权限是对用户而言。

实体权限:某种权限的用户对其他用户的表或视图的存取权限,是针对表或者视图而言。

(2)系统权限分类

DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。

RESOURCE:拥有resource权限的用户只可以创建实体,不可以创建数据库结构。

CONNECT:拥有connect权限的用户只可以登录oracle,不可以创建实体,不可以创建数据库结构。

建议:对于普通用户,授予connect、resource权限;对于DBA管理用户,授予connect、resource、dba权限。

(3)系统权限授权命令

系统权限只能由DBA用户授予,对于新建的数据库,就只有sys、system这两个DBA用户。普通用户通过授权可以具有与system相同的用户权限,但是永远不能达到与sys用户相同的权限,system用户的权限也可以被收回。

查询用户拥有哪些权限:

CREATE USER user50 IDENTIFIED BY user50;
GRANT CONNECT, RESOURCE TO user50;
SELECT * FROM dba_role_privs;
SELECT * FROM dba_sys_privs;
SELECT * FROM role_sys_privs;
DROP USER user50 CASCADE; -- 加上cascade则将用户连同其创建的东西全部删除

(4)系统权限传递

增加with admin option选项,则得到的系统权限可以传递。

GRANT CONNECT, RESOURCE TO user50 WITH ADMIN OPTION;

(5)系统权限收回

系统权限只能由DBA用户收回:

REVOKE CONNECT, RESOURCE FROM user50;

注意:如果使用了with admin option为某个用户授予系统权限,那么对于被用户授予权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响,系统权限可以跨用户收回,即A可以直接收回C用户的权限。

(6)实体权限分类:select、update、insert、delete、alter、index、all,其中all包含所有的实体权限。

(7)将表的操作权限授予用户

GRANT ALL ON employees TO PUBLIC; -- public 表示所有用户,这里的all权限不包括drop

(8)实体权限传递

GRANT SELECT , UPDATE ON employees TO user02 WITH GRANT OPTION; -- user02得到的权限,可以传递下去

(9)实体权限收回

REVOKE SELECT, UPDATE ON employees FROM user02;

注意:如果取消某个用户的对象权限,那么对于这个用户使用with grant option授予权限的用户来说,同样还会取消这些用户相同权限,也就是说取消授权是级联的。

2、oracle中的用户

创建用户的相关操作,我在《oracle创建用户和表空间》这篇文章中介绍了,这里不总结。下面总结修改用户:

ALTER USER acc01 IDENTIFIED BY "123456"; -- 修改密码,双引号
ALTER USER acc01 DEFAULT TABLESPACE users; -- 修改用户缺省表空间
ALTER USER acc01 TEMPORARY TABLESPACE temp_data; -- 修改用户临时表空间名
ALTER USER acc01 PASSWORD EXPIRE; -- 强制用户修改口令
ALTER USER acc01 ACCOUNT LOCK; -- 将用户锁定
ALTER USER acc01 ACCOUNT UNLOCK; -- 将用户解锁
DROP USER acc01; -- 删除用户,当前正在连接的用户无法删除
DROP USER acc01 CASCADE; -- 将用户及其所建的实体全部删除

如果要查找当前用户信息,可以直接从user_users视图中找到。

3、oracle中的角色

(1)角色与系统预定义角色

角色是一组权限的集合,将角色赋予给一个用户,这个用户就拥有了这个角色的所有权限。预定义角色是在数据库安装以后,系统自动创建的一些常用的角色。系统预定义角色,包括如下:

CONNECT、RESOURCE、DBA:这些预定义角色主要是为了向后兼容,主要用于数据库管理,oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定义角色。将来的版本中这些角色中可能不会作为预定义角色。

DELETE_CATALOG_ROLE、EXECUTE_CATALOG_ROLE、SELECT_CATALOG_ROLE:这些角色主要用于访问数据字典视图和包。

EXP_FULL_DATABASE、IMP_FULL_DATABASE:这两个角色用于数据导入导出工具的使用。

AQ_USER_ROLE、AQ_ADMINISTRATOR_ROLE:这两个角色用于oracle高级查询功能。

SNMPAGENT:用于oracle enterprise manager和Intelligent Agent。

RECOVERY_CATALOG_OWNER:用于创建拥有恢复库的用户。

HS_ADMIN_ROLE:A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary。

(2)管理角色

CREATE ROLE role1; -- 建一个角色
GRANT CREATE ANY TABLE, CREATE PROCEDURE TO role1; -- 授权给角色
GRANT role1 TO user1; -- 授权角色给用户
SELECT * FROM role_sys_privs rsp; -- 查看角色所包含的权限
CREATE ROLE role1 IDENTIFIED BY password1; -- 创建带有口令的角色,在生效带有口令的角色时必须提供口令
ALTER ROLE role1 NOT IDENTIFIED; -- 修改角色使得不需要口令
ALTER ROLE role1 IDENTIFIED BY password1; -- 修改角色使得需要口令
-- 使角色生效
SET ROLE role1; -- 使角色role1生效
SET ROLE role1, role2; -- 使角色role1、role2生效
SET ROLE role1 IDENTIFIED BY password1; -- 使带有口令的角色1生效
SET ROLE ALL; -- 使该用户的所有角色生效
SET ROLE NONE; -- 设置所有角色失效
SET ROLE ALL EXCEPT role1; -- 除role1外的该用户的所有其他角色失效
SELECT * FROM session_roles sr; -- 查看当前用户的生效的角色
ALTER USER user1 DEFAULT ROLE role1; -- 设置user1用户的默认角色为role1
ALTER USER user1 DEFAULT ROLE ALL EXCEPT role1; -- 设置user1用户的默认角色为除了role1以外的全部角色

(3)删除角色

角色删除后,原来拥有该角色的用户就不再拥有该角色,相应的权限也就没有了。命令如下:

DROP ROLE role1;

注意:无法使用with grant option为角色授予对象权限,可以使用with admin option为角色授予系统权限,取消时不是级联。

补充:可以通过如下的数据字典来查询系统中的授权情况:

数据字典视图
描述
ROLE_SYS_PRIVS
角色对应的系统权限
ROLE_TAB_PRIVS
角色对应的表权限
USER_ROLE_PRIVS
用户的角色分配表
USER_TAB_PRIVS_MADE
用户对象上赋权者与被赋权者的历史赋权情况
USER_TAB_PRIVS_RECD
用户对象上拥有者与被赋予者的历史赋权情况
USER_COL_PRIVS_MADE
用户对象列上赋权者与被赋者的历史赋权情况
USER_COL_PRIVS_RECD
用户对象列上拥有者与被赋者的历史赋权情况
USER_SYS_PRIVS
用户的系统权限

PS:本文部分内容转自“junmail的专栏”的《Oracle用户、权限、角色管理》,只做学习、交流之用。

本文标题:oracle数据库权限、用户、角色总结

本文链接:http://yedward.net/?id=110

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章