ORACLE的权限
说明
权限,顾名思义为执行的权力,只有当用户拥有相对应的权限,才可以对数据库对应的内容进行访问或者处理。用户如何才能拥有权限,这个就是需要数据库管理员来分配,保证数据库的安全性。
数据库安全性有2大种:
系统权限和对象权限。
系统权限 主要控制数据库的存取和使用机制,适用于全局性操作,比如操作对象(如表、视图、序列等)的权限
对象权限 则控制用户对特定对象的访问和操作能力,适用于具体对象的操作。比如是SELECT、INSERT、UPDATE、DELETE等
前提了解:
WITH GRANT OPTION 允许被授权人将其获得的权限授予其他用户或角色(临时)。
WITH ADMIN OPTION(仅DBA权限用户) 允许被授权人将其获得的权限不仅授予其他用户或角色,还可以授予这些用户或角色拥有授权能力的能力(永久)。
两者都可以将权限下放,但是对于第三方来说,拥有权限的情况有所不同。
--------------------------------------------------分割线-------------------------------------------------------
1 授予权限
1.1 普通授权
只授予用户HR权限查询,HR用户无法授权给第三方,仅能自己查看。
GRANT SELECT ON table1 TO HR;
若是授予第三方,报错如图,
1.2 级联 with grant option
授予用户权限时,使用 WITH GRANT OPTION 选项可以使被授权用户获得将该权限授予其他第三方用户的能力,
第三方用户拥有的权限可以理解为临时身份。
举例:假设用户 mybi 拥有表 table2 的 INSERT 权限,并且 mybi 想授权 HR 对 table2 进行 INSERT 操作,mybi 授予 HR INSERT 权限的 SQL 语句如下:
--- mybi 用户下执行
GRANT INSERT ON table2 TO HR WITH GRANT OPTION;
1.3 非级联 with admin option(仅DBA权限用户)
授予第2层用户权限时,使用 WITH ADMIN OPTION 选项可以使被授权用户获得将该权限授予给其他用户的能力,
第三方拥有的权限和第2层用户权限是一样的。如果第1方授权方用户,要收回必须单独收回。
第2层用户已经授予其他用户或角色的权限不会因传播而失效
举例:假设用户 mybi 拥有表 table1 的 SELECT 权限,并且 mybi 想授权 HR 对 table1 进行 SELECT 操作。mybi 授予 HR SELECT 权限的 SQL 语句如下:
--- DBA角色下的 mybi 用户下执行
GRANT SELECT ON table1 TO HR WITH ADMIN OPTION;
--------------------------------------------------分割线-------------------------------------------------------
2 回收权限 REVOKE
REVOKE 语句来回收已经授予给用户的权限。下面是回收权限的基本语法:
REVOKE privilege_name -- 回收的权限名称 SELECT、INSERT 等等
ON object_name -- 限所应用的对象,例如表、视图 例如刚刚授权表 table1 table2
FROM user_name; -- 回收权限的用户名 刚刚的HR用户
举例,授权方将刚刚授权给HR用户的table1权限收回:
-- 正常收回权限
REVOKE SELECT ON TABLE1 FROM HR;
--- 收回HR所有权限 可以用all 代替
REVOKE ALL ON TABLE1 FROM HR;
-- 收回所有给出的select 权限,可以用PUBLIC 代替用户
REVOKE SELECT ON TABLE1 FROM PUBLIC;
补充:查看权限sql
查询用户的权限信息
-- 当前用户下
select PRIVILEGE from USER_SYS_PRIVS ;
-- DBA用户下
select GRANTEE, PRIVILEGE from DBA_SYS_PRIVS;