oracle權限相關(存儲過程、JOB)存過必須要加上Authid Current_User is

創建存儲過程一定要加上Authid Current_User is,不然非dba權限其他用戶無法調用該過程

一、存儲過程中創建表沒有權限

 create or replace procedure p_create_table  Authid Current_User is
  begin
  Execute Immediate 'create table create_table(id int)';
  end p_create_table;

查閱資料發現:
Oracle8i以前的版本,所有已編譯存儲對象,包括packages, procedures, functions, triggers, views等,只能以定義者(Definer)身份解析運行;
而Oracle8i及其後的新版本,Oracle引入調用者(invoker)權限,使得對象可以以調用者身份和權限執行。

遇到這種情況,通常解決方法是進行顯式的系統權限: grant create table to eric;
但是,此方法太笨,因爲有可能執行一個存儲過程,需要很多不同權限(oracle對權限劃分粒度越來越細)。
 
最好的方法是,利用 oracle 提供的方法,在創建存儲過程時,加入 Authid Current_User 條件進行權限分配。
 
create or replace procedure p_CreateTable Authid Current_User
as
begin
 execute immediate ''create table test_tb(id number)'';
end p_CreateTable;
/
Procedure created.

 

二、創建和管理JOB沒有權限

oracle中創建job是通過調用dbms_scheduler.create_job來做. 用戶需要能創建job,管理job
對應的權限:
1) create job
2) manager scheduler

相應命令如下:

grant create job to orace_user1;
grant manage scheduler to orace_user1;

發佈了52 篇原創文章 · 獲贊 52 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章