2013年1月11日

Oracle - 預存程序無權執行SQL命令

錯誤訊息

  • 代碼(sqlcode):-1031 
  • 描述(Sqlerrm):ORA-01031: 權限不足

發生原因

  • 使用者在System Privileges權限不足

解決辦法及案例

UserA 本身可以執行Create Table權限,在Role Privileges也有繼承DBA權限,理應為最大使用者

-- SQL 查詢使用者在Role Privileges的權限
Select * From dba_role_privs Where Grantee = 'UserA'

Grantee Granted_Role Admin_Option Default_Role
UserA DBA NO YES

但是在執行Store Procedures時,Oracle以使用者A本身的System Privileges檢查是否有Create Table權限

-- SQL 查詢使用者在System Privileges的權限 Select * From 
dba_sys_privs Where Grantee = 'UserA'

Grantee Privilege Admin_Option
UserA Unlimited Tablespace YES

該使用者A並無相關權限,因此執行Store Procedures時,無法執行Create Table指令
因此必須建立該使用者Create Table權限。

-- SQL 查詢使用者在System Privileges的權限 Select * From 
dba_sys_privs Where Grantee = 'UserA'
Grantee Privilege Admin_Option
UserA Unlimited Tablespace YES