返回顶部
分享到

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

oracle 来源:互联网 作者:佚名 发布时间:2025-10-16 21:24:21 人浏览
摘要

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

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

1. 授予alter system权限

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

1

GRANT ALTER SYSTEM TO <username>;

2. 创建存储过程

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

-- 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了谁,视需要而定。

创建审计表

1

2

3

4

5

6

7

8

9

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)

);

创建存储过程

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

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;

/

运行方法同上~


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Oracle授予普通用户kill session权限的方法
    开发A在测试环境操作时有时会遇到阻塞问题,需要找DBA帮忙查看阻塞会话及kill session,后来觉得太麻烦想要个kill会话的权限,查了下Oracl
  • Oracle日期时间查询方式
    一、查询近一个月的数据 如果是月份的话,oracle中可以使用add_months()函数来实现,如: 1 ADD_MONTHS(sysdate,-1) = CREATE_DATE 表示创建日期 CREATE_
  • Oracle登录时忘记用户名或密码该怎么解决
    (注意:Oracle12c规定用户名都必须以C##开头,否则无法使用。) 1.用户名:sys密码:change_on_install或者manager as sysdba 2.用户名:system密码:manager
  • Oracle记录登录用户IP的方法
    在运维场景中,在定位到某个SQL引起系统故障之后,想知道是哪台机器发过来的,方便定位源头,该如何解决? 在 Oracle 数据库中记录登录
  • 使用Oracle通过gateway连接MSSQL的流程

    使用Oracle通过gateway连接MSSQL的流程
    环境概述 某医院的his系统Oracle数据库要和体检系统进行数据通讯,需要从Oracle能查到sqlserver的数据。本次通过Oracle gateway来解决此问题。
  • oracle数据库被锁定的解除方案介绍

    oracle数据库被锁定的解除方案介绍
    oracle数据库被锁定如何解除 使用以下SQL语句查询Oracle被锁定的表 1 2 SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects b, v$ses
  • Oracle锁表处理方式介绍
    Oracle锁表处理 1.查看被锁的表 1 2 3 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id 2.查看锁表
  • oracle临时表WITH AS用法介绍
    临时表分类 oracle临时表分为会话级临时表和事务级临时表; 会话级的临时表只与当前会话相关,只要当前会话还存在,临时表中的数据就还
  • oracle的sqlnet.ora文件配置传输加密算法介绍
    oracle的sqlnet.ora文件配置传输加密算法 sqlnet.ora文件位于ORACLE_HOME/network/admin目录中。 sqlnet.ora文件中增加如下: 1 2 3 4 SQLNET.ENCRYPTION_SERVER = R
  • Linux服务器下oracle实现rman自动备份的方式
    为确保oracle数据库数据的安全和一致性,一般我们都需要利用备份手段进行数据库的备份。在oracle数据库中,rman因其强大的功能和完善的手
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计