PLSQL入门与精通(第54章:执行者权限的细节问题)

4 篇文章 0 订阅

这次,我们继续关注执行者权限过程的另一个细节,即“执行者的权限”所执行的内容,进行进一步解释。

例如,如果在执行权限的过程中引用的表中明确指定了模式(用户),会是什么情况呢?具体来说,在程序内不是“EMP”,而是“SCOTT.EMP”的时候,会怎么样呢。

这种情况下,即使存储过程是执行者权限,该过程制定了明确的用户的前提下,该表不是执行者的模式,而是SCOTT模式的EMP表。

但是,与定义者权限不同,执行者需要对该表的特定的权限。因为执行者权限过程是由执行者的权限执行的。

“EMP”表没有指定用户的话,没有必要特别注意改表是否具有“执行者的权限”。

但是,如果程序中指定了类似“SCOTT.EMP”这样指定用户(模式)的话,执行者模式必须对该表拥有执行者的权限,否则就会因为权限问题而出错。

所以需要进行权限管理,这属于安全管理的范畴。

请看下面的例子:

PROC1过程是执行者权限,操作的EMP表指定了用户,譬如是SCOTT.EMP,例子如下:

–例子开始–
SQL> SHOW USER
当前用户是“SCOTT”。 ←在SCOTT用户中

SQL>vCREATE OR REPLACE PROCEDURE PROC1–←改变PROC1过程
2 AUTHID CURRENT USER --←指定执行者权限
3 IS
4 V_ENAME VARCHAR2(20);
5 BEGIN
6 SELECT ENAME INTO V_ENAME
7 FROM SCOTT.EMP WHERE EMPNO=7934;–←指定了用户
8 DBMS_OUTPUT.PUT_LINE(V_ENAME);
9 END;
10 /

程序已创建。

–例子结束–

为了理解各种级别的权限,我们新作一个用户(KING),并且给予最低限度的权限,去执行该程序。

–例子开始–

SQL>CONNESCT SYSTEM/oracle --切换管理员SYSTEM用户(管理员)
已连接。

SQL>CREATE USER KING IDENTIFIED BY king;–创建新用户(KING)

用户已创建。

SQL>GRANNT CONNECT KING;–授权CONNECT 角色/权限给KING用户(连接权限)

授权成功。

SQL> GRANT EXECUTE ON SCOTT.PROC1 TO KING;–给KING 用户付给SCOTT.PROC1的执行权限

授权成功。

–例子结束–

这样,KING用户拥有连接CONNECT的权限,以及SCOTT.PROC1过程的执行权限。除此之外没有其他权限。

我们看执行结果:

–例子开始–

SQL>CONNINCT KING/king–KING用户中
已连接。

SQL> SET SERVEROUTPUT ON

– 运行SCOTT.PROC1过程
SQL> EXECUTE SCOTT.PROC1

BEGIN SCOTT.PROC1; END;
*
行1发生错误。:
ORA-00942:表或视图不存在。
ORA-06512: "SCOTT.PROC1“,行6-”SCOTT.PROC1过程的第六行出错
ORA-06612:行1

–例子结束–

如上结果,KING用户去执行SCOTT.PROC1过程会发生权限不足的错误。
是因为KING用户对SCOTT.EMP表的查询权限不足引起的错误。

需要付给KING用户对SCOTT.EMP表的查询权限:

–例子开始–
SQL>CONNECT SCOTT/tiger --切换到SCOTT用户
已连接。

SQL> GRANT SELECT ON SCOTT.EMP TO KING; – 给KING永福赋予SCOTT.EMP的SELECT权限

授权成功。

SQL>CONNINCT KING/king–KING用户
已连接。

SQL>SET SERVERSOUT ON --画面输出有效
SQL> EXECUTE SCOTT.PROC1 – SCOTT.PROC1执行过程
MILLER – 对SCOTT.EMP进行了SELECT

PL/SQL过程成功完成。–正常完成

–例子结束–

这样,如果某个程序是执行者权限,改过程里的操作的表制定了用户,则需要该过程中所制定的表,也需要执行者的权限。

所以,对于执行者权限的程序,如果执行者执行的话,需要针对权限管理有很细致的管理,从而加强安全。
例如,对于用户1需要付给SCOTT.EMP的SELECT权限,
对用户2需要赋予 SCOTT.EMP的SELECT权限和UPDATE权限。
如果一个执行者权限的程序里边查询了SCOTT.EMP表,需要给用户1和用户2赋予SCOTT.EMP表的查询权限,
如果一个执行者权限的程序里边更新了SCOTT.EMP表,需要给用户1和用户2赋予SCOTT.EMP表的更新权限。

所以,如果用户和程序都很多的时候,权限管理也很复杂。这时候可以通过包和角色管理,来简化这个安全管理过程。

这是我们下次要说明的内容。本次到此为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值