Oracle 权限详解(grant,revoke)

1 概述

1. Oracle 权限管理是十分严格的,这也是 Oracle 系统的精华之一

2. 基本权限操作
   (1) grant select, insert on scott.emp to hr; -- 授权
   (2) 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)、(2)
   (1) connect : 只能登陆 Oracle,不可以创建实体,不可以创建数据库结构
   (2) resource: 只可以创建实体,不可以创建数据库结构
   (3) dba     : 拥有全部特权,是系统最高权限,只有 DBA 才可以创建数据库结构
   
   select * from dba_roles t where t.role in ('CONNECT', 'RESOURCE', 'DBA');
   
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 均查询失败!   
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼丸丶粗面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值