2016-07-27 25 views
2

我有一個用AUTHID DEFINER參數在USER A架構上創建的過程。如果該過程不存在,此過程將創建一些表,稍後它會在所有表中插入操作。AUTHID DEFINER param不起作用

此參數在插入操作中正常工作,但不在創建表操作中。我從稱爲USER B的另一個用戶調用該過程,因此參數在理論上應允許USER B以USER A的身份執行過程,並在USER A模式中創建表,然後插入所有數據。

任何人都知道爲什麼當我調用它時程序返回的權限不足錯誤?我試圖直接在USER A架構中執行「create table」語句,它可以工作...

謝謝。

+0

特權是如何應用的?由角色(例如角色DBA)?它必須顯式授予,如'授予CREATE CREATE TABLE TO USER_A;' –

+0

我不確定要理解你的意思,但是當我執行「select * from session_privs;」時用戶B只具有CREATE SESSION AND SYNONYM權限。另一方面,USER_A也具有CREATE TABLE特權和其他... – Maik

+0

您是否授予procedure_XY對USER_B的執行權限;'? –

回答

0

USER A可能已授予RESOURCE角色,這使您可以手動創建表 - 這就是爲什麼您能夠'直接在USER A模式中執行'create table'語句的原因。

但是,在執行PL/SQL代碼時,適用不同的權限,因爲角色在過程中被禁用,請參閱Oracle documentation

因此,您需要明確授予用戶A的CREATE TABLE權限。

相關問題