zoukankan      html  css  js  c++  java
  • oracle 权限管理

    • 1.ORACLE的CONNECT和RESOURCE角色权限

    一般情况下,在新建数据库用户后,都会习惯性的给用户授权CONNECT角色和RESOURCE角色:

    GRANT connect,resource TO 用户;
    • CONNECT角色:仅具有创建SESSION的权限
    • RESOURCE角色:仅具有创建CLUSTER,INDEXTYPE,OPERATOR,PROCEDEURE,SEQUENCE,TABLE,TRIGGER,TYPE的权限。同时,当把ORACLE resource角色授予一个user的时候,不但会授予ORACLE resource角色本身的权限,而且还有unlimited tablespace权限,但是,当把resource授予一个role时,就不会授予unlimited tablespace权限。

     2.为用户赋权访问对象

    GRANT privilege[, ...] ON object[, ...] TO { PUBLIC | GROUP group| username} 

    2.1表访问权限的赋予和收回:

    可以操作的权限:

    • select:查询
    • insert:插入
    • update:更新
    • delete:删除
    • all:所有权限
     给用户授予或收回查询、插入、更新tablename表的权限
    grant select,insert,update on tablename to userA; --赋权给用户:userA
    grant select,insert,update on tablename to public; --赋权给所有用户
    
    revoke select,insert,update on tablename from userA; --收回给予的权限从用户:userA
    revoke select,insert,update on tablename from public; --收回给予的权限从所有用户

    同样适用于:

    • view:视图
    • sequence:序列
    • index:索引

    2.2 package,procedure,function权限的赋予和收回:

    可以操作的权限:

    •  1、with admin option

    with admin option的意思是被授予该权限的用户有权将某个权限(如create any table)授予其他用户或角色,取消是不级联的。
    如授予A系统权限create session with admin option,然后A又把create session权限授予B,但管理员收回A的create session权限时,B依然拥有create session的权限。但管理员可以显式收回B create session的权限,即直接revoke create session from B.

    2、with grant option
    with grant option的意思是:权限赋予/取消是级联的,如将with grant option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。

    最后:一个实例

    1) 创建三个用户,并给予如下权限:

    create user userA identified by pwd;
    create user userB identified by pwd;
    create user userC identified by pwd;
    grant connect,resource to userA;
    grant connect,resource to userB;
    grant connect,resource to userC;

    2)用户A下:

    建表并插入一条记录:

    create table tba(i number);
    insert into tba values(1);
    commit;

    将表的权限分配给用户B:

    grant select,update on tba to userb

    3)用户B下:

    执行如下语句:

    select * from usera.tba; --执行成功
    grant select,update on usera.tba to userc; --出错:ora-01031:权限不足。

    说明uesrb有访问usera的权限,查不能把权限赋给userc

    现在创建一个存储过程

    create or replace procedure pr_update_tba(v_i_n number) is
    BEGIn
       update usera.tba set i=v_i_n;
       commit;
    END;

    执行存储过程并查看tba的数据:

    call pr_update_tba(3);
    select * from usera.tba

    结果看到tba的数据已经变为3,现在把存储过程的权限赋给userc

    grant execute on pr_update_tba to userc;

    4)用户C下:

    select * from usera.tba; --提示表不存在,说明没有权限
    update usera.tba set i=0; --提示表不存在,说明没有权限

    说明userc并没有usera.tba的select和update权限。

    再执行:

    call userb.pr_update_tba(9); --执行成功

    结论:userB 拥有userA.tba的访问权限,但他不可以直接把这个权限赋予userc,却可以通过打包存储过程,间接的将这个权限赋予userc(当然仅在存储过程内部有效).

  • 相关阅读:
    ZigBee开发(2)--基础实验LED
    ZigBee开发(1)--开发环境搭建
    day12 -- 函数递归、生成式、匿名函数和常用内置函数
    day11 -- 函数进阶之闭包、装饰器
    day10 -- 函数对象、函数名称空间和作用域
    day09 -- 函数基础之函数的定义、返回值以及函数的参数
    day08 -- 文件的光标控制、内容监测,修改及其他模式
    上海dd -- Python2 与Python3 的区别(待更新)
    上海day7--字符编码和文件的基本操作类型
    上海day6 ---- 列表、元组、字典和集合
  • 原文地址:https://www.cnblogs.com/champaign/p/oracle-privilege.html
Copyright © 2011-2022 走看看