oracle对存储过程授权,PL/SQL包内的存储过程执行授权

请教一个PL/SQL包内的存储过程执行授权的问题:

我发现可以将对包的执行权限赋予用户,但却无法将对包内的存储过程的执行权限赋予用户,请教如何才能赋权呢?

[oracle@localhost ~]$ cat test.sql

CREATE OR REPLACE PACKAGE pkg_test IS

PROCEDURE prog_test(P1 IN VARCHAR2,P2 IN VARCHAR2);

END pkg_test;

/

CREATE OR REPLACE PACKAGE BODY pkg_test IS

PROCEDURE prog_test(P1 IN VARCHAR2,P2 IN VARCHAR2) IS

BEGIN

DBMS_OUTPUT.PUT_LINE (This is just a test.);

END;

END pkg_test;

/

[oracle@localhost ~]$

SQL> @test.sql

SQL> CREATE OR REPLACE PACKAGE pkg_test IS

2

3 PROCEDURE prog_test(P1 IN VARCHAR2,P2 IN VARCHAR2);

4

5 END pkg_test;

6 /

Package created.

SQL>

SQL> CREATE OR REPLACE PACKAGE BODY pkg_test IS

2 PROCEDURE prog_test(P1 IN VARCHAR2,P2 IN VARCHAR2) IS

3 BEGIN

4 DBMS_OUTPUT.PUT_LINE (This is just a test.);

5 END;

6 END pkg_test;

7 /

Package body created.

SQL> set severoutput on;

SP2-0735: unknown SET option beginning "severoutpu..."

SQL> set serveroutput on;

SQL>

SQL> execute pkg_test.prog_test(a,b);

This is just a test.

PL/SQL procedure successfully completed.

SQL>

SQL> show user;

USER is "SYS"

SQL> grant execute on pkg_test.prog_test to tester;

grant execute on pkg_test.prog_test to tester

*

ERROR at line 1:

ORA-04042: procedure, function, package, or package body does not exist

SQL> grant execute on pkg_test.prog_test(in varchar2,in varchar2) to tester;

grant execute on pkg_test.prog_test(in varchar2,in varchar2) to tester

*

ERROR at line 1:

ORA-00990: missing or invalid privilege

SQL>

SQL> grant execute on pkg_test.prog_test(p1 in varchar2,p2 in varchar2) to tester;

grant execute on pkg_test.prog_test(p1 in varchar2,p2 in varchar2) to tester

*

ERROR at line 1:

ORA-00990: missing or invalid privilege

SQL>

请教一个PL/SQL包内的存储过程执行授权的问题: 我发现可以将对包的执行权限赋予用户,但却无法将对包内的存储过程的执行权限赋予用户,请教如何才能赋权呢? [oracle@localhost ~]$ cat test.sql CREATE OR REPLACE PACKAGE pkg_test IS PROCEDURE prog_test(P1 IN VARCHAR2,P2 IN VARCHAR2); END pkg_test; / CREATE OR REPLACE PACKAGE BODY pkg_test IS PROCEDURE prog_test(P1 IN VARCHAR2,P2 IN VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT_LINE (This is just a test.); END; END pkg_test; / [oracle@localhost ~]$ SQL> @test.sql SQL> CREATE OR REPLACE PACKAGE pkg_test IS 2 3 PROCEDURE prog_test(P1 IN VARCHAR2,P2 IN VARCHAR2); 4 5 END pkg_test; 6 / Package created. SQL> SQL> CREATE OR REPLACE PACKAGE BODY pkg_test IS 2 PROCEDURE prog_test(P1 IN VARCHAR2,P2 IN VARCHAR2) IS 3 BEGIN 4 DBMS_OUTPUT.PUT_LINE (This is just a test.); 5 END; 6 END pkg_test; 7 / Package body created. SQL> set severoutput on; SP2-0735: unknown SET option beginning "severoutpu..." SQL> set serveroutput on; SQL> SQL> execute pkg_test.prog_test(a,b); This is just a test. PL/SQL procedure successfully completed. SQL> SQL> show user; USER is "SYS" SQL> grant execute on pkg_test.prog_test to tester; grant execute on pkg_test.prog_test to tester * ERROR at line 1: ORA-04042: procedure, function, package, or package body does not exist SQL> grant execute on pkg_test.prog_test(in varchar2,in varchar2) to tester; grant execute on pkg_test.prog_test(in varchar2,in varchar2) to tester * ERROR at line 1: ORA-00990: missing or invalid privilege SQL> SQL> grant execute on pkg_test.prog_test(p1 in varchar2,p2 in varchar2) to tester; grant execute on pkg_test.prog_test(p1 in varchar2,p2 in varchar2) to tester * ERROR at line 1: ORA-00990: missing or invalid privilege SQL>
经验分享 程序员 微信小程序 职场和发展