Oracle授予普通用户kill session权限的方法

 更新时间:2025年10月16日 10:16:47   作者:Hehuyi_In  
本文介绍在Oracle数据库中如何为普通用户授予killsession权限,通过创建存储过程并结合审计表,实现对阻塞会话的安全管理和记录,提供具体SQL语句及运行方法,需要的朋友可以参考下

开发A在测试环境操作时有时会遇到阻塞问题,需要找DBA帮忙查看阻塞会话及kill session,后来觉得太麻烦想要个kill会话的权限,查了下Oracle授予普通用户kill session权限的方法。

1. 授予alter system权限

官方文档查到,kill session需要ALTER SYSTEM权限,但是这个权限非常大,不能直接给

GRANT ALTER SYSTEM TO <username>;

2. 创建存储过程

后来查到了可以自己创建存储过程实现,简单的实现方法如下:

-- sys执行
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);

还能加各种限制条件,例如写入日志,记录是谁在什么时候发起的、kill了谁,视需要而定。

创建审计表

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)
);

创建存储过程

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权限内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL中Charindex和Oracle中对应的函数Instr对比

    SQL中Charindex和Oracle中对应的函数Instr对比

    在项目中用到了Oracle中 Instr 这个函数,顺便仔细的再次学习了一下这个知识,使用 Instr 函数对某个字符串进行判断,判断其是否含有指定的字符
    2013-10-10
  • Oracle管道函数pipelined function的用法小结

    Oracle管道函数pipelined function的用法小结

    这篇文章主要介绍了Oracle管道函数pipelined function的用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • WINDOWS下使用DOS命令行连接oracle数据库

    WINDOWS下使用DOS命令行连接oracle数据库

    本文讲述了通过windows下的DOS命令连接oracle数据库并进行简单操作的方法
    2018-03-03
  • Oracle条件判断之IF ELSE的使用方式

    Oracle条件判断之IF ELSE的使用方式

    这篇文章主要介绍了Oracle条件判断之IF ELSE的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • oracle数据库如何使用exp和imp命令导入导出数据

    oracle数据库如何使用exp和imp命令导入导出数据

    这篇文章主要给大家介绍了关于oracle数据库如何使用exp和imp命令导入导出数据的相关资料,Oracle的EXP(Export)和 IMP(Import)是两个非常重要的命令,它们用于数据库的备份和恢复,需要的朋友可以参考下
    2024-07-07
  • Oracle中三种表连接算法的总结

    Oracle中三种表连接算法的总结

    Oracle有三种表连接技术,分别是嵌套连接、合并连接和哈希连接。以下就是对这三种表连接算法进行了详细的分析介绍,需要的朋友可以参考下
    2013-07-07
  • Oracle 11g收集多列统计信息详解

    Oracle 11g收集多列统计信息详解

    我们在写SQL语句的时候,有的时候会碰到where子句后面有多个条件的情况,也就是根据多列的条件筛选得到数据。下面这篇文章主要给大家介绍了Oracle 11g收集多列统计信息的相关资料,文中介绍的非常详细,需要的朋友可以参考下。
    2017-03-03
  • Oracle设置密码永不过期的方法

    Oracle设置密码永不过期的方法

    这篇文章主要介绍了Oracle设置密码永不过期的方法,文中通过代码示例介绍的非常详细,对大家使用Oracle设置密码永不过期有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • Oracle中Spool命令的使用方法实例

    Oracle中Spool命令的使用方法实例

    这篇文章主要给大家介绍了关于Oracle中Spool命令的使用方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 在Oracle表中进行关键词搜索的过程

    在Oracle表中进行关键词搜索的过程

    这篇文章主要介绍了在Oracle表中进行关键词搜索的过程,我们可以通过Oracle SQL Developer或Toad运行PL/SQL块,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06

最新评论