4 回答

TA貢獻1752條經驗 獲得超4個贊
1、把這個函數的訪問權限付給其它用戶。grant execute on 函數名 to 其它用戶。
其它用戶調用函數時,前面要加上創建用戶名 如:a創建函數 getFunction 。 b調用的時候為a.getFunction.
2、可以把函數建成全局函數。

TA貢獻1815條經驗 獲得超13個贊
同一個包,在相同的用戶下的匿名程序塊中可以執行,但是在存儲過程中卻沒有權限執行,查了下資料,一些DBMS_開頭的pkg在pl/sql中用到的時候,需要顯示的執行
grant execute on dbms_xxxx to xxx 來賦下權限才可以。此外這個授權system用戶是沒有權限的,要sys 或者plsql / as dba登錄才有權限授權。
授權以后可以看到:
SYSTEM@RACTEST> select grantee,owner,table_name,grantor,privilege from dba_tab_privs where table_name like 'DBMS_LOCK';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE
-------------------- ---------- ---------- ---------- ----------
EXECUTE_CATALOG_ROLE SYS DBMS_LOCK SYS EXECUTE
DMSYS SYS DBMS_LOCK SYS EXECUTE
CTXSYS SYS DBMS_LOCK SYS EXECUTE
EXFSYS SYS DBMS_LOCK SYS EXECUTE
MDSYS SYS DBMS_LOCK SYS EXECUTE
OLAPSYS SYS DBMS_LOCK SYS EXECUTE
SYSMAN SYS DBMS_LOCK SYS EXECUTE
ETL SYS DBMS_LOCK SYS EXECUTE
8 rows selected.
然后再次執行:
SYSTEM@RACTEST> CREATE OR REPLACE PROCEDURE etl.pliutest
2 authid current_user
3 AS
4 BEGIN
5 DBMS_LOCK.sleep(1);
6 END;
7 /
Procedure created.
OK了!

TA貢獻1783條經驗 獲得超4個贊
這是oracle的an quan 機制,在存儲過程或者函數中調用其他用戶下的過程、表、函數等 一定要顯式fu quan才可以,利用角色fu quan是不可以的。
因此:
為什么我在B用戶下查詢A用戶的表,用sql語句可以直接查
===這個是角色fu quan導致的,比如B用戶有數據庫管理員角色
添加回答
舉報