Oracle 权限详解(grant,revoke)

1 概述

权限管理是 Oracle 系统的精华
不同用户登录到同一个数据库中,可能看到不同数量的表,拥有不同的权限

授权&回收:

-- 授予 hr 用户 scott.emp 表权限
grant select, insert on scott.emp to hr;

-- 回收 hr 用户 scott.emp 表权限
revoke select, insert on scott.emp from hr;

2 分类

区别:'权限的 颗粒度 不同'

1. 系统权限 'dba_sys_privs' :针对 '用户',如: scott
2. 对象权限 'dba_tab_privs' :针对 '数据库对象',如: tableview、package
3. 角色权限 'dba_role_privs':一组权限的集合

2.1 系统权限

1. 部分系统权限展示(针对 '用户'(1) CREATE TABLE
   (2) ALTER TABLESPACE
   (3) DEBUG ANY PROCEDURE

2. 常见系统权限所属的角色
   (1) connect : 只能登陆 Oracle,不可以创建实体,不可以创建数据库结构
   (2) resource: 只可以创建实体,不可以创建数据库结构
   (3) dba     : 拥有全部特权,是系统最高权限,只有 DBA 才可以创建数据库结构
   
   select * from dba_roles t where t.role in ('CONNECT', 'RESOURCE', 'DBA');
   
   其中:
   (1) 对于普通用户 : grant connect, resource to 普通用户;
   (2) 对于DBA用户 : grant dba to DBA用户;  -- dba 含所有特权!(包括 connect、resource)
   
3. 查询语句
   select t.* from dba_sys_privs t;

4. 说明
   (1) 系统权限只有 DBA 用户才能回收

2.2 对象权限

1. 部分对象权限展示(针对 '数据库对象'(1) SELECTINSERTUPDATEDELETE
   (2) EXECUTE
   (3) ALTER

2. 常见对象权限所属的角色
   (1) dba   : 普通 dba 权限
   (2) public: "公共" 权限,任何用户均可访问 -- 创建 public synonym 时,就在此用户下

3. 查询语句
   select t.* from dba_tab_privs t;

4. 说明
   (1) grantee:受赠人
   (2) grantor:授予人
   关系:'授予人(grantor)' 将自己的 '权限(privilege)''受赠人(grantee)'

2.3 角色权限

1. 部分角色权限展示(一组权限的 '集合'(1) connect, resource, dba
   
2. 用户也可自定义角色,语法如下:
   create role <role_test>;
   grant create any table, create procedure to <role_test>;
   grant <role_test> to <user_test>;
   drop role <role_test>;

3. 查询语句
   select t.* from dba_role_privs t;

3 示例

3.1 权限回收

语法:

-- 授权
grant 权限1[, 权限2] on 属主.对象 to 用户 [with grant|admin option];

-- 回收权限
revoke 权限1[, 权限2] on 属主.对象 from 用户;

举例:

-- 授予 hr 用户 scott.emp 表权限
grant select, insert on scott.emp to hr;

-- 回收 hr 用户 scott.emp 表权限
revoke select, insert on scott.emp from hr;

3.2 权限传递

结论:

在 Oracle 授权时,有两个可选项
1. with admin option
   (1) 被授权用户可以将所获得的权限 '再次授予' 其它用户或角色
   (2) 取消授权时,'不级联'
   (3) 用于 "系统权限",可通过 user_sys_privs 等方式进行查询
   (4) 被授权的用户 '可以' 自己解除自己的权限

2. with grant option
   (1) 同上 '(1)'
   (2) 取消授权是,'级联'
   (3) 用于 "对象权限",可通过 user_tab_privs 等方式进行查询
   (4) 被授权的用户 '不可以' 自己解除自己的权限

with admin option 演示:(‘系统权限’ 传递)

with admin option 演示:('系统权限' 传递)

1. 准备 3 个测试用户
   (1) system : grant create table to hr with admin option;
   (2) hr     : grant create table to odsdata;
   (3) odsdata: create table table_test(sno number(3));
   -- osdata: select table_test 成功!
   
2. 回收权限
   (1) system : -- revoke create table from hr;
   (2) hr     : revoke create table from hr;
   (3) odsdata: create table table_test2(sno number(3));
   -- odsdata: create table table_test2 失败!
   --          但 select table table_test1 仍旧可以!

with grant option 演示:(‘对象权限’ 传递)

with grant option 演示:('对象权限' 传递)

1. 准备 3 个用户测试
   (1) system : grant select on scott.emp to hr with grant option;
   (2) hr     : grant select on scott.emp to odsdata;
   (3) odsdata: select * from scott.emp;
   -- odsdata 查询成功!

2. 回收权限
   (1) system : revoke select on scott.emp from hr;
   (2) hr     : select * from scott.emp;
   (3) odsdata: select * from scott.emp;
   -- hr 和 odsdata 均查询失败!   

猜你喜欢

转载自blog.csdn.net/qq_34745941/article/details/84593284