微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以阻止立即执行在只读用户上插入吗?

如何解决我可以阻止立即执行在只读用户上插入吗?

我有一个只读用户,该用户必须具有对特定程序包的执行特权。 这些程序包有时使用execute immediate将值插入表中。

我可以看到为什么采用这种方式构建它,但是我需要软件包抛出一个权限不足错误,而不是仅仅执行修改语句。

是否可以在不更改已执行程序包的情况下更改行为或构建解决方法

因此只读用户具有:

GRANT SELECT ON table to READ_ONLY_USER;
GRANT EXECUTE,DEBUG ON package to READ_ONLY_USER;

包装中包含:

query = 'INSERT INTO table VALUES (value)';
execute immediate query;

用户执行程序包时,我需要一个错误

解决方法

检查以下示例。不久,在创建该PL / SQL程序单元时,关键字为AUTHID CURRENT_USER

MIKE连接(拥有表和过程并授予SCOTT特权来使用它们):

SQL> show user
USER is "MIKE"
SQL>
SQL> create table test (id number);

Table created.

SQL> create or replace procedure p_test
  2    authid current_user
  3  is
  4  begin
  5    execute immediate 'insert into mike.test values (1)';
  6  end;
  7  /

Procedure created.

SQL> exec p_test;

PL/SQL procedure successfully completed.

SQL> select * from test;

        ID
----------
         1

SQL> grant select on test to scott;

Grant succeeded.

SQL> grant execute on p_test to scott;

Grant succeeded.

SQL>

SCOTT连接:

SQL> show user
USER is "SCOTT"
SQL>
SQL> select * From mike.test;

        ID
----------
         1

SQL> exec mike.p_test;
BEGIN mike.p_test; END;

*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "MIKE.P_TEST",line 5
ORA-06512: at line 1


SQL>

没有它,SCOTT可以将值插入MIKE的表中:

SQL> connect mike/lion@orcl
Connected.
SQL> create or replace procedure p_test
  2  is                                      --> no more authid current_user
  3  begin
  4    execute immediate 'insert into mike.test values (2)';
  5  end;
  6  /

Procedure created.

SQL> connect scott/tiger@orcl
Connected.
SQL> exec mike.p_test;

PL/SQL procedure successfully completed.

SQL> select * From mike.test;

        ID
----------
         1
         2

SQL>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。