ORACLE 儲存過程 觸發器許可權問題

2021-08-18 23:34:48 字數 763 閱讀 1170

需要建立trigger,trigger名和已有表名相同,竟然沒有問題。

編譯的時候發現sfism4使用者缺少表sfis1.c_menu_parameter_t的許可權,查詢發現c_update和c_select角色已經有該錶許可權,且sfism4使用者也已經有這倆角色。

查詢發現涉及到authid current_user

和authid definer(預設)這兩個引數。

直接總結:

在oracle8i以前的版本,所有已編譯儲存物件,包括packages, procedures, functions, triggers, views等,只能以定義者(definer)身份解析執行;而oracle8i及其後的新版本,oracle引入呼叫者(invoker)許可權,使得物件可以以呼叫者身份和許可權執行。

1.authid current_user使用的是呼叫者的許可權去執行,authid definer使用定義者的許可權去執行。

2.角色在authid definer的儲存過程中是disabled。

3.儲存過程編譯時角色也是disabled,並且不驗證動態sql的許可權。(此次涉及問題)

4.以上也適用於函式、觸發器,即命名的pl/sql塊。

參考:

oracle儲存過程和觸發器

過程 建立過程,create procedure語句可以用於建立過程,簡化語法如下 create or replace procedure procedure name parameter name in out in out type begin procedure body end parame...

Oracle儲存過程,函式,觸發器

一 儲存過程的定義 1 過程 多次編譯 多次執行 過程實現計算器 declare p1 number 1 p2 number 2 sign varchar2 3 begin if sign then syso p1 p2 elsif sign then syso p1 p2 elsif sign t...

oracle觸發器和儲存過程

一 觸發器分為行級觸發和語句級觸發器,for each now 行級觸發起 基本語法為 create or replace trigger tri name before insert on table name for each now begin select sysdate into new....