當前位置:首頁 » 存儲配置 » oracle創建存儲過程的許可權

oracle創建存儲過程的許可權

發布時間: 2022-12-12 10:02:34

『壹』 oracle賦權調用存儲過程

首先,需要resource,connect

grant resource,connect to guest;

然後賦予 執行許可權(對每一個存儲過程授權):
grant execute on cache.xxxxxx to guest

『貳』 oracle 創建存儲過程部分表編譯錯誤是否表空間、許可權不足

你先查看錯誤是什麼啊,好像有個什麼show error的嗎?
有可能是許可權問題,你當前用戶需要獲得該表的使用許可權,你上面列出來的是系統許可權,還有對象的許可權,你針對哪個對象有什麼樣的許可權,需要授權,同樣使用grant 授權,列如:grant select on table to user;記得沒錯就是這樣的。還有就是該用戶也要用相應表空間的使用權,這個就是修改用戶的定義,指定能使用該表空間吧,沒有看參考,提供這些給你參考哈!

『叄』 oracle存儲過程基本語法

一:存儲過程

創建存儲過程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統許可權   

刪除存儲過程,是過程的創建者或者擁有DROP ANY PROCEDURE系統許可權 

修改存儲過程,則只能是過程的創建者或者擁有ALTER ANY PROCEDURE系統許可權的人

執行(或調用)存儲過程,是過程的創建者或是擁有EXECUTE ANY PROCEDURE系統許可權的人或是被擁有者授予EXECUTE許可權的人

1:語法

 1)創建

CREATE[ORREPLACE]PROCEDURE存儲過程名[(參數[IN|OUT|INOUT] 數據類型...)]

{AS|IS}

[說明部分]

BEGIN

可執行部分

[EXCEPTION

錯誤處理部分]

END[過程名];

 說明:

   OR REPLACE 表示如果存在就覆蓋存儲過程

   參數有三種形式:IN、OUT和IN OUT。則默認為IN。

  關鍵字AS也可以寫成IS,後跟過程的說明部分,可以在此定義過程的局部變數。

2)刪除存儲過程:

DROP PROCEDURE 存儲過程名;

3)修改存儲過程:

      ALTER PROCEDURE 存儲過程名 COMPILE; 

4)執行存儲過程

      EXECUTE 模式名.存儲過程名[(參數...)]; 

     或

       BEGIN 

模式名.存儲過程名[(參數...)];

END;

另外:參數可以是變數、常量或表達式

 要其它用戶執行存儲過程須要給其它用戶授權

GRANT EXECUTE ON 存儲過程名 TO 用戶名

 2:參數說明

IN 定義一個輸入參數變數,用於傳遞參數給存儲過程

OUT 定義一個輸出參數變數,用於從存儲過程獲取數據

IN OUT 定義一個輸入、輸出參數變數,兼有以上兩者的功能

 1)參數名 IN 數據類型 DEFAULT 值;

          定義一個輸入參數變數,用於傳遞參數給存儲過程。

          可以是常量、有值變數或表達式

          DEFAULT 關鍵字為可選項,用來設定參數的默認值。如果在調用存儲過程時不指明參數,則參數變數取默認值

          在存儲過程中,輸入變數接收主程序傳遞的值,但不能對其進行賦值。

2)參數名 OUT 數據類型;

          定義一個輸出參數變數,用於從存儲過程獲取數據,即變數從存儲過程中返回值給主程序。

          在調用存儲過程時,主程序的實際參數只能是一個變數,而不能是常量或表達式。

          在存儲過程中,參數變數只能被賦值而不能將其用於賦值,而且必須給輸出變數至少賦值一次。

3)參數名 IN OUT 數據類型 DEFAULT 值; 

          定義一個輸入、輸出參數變數,兼有以上兩者的功能。

          在調用存儲過程時,主程序的實際參數只能是一個變數,而不能是常量或表達式。

          DEFAULT 關鍵字為可選項,用來設定參數的默認值。

          在存儲過程中,變數接收主程序傳遞的值,同時可以參加賦值運算,也可以對其進行賦值。在存儲過程中必須給變數至少賦值一次。

補充:如果省略IN、OUT或IN OUT,則默認模式是IN。 

          調用它時參數個數與位置可以不一致,用以下形式調用:

EXECUTE CHANGE_SALARY(P_RAISE=>80,P_EMPNO=>7788);  //=>運算符左側是參數名,右側是參數表達式

 二:函數

創建函數,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統許可權

刪除函數,需要是函數的創建者或者是擁有DROP ANY PROCEDURE系統許可權的人

修改函數,需要是函數的創建者或者擁有ALTER ANY PROCEDURE系統許可權的人

執行函數,需要是函數的創建者或擁有EXECUTE ANY PROCEDURE系統許可權的人

1:語法

1)創建:

CREATE[ORREPLACE]FUNCTION函數名[(參數[IN] 數據類型...)]

RETURN數據類型

{AS|IS}

[說明部分]

BEGIN

可執行部分

RETURN(表達式)

[EXCEPTION

    錯誤處理部分]

END[函數名];

 說明:

     參數是可選的,但只能是IN類型(IN關鍵字可以省略)。

     在定義部分的RETURN 數據類型,用來表示函數的數據類型,也就是返回值的類型,不可省略。

     在可執行部分的RETURN(表達式),用來生成函數的返回值,其表達式的類型應該和定義部分說明的函數返回值的數據類型一致。在函數的執行部分可以有多個RETURN語句,但只有一個RETURN語句會被執行,一旦執行了RETURN語句,則函數結束並返回調用環境。 

2)刪除

      DROP FUNCTION 函數名;

3)修改

      ALTER PROCEDURE 函數名 COMPILE;

4)執行

      變數名:=函數名(...) 

三:對存儲過程 和 函數的查看(可以通過對數據字典【USER_SOURCE】的訪問來查詢存儲過程或函數的有關信息)

 1:查詢某個存儲過程序內容

select TEXT from user_source WHERE NAME='存儲過程名';

 2:查看數據字殿

DESCRIBE USER_SOURCE ; //命令行中

 3:查看存儲過程的參數

DESCRIBE say_hello; //後面是過程名

 4:查看發生編輯錯誤

SHOW ERRORS ;

 5:查詢一個存儲過程或函數是否是有效狀態(即編譯成功)

SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='過程名';//注意大小寫

VALID表示該存儲過程有效(即通過編譯),INVALID表示存儲過程無效或需要重新編譯。它的狀態會改變,這與它依賴外部表(表刪除修改等操作)有關系

6:查看存儲過程與表的依賴關系

SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='SAY_HELLO';

 說明

NAME為實體名,TYPE為實體類型,REFERENCED_OWNER為涉及到的實體擁有者賬戶,REFERENCED_NAME為涉及到的實體名,REFERENCED_TYPE 為涉及到的實體類型。

問題:

如果一個用戶A被授予執行屬於用戶B的一個存儲過程的許可權,在用戶B的存儲過程中,訪問到用戶C的表,用戶B被授予訪問用戶C的表的許可權,但用戶A沒有被授予訪問用戶C表的許可權,那麼用戶A調用用戶B的存儲過程是失敗的還是成功的呢?答案是成功的。

『肆』 oracle怎麼只給存儲過程授權執行許可權不給看的許可權

存儲過程的相關許可權一共只有兩個,一個是excute許可權,還有一個是debug許可權。
按照你的說法就是只給excute的許可權,不給debug許可權,因為沒試過這樣能不能查看,所以你要自己試驗下才行。

『伍』 在Oracle中創建新用戶,為其授予Grant create procere to userNam許可權,可是在創建存儲過程時,為無效的

你這個過程本身有問題,所以是無效的,因為它編譯無法通過!

『陸』 oracle 存儲過程 許可權問題 PL/SQL: ORA-01031: 許可權不足

許可權不足就是說你還沒有連接到伺服器,或者你連接過了又斷開了,再次連接上了就該不會出現許可權問題。

『柒』 Oracle中如果沒有執行DDL許可權,但是想要自己寫一個存儲過程並執行,是否可以創建一個臨時存儲過程

沒有什麼臨時的存儲過程。。。就好像樓上說的,寫一個程序塊吧。declare 聲明的。
類似於
declare
v_qq varchar2(10);
begin
select 'wqwe' into v_qq from al ;
dbms_output.put_line(v_qq);
end;

這樣的。

『捌』 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的存儲過程中擁有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創建存儲過程

--- 答案補充
1. lixiaoka3這個用戶是不是不存在, 試試CREATE OR REPLACE PROCEDURE xianshi
2. 存儲過程裡面應該不能有單純的select語句存在的, 你的select語句沒有實際用處,即便查詢出來了也看不到.如果要看這個表所有的數據的話,你可以做一個游標,然後把每個欄位都put出來.

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:600
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:892
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:586
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:771
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:690
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1017
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:261
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:120
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:810
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:719