oracle存儲過程授權
『壹』 怎樣授權存儲過程給另外一個用戶
一般是對於存儲過程授執行權權
Grant execute on procere_name to user1;
如果要求被授權用戶也能夠授權給其它用戶:
grant execute on procere_name to user1 with grant option;
數據存儲是數據流在加工過程中產生的臨時文件或加工過程中需要查找的信息。數據以某種格式記錄在計算機內部或外部存儲介質上。數據存儲要命名,這種命名要反映信息特徵的組成含義。
『貳』 如何在Oracle的存儲過程中擁有role許可權
很多人都有這樣的了解,用戶擁有的role許可權在存儲過程是不可用的。示例:
SQL> select * from dba_role_privs where grantee='SUK';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
--------- ------------ ------------ ------------
SUK DBA NO YES
SUK CONNECT NO YES
SUK RESOURCE NO YES
用戶SUK擁有DBA這個role.
下面我們繼續創建一個測試存儲過程:
create or replace procere p_create_table
is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
測試:
SQL> exec p_create_table;
begin p_create_table; end;
ORA-01031: 許可權不足
ORA-06512: 在"SUK.P_CREATE_TABLE", line 3
ORA-06512: 在line 1
可以看到,即使擁有DBA role,也不能創建表。role在存儲過程中不可用。
遇到
這種情況,我們一般需要顯式進行系統許可權,如grant create table to suk;
但這種方法太麻煩,有時候可能需要進行非常多的授權才能執行存儲過程
實際上,oracle給我們提供了在存儲過程中使用role許可權的方法:
修改存儲過程,加入Authid Current_User時存儲過程可以使用role許可權。
create or replace procere p_create_table
Authid Current_User is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
然後繼續嘗試執行:
SQL> exec p_create_table;
PL/SQL procere successfully completed
至此即可以執行了。
『叄』 如何在oracle中指定某個存儲過程的修改、執行許可權給另一用戶
不能調用存儲過程,調用存儲過程需要execute any procere 許可權才行。
CONNECT角色: --是授予最終用戶的典型權利,最基本的
ALTER SESSION --修改會話
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立資料庫鏈接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立會話
CREATE SYNONYM --建立同義詞
CREATE VIEW --建立視圖
『肆』 oracle怎麼只給存儲過程授權執行許可權不給看的許可權
存儲過程的相關許可權一共只有兩個,一個是excute許可權,還有一個是debug許可權。
按照你的說法就是只給excute的許可權,不給debug許可權,因為沒試過這樣能不能查看,所以你要自己試驗下才行。
『伍』 oracle怎麼給存儲過程賦增加表的許可權
GRANT說明:
名稱
GRANT — 賦予一個用戶,一個組或所有用戶訪問許可權
GRANT privilege [, ...] ON object [, ...] TO { PUBLIC | GROUP group | username }
輸入
privilege 可能的許可權有:
SELECT:訪問聲明的表/視圖的所有列/欄位.
INSERT:向聲明的表中插入所有列欄位.
UPDATE:更新聲明的所有列/欄位.
DELETE:從聲明的表中刪除所有行.
RULE: 在表/視圖上定義規則 (參見 CREATE RULE 語句).
ALL: 賦予所有許可權.
object 賦予許可權的對象名.可能的對象是:
* table (表)
* view (視圖)
* sequence (序列)
* index (索引)
PUBLIC:
代表是所有用戶的簡寫.
GROUP group:
將要賦予許可權的組 group .目前的版本中,組必須是用下面方法顯式創建的.
username:
將要賦予許可權的用戶名.PUBLIC 是代表所有用戶的簡寫.
輸出
CHANGE: 如果成功,返回此信息.
ERROR: ChangeAcl: class "object" not found
如果所聲明的對象不可用或不可能對聲明的組或用戶賦予許可權.
『陸』 oracle中如何給用戶賦予在存儲過程里查詢所有表的許可權
不要通過角色來獲得select any table的許可權,直接給用戶授予select any table的許可權。
『柒』 oracle怎麼存儲過程賦權修改
DROP ANY PROCEDURE
EXECUTE ANY PROCEDURE
ALTER ANY PROCEDURE
CREATE ANY PROCEDURE
CREATE PROCEDURE
DEBUG ANY PROCEDURE
『捌』 oracle存儲過程執行許可權和表修改許可權無關
不能!
除非你的存儲過程中定義了
CREATE OR REPLACE procere XXXXX AUTHID CURRENT_USER AS.
你可以這樣去想,如果存儲過程是張三的,表也是張三的,那麼李四進去後,修改的是李四下面的table001還是張三下面的table001呢?所以,除非他有張三的許可權才行
『玖』 oracle賦權調用存儲過程
首先,需要resource,connect
grant resource,connect to guest;
然後賦予 執行許可權(對每一個存儲過程授權):
grant execute on cache.xxxxxx to guest
『拾』 oracle 測試存儲過程 是哪個許可權
Oracle規定,在默認的情況下,在調用存儲過程用戶的角色不起作用,即在執行存儲過程時只有Public許可權。所以在調用Create table時,會有許可權不足的提示。
只需要使用IR Procere就能很快解決問題啦,把代碼修改為如下:
CREATE OR REPLACE PROCEDURE TestProc AUTHID current_user
IS
flag number;
BEGIN
select count(*) into flag from all_tables where table_name='TEMP3';
if (flag=0) then
execute immediate 'create global temporary table TEMP3 on commit preserve rows as select * from BUSI_ECONTRACT';
else
execute immediate 'insert into TEMP3 select * from BUSI_ECONTRACT';
end if;
END ;
執行存儲過程,順利通過。