查看存儲過程許可權
方法如下:
修改mysql 存儲過程的definer
修改mysql.proc表 的definer欄位
update mysql.proc set definer='root@%' where db='servant_591up'; UPDATE `mysql`.`proc` SET `definer`='root00@%' WHERE `db`='test' AND `name`='jjjj' AND `type`='PROCEDURE'; UPDATE `mysql`.`proc` SET `definer`='wtc_678869@%' WHERE `db`='servant_591up' AND `type`='PROCEDURE';
2.修改sql security
ALTER PROCEDURE www SQL SECURITY INVOKER ; ALTER PROCEDURE www SQL SECURITY DEFINER ;
(1)MySQL存儲過程是通過指定SQL SECURITY子句指定執行存儲過程的實際用戶;
(2)如果SQL SECURITY子句指定為DEFINER,存儲過程將使用存儲過程的DEFINER執行存儲過程,驗證調用存儲過程的用戶是否具有存儲過程的execute許可權和DEFINER用戶是否具有存儲過程引用的相關對象的許可權;
(3)如果SQL SECURITY子句指定為INVOKER,那麼MySQL將使用當前調用存儲過程的用戶執行此過程,並驗證用戶是否具有存儲過程的execute許可權和存儲過程引用的相關對象的許可權;
(4)如果不顯示的指定SQL SECURITY子句,MySQL默認將以DEFINER執行存儲過程。
3.執行存儲過程授權
GRANT EXECUTE ON test.* TO 'wtc'@'%'; GRANT CREATE ROUTINE,ALTER ROUTINE, SELECT,CREATE, INSERT, UPDATE, DELETE, EXECUTE ON test.* TO 'wtc'@'%' IDENTIFIED BY '111111'
CREATE ROUTINE : 創建存儲過程的許可權
ALTER ROUTINE : 修改存儲過程的許可權
4.刪除用戶
REVOKE all ON test.* FROM wtc@'%'
DELETE FROM user WHERE User='user_name' and Host='host_name';
FLUSH PRIVILEGES;
好文要頂關注我
B. 如何實現只授予用戶查看存儲過程定義的許可權
如何授予某個用戶只能查看某些存儲過程的定義許可權,而不能讓用戶去修改、執行存儲過程。看似簡單的問題,卻因為從沒有碰到這樣的需求。花了點時間才梳理、總結清楚。
關於ORACLE賬號的許可權問題,一般分為兩種許可權:
系統許可權: 允許用戶執行特定的資料庫動作,如創建表、創建索引、創建存儲過程等
對象許可權: 允許用戶操縱一些特定的對象,如讀取視圖,可更新某些列、執行存儲過程等
像這種查看存儲過程定義的許可權為對象許可權,但是我們還是首先來看看關於存儲過程的系統許可權吧:
PRIVILEGE NAME PROPERTY--------- ---------------------------------------- -----------140 CREATE PROCEDURE 0-141 CREATE ANY PROCEDURE 0-142 ALTER ANY PROCEDURE 0-143 DROP ANY PROCEDURE 0-144 EXECUTE ANY PROCEDURE 0-241 DEBUG ANY PROCEDURE 0如上所示,關於存儲過程的系統許可權一般有六種: CREATE PROCEDURE、CREATE ANY PROCEDURE、 ALTER ANY PROCEDURE、DROP ANY PROCEDURE、 EXECUTE ANY PROCEDURE、DEBUG ANY PROCEDURE. 那麼關於存儲過程的對象許可權又有那些呢? 如下例子所示,在用戶ESCMUSER下創建存儲過程PROC_TEST
CREATE OR REPLACE PROCEDURE ESCMUSER.PROC_TESTASBEGINDBMS_OUTPUT.PUT_LINE('It is only test');END;使用system用戶創建用戶TEMP,如下所示
SQL> create user temp identified by temp;User created.SQL> grant connect,resource to temp;Grant succeeded.在用戶ESCMUSER下將存儲過程PROC_TEST的所有許可權授予給用戶TEMP。 那麼我們發現存儲過程的對象許可權只有EXECUTE、DEBUG許可權
SQL> COL GRANTEE FOR A12;SQL> COL TABLE_NAME FOR A30;SQL> COL GRANTOR FOR A12;SQL> COL PRIVILEGE FOR A8;SQL> SELECT * FROM USER_TAB_PRIVS_MADE WHERE GRANTEE='TEMP';GRANTEE TABLE_NAME GRANTOR PRIVILEGE GRA HIE---------- --------------------- ------------ --------------------------- --- ---TEMP PROC_TEST ESCMUSER DEBUG NO NOTEMP PROC_TEST ESCMUSER EXECUTE NO NOSQL>將存儲過程PORC_TEST的許可權從TEMP用戶收回,然後授予用戶TEMP關於存儲過程PROC_TEST的DEBUG許可權
SQL>REVOKE ALL ON PROC_TEST FROM TEMP;SQL>GRANT DEBUG ON PROC_TEST TO TEMP;那麼TEMP用戶此時執行存儲過程報許可權不足
SQL> SET SERVEROUT ON;SQL> EXEC escmuser.proc_test;begin escmuser.proc_test; end;ORA-06550: line 2, column 16:PLS-00904: insufficient privilege to access object ESCMUSER.PROC_TESTORA-06550: line 2, column 7:PL/SQL: Statement ignored此時,如果修改存儲過程PROC_TEST就會ORA-01031許可權不足問題。但是你可以在PL/SQL Developer工具或使用下面視圖查看存儲過程的定義。如下所示。
SELECT * FROM ALL_SOURCE WHERE NAME='PROC_TEST'所以,只需要授予存儲過程的DEBUG許可權給某個用戶,就可以實現只授予用戶查看存儲過程定義的許可權,而限制用戶修改、執行存儲過程。從而達到只授權用戶查看存儲過程定義的許可權。不過這樣實現,總讓我感覺有點怪怪的。
C. 在SQL SERVER 2005中如何給某個用戶分配執行存儲過程的許可權
打開 management studio,選擇要操作的資料庫-->安全性-->用戶,選擇用戶,右擊,屬性-->安全類型->添加許可權-->特定類型的所有對象,選擇 存儲過程,點擊確認後,分配可以分配的 許可權,有 control\alter\exeute etc.。之前要創建好用戶,並給予登錄的許可權。
D. oracle存儲過程許可權有哪些
Oracle 存儲過程(Stored Procere)是一段預定義的程序,可以被存儲在資料庫中並在稿指需要時被調用執行。與其他程序一樣,存儲過程需要適當的許可權設置,以便只有授權用戶才能訪問和執行它。下面是 Oracle 存儲過程常用的許可權:
CREATE PROCEDURE 許可權:允許用戶創建存儲過程。
ALTER PROCEDURE 許可權:允許用戶修改已經存在的存儲過程。
EXECUTE 許可權:允許用納敬穗戶執行存儲過程。
DEBUG CONNECT SESSION 許可權:允許用戶調試存儲過程,包括在運行過程中進行斷點調試和監控變數等。
DEBUG ANY PROCEDURE 許可權:允許用戶調試資料庫中任何存儲過程。
DEBUG ANY PROGRAM 許可權:允許用戶調試資料庫中任何程序。
DROP PROCEDURE 許可權:允許用戶刪除已經存在的存儲過程。
需要注意的是,對於存儲過程的許可權設置,應該根據實際情況進行授權,只授予必要的許可權以保證數據的安全性和完整性。例如,只有特定的用戶才能執行存儲過程,而其他用戶無法訪問存儲過程的代碼和洞卜結果。同時,還需要定期檢查資料庫中存儲過程的許可權設置,以確保其符合安全和合規要求。
E. SqlServer 資料庫的存儲過程許可權怎麼設置,只讓用戶查看存儲過程,不讓用戶修改添加刪除存儲過程怎麼做
用ORACLE就可以輕松實現這個安全管理,但是sql server 就不明了 可以嘗試查看SQL SERVER對於許可權的分類的文檔,sql server幫助裡面應該有,用沒有那種只能看不能修改和刪除的操作的許可權