Oracle授予普通用戶kill session權限的方法
開發(fā)A在測試環(huán)境操作時有時會遇到阻塞問題,需要找DBA幫忙查看阻塞會話及kill session,后來覺得太麻煩想要個kill會話的權限,查了下Oracle授予普通用戶kill session權限的方法。
1. 授予alter system權限
官方文檔查到,kill session需要ALTER SYSTEM權限,但是這個權限非常大,不能直接給
GRANT ALTER SYSTEM TO <username>;
2. 創(chuàng)建存儲過程
后來查到了可以自己創(chuàng)建存儲過程實現(xiàn),簡單的實現(xiàn)方法如下:
-- sys執(zhí)行 create or replace procedure kill_session ( v_sid number, v_serial number ) as v_varchar2 varchar2(100); begin execute immediate 'ALTER SYSTEM KILL SESSION ''' || v_sid || ',' || v_serial || ''''; end; / -- 授權: grant execute on kill_session to username; -- 普通用戶使用: exec sys.kill_session(161,14502);
還能加各種限制條件,例如寫入日志,記錄是誰在什么時候發(fā)起的、kill了誰,視需要而定。
創(chuàng)建審計表
CREATE TABLE action_audit ( id NUMBER GENERATED ALWAYS AS IDENTITY, operator_name VARCHAR2(50) NOT NULL, action_time TIMESTAMP NOT NULL, session_id NUMBER(10) NOT NULL, serial_id NUMBER(10) NOT NULL, sql_id VARCHAR2(13), CONSTRAINT action_audit_pk PRIMARY KEY (id) );
創(chuàng)建存儲過程
CREATE OR REPLACE PROCEDURE kill_session (
p_session_id NUMBER,
p_serial_id NUMBER
) AS
v_sql_id VARCHAR2(13);
BEGIN
SELECT s.sql_id INTO v_sql_id FROM v$session s WHERE s.sid = p_session_id AND s.serial# = p_serial_id;
EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || p_session_id || ',' || p_serial_id || ''' IMMEDIATE';
INSERT INTO action_audit (
operator_name,
action_time,
session_id,
serial_id,
sql_id
) VALUES (
sys_context('userenv','os_user'),
CURRENT_TIMESTAMP,
p_session_id,
p_serial_id,
v_sql_id
);
commit;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, 'Error in killing session: ' || SQLERRM);
END;
/運行方法同上~
到此這篇關于Oracle授予普通用戶kill session權限的方法的文章就介紹到這了,更多相關Oracle授予普通用戶kill權限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SQL中Charindex和Oracle中對應的函數(shù)Instr對比
在項目中用到了Oracle中 Instr 這個函數(shù),順便仔細的再次學習了一下這個知識,使用 Instr 函數(shù)對某個字符串進行判斷,判斷其是否含有指定的字符2013-10-10
Oracle管道函數(shù)pipelined?function的用法小結
這篇文章主要介紹了Oracle管道函數(shù)pipelined?function的用法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
WINDOWS下使用DOS命令行連接oracle數(shù)據(jù)庫
本文講述了通過windows下的DOS命令連接oracle數(shù)據(jù)庫并進行簡單操作的方法2018-03-03
oracle數(shù)據(jù)庫如何使用exp和imp命令導入導出數(shù)據(jù)
這篇文章主要給大家介紹了關于oracle數(shù)據(jù)庫如何使用exp和imp命令導入導出數(shù)據(jù)的相關資料,Oracle的EXP(Export)和 IMP(Import)是兩個非常重要的命令,它們用于數(shù)據(jù)庫的備份和恢復,需要的朋友可以參考下2024-07-07

