【技巧】如何让普通用户可以杀掉自己用户的会话

1  BLOG文档结构图

2  前言部分

2.1  导读和注意事项

各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:

① 如何让普通用户可以杀掉自己用户的会话(重点)

  Tips:

① 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)有同步更新。

② 文章中用到的所有代码,相关软件,相关资料请前往小麦苗的云盘下载(http://blog.itpub.net/26736162/viewspace-1624453/)。

③ 若网页文章代码格式有错乱,推荐使用360浏览器,也可以下载pdf格式的文档来查看,pdf文档下载地址:http://blog.itpub.net/26736162/viewspace-1624453/,另外itpub格式显示有问题,也可以去博客园地址阅读。

④ 本篇BLOG中命令的输出部分需要特别关注的地方我都用灰色背景和粉红色字体来表示,比如下边的例子中,thread 1的最大归档日志号为33,thread 2的最大归档日志号为43是需要特别关注的地方;而命令一般使用黄色背景和红色字体标注;对代码或代码输出部分的注释一般采用蓝色字体表示。

List of Archived Logs in backup set 11

Thrd Seq     Low SCN    Low Time            Next SCN   Next Time

---- ------- ---------- ------------------- ---------- ---------

1    32      1621589    2015-05-29 11:09:52 1625242    2015-05-29 11:15:48

1    33      1625242    2015-05-29 11:15:48 1625293    2015-05-29 11:15:58

2    42      1613951    2015-05-29 10:41:18 1625245    2015-05-29 11:15:49

2    43      1625245    2015-05-29 11:15:49 1625253    2015-05-29 11:15:53

[ZHLHRDB1:root]:/>lsvg -o

T_XLHRD_APP1_vg

rootvg

[ZHLHRDB1:root]:/>

00:27:22 SQL> alter tablespace idxtbs read write;

====》2097152*512/1024/1024/1024=1G

本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力。

2.2  相关参考文章链接

&  说明:

有关kill session的更多内容可以参考我的blog:http://blog.itpub.net/26736162/viewspace-2121019和http://blog.itpub.net/26736162/viewspace-2121020

2.3  本文简介

普通用户想要杀掉会话必须要有ALTER SYSTEM的权限,但是该权限过大,用户可能使用该权限错杀其它用户的会话,所以,有没有其它办法可以实现该功能呢?该类问题也是DBA中常遇到的问题,下边作者给出一种解决方案。

首先,可以创建一个查询自己会话信息的视图,将该视图创建公共同义词,然后创建一个存储过程,该存储过程实现杀会话的需要,最后将该存储过程赋权给PUBLIC即可解决这个问题。

【这也是小麦苗即将出版的书中的一个小小节,提前分享给大家,o(∩_∩)o ,希望大家到时候多多捧场。】

3  代码分享

代码实现过程如下:

CREATE OR REPLACE VIEW VW_MYOWNERSESSION_LHR

AS

SELECT * FROM V$SESSION WHERE USERNAME = USER;

CREATE OR REPLACE PUBLIC SYNONYM SYN_MYOWNERSESSION_LHR FOR SYS.VW_MYOWNERSESSION_LHR;

CREATE OR REPLACE PROCEDURE PRO_KILL_MYOWN_SESSION_LHR(P_INST    IN NUMBER,

P_SID     IN NUMBER,

P_SERIAL# IN NUMBER) IS

V_IGNORE  PLS_INTEGER;

V_VERSION VARCHAR2(10);

V_INST_ID NUMBER;

BEGIN

SELECT COUNT(*)

INTO V_IGNORE

FROM GV$SESSION D

WHERE USERNAME = USER

AND SID = P_SID

AND SERIAL# = P_SERIAL#

AND D.INST_ID = P_INST;

SELECT SUBSTR(V.VERSION, 1, INSTR(V.VERSION, '.') - 1), V.INSTANCE_NUMBER

INTO V_VERSION, V_INST_ID

FROM V$INSTANCE V;

IF (V_IGNORE = 1) THEN

IF (V_VERSION = '10' AND V_INST_ID <> P_INST) THEN

RAISE_APPLICATION_ERROR(-20001,

'Please connect to 【INSTANCE:' || P_INST ||

'】,then retry!');

ELSIF (V_VERSION = '10' AND V_INST_ID = P_INST) THEN

EXECUTE IMMEDIATE 'ALTER SYSTEM DISCONNECT SESSION ''' || P_SID || ',' ||

P_SERIAL# || ''' IMMEDIATE';

ELSE

EXECUTE IMMEDIATE 'ALTER SYSTEM DISCONNECT SESSION ''' || P_SID || ',' ||

P_SERIAL# || ',@' || P_INST || ''' IMMEDIATE';

END IF;

ELSE

RAISE_APPLICATION_ERROR(-20002,

'You do not own session ''' || P_SID || ',' ||

P_SERIAL# ||',@' || P_INST || '''');

END IF;

END PRO_KILL_MYOWN_SESSION_LHR;

/

CREATE OR REPLACE PUBLIC SYNONYM PRO_KILL_SESSION_LHR FOR SYS.PRO_KILL_MYOWN_SESSION_LHR;

GRANT SELECT ON SYN_MYOWNERSESSION_LHR TO PUBLIC;

GRANT EXECUTE ON PRO_KILL_SESSION_LHR TO PUBLIC;

使用方法:

SELECT USERENV('INSTANCE'),USERENV('SID') FROM DUAL;

SELECT V.INST_ID, SID,SERIAL#,PADDR,STATUS FROM SYN_MYOWNERSESSION_LHR V WHERE SID=1008 AND V.INST_ID=1 ;--假设上一步查询出来的SID为1008,实例号为1

EXEC PRO_KILL_SESSION_LHR(1,1008,35038);--假设上一步查询出来的SERIAL#为35038

3.1  代码演示

3.1.1  使用SYS用户杀PMON进程的会话

SYS@lhrdb21> SELECT A.SID,A.SERIAL#,USERENV('INSTANCE'),USERNAME FROM v$session a WHERE a.PROGRAM LIKE '%PMON%';

SID    SERIAL# USERENV('INSTANCE') USERNAME

---------- ---------- ------------------- ------------------------------

125          1                   1

SYS@lhrdb21> EXEC PRO_KILL_SESSION_LHR(1,125,1);

BEGIN PRO_KILL_SESSION_LHR(1,125,1); END;

*

ERROR at line 1:

ORA-20002: You do not own session '125,1,@1'

ORA-06512: at "SYS.PRO_KILL_MYOWN_SESSION_LHR", line 36

ORA-06512: at line 1

由于系统进程的用户名为空,所以避免了误杀系统进程。

3.1.2  使用SYS用户杀普通用户的会话

SYS@lhrdb21> SELECT A.SID,A.SERIAL#,USERENV('INSTANCE'),USERNAME FROM v$session a WHERE username='LHR';

SID    SERIAL# USERENV('INSTANCE') USERNAME

---------- ---------- ------------------- ------------------------------

79      16453                   1 LHR

SYS@lhrdb21>  EXEC PRO_KILL_SESSION_LHR(1,79,16453);

BEGIN PRO_KILL_SESSION_LHR(1,79,16453); END;

*

ERROR at line 1:

ORA-20002: You do not own session '79,16453,@1'

ORA-06512: at "SYS.PRO_KILL_MYOWN_SESSION_LHR", line 36

ORA-06512: at line 1

SYS@lhrdb21> conn lhr/lhr

Connected.

LHR@lhrdb21> EXEC PRO_KILL_SESSION_LHR(1,79,16453);

PL/SQL procedure successfully completed.

由于79会话属于LHR用户,所以避免了误杀其它用户的会话,当使用LHR用户的时候可以正常杀会话。

3.1.3  使用LHR用户杀其它用户的会话

LHR@lhrdb21> SELECT A.SID,A.SERIAL#,USERENV('INSTANCE'),USERNAME FROM v$session a WHERE username='LHRTEST';

SID    SERIAL# USERENV('INSTANCE') USERNAME

---------- ---------- ------------------- ------------------------------

142      12947                   1 LHRTEST

LHR@lhrdb21> EXEC PRO_KILL_SESSION_LHR(1,142,12947);

BEGIN PRO_KILL_SESSION_LHR(1,142,12947); END;

*

ERROR at line 1:

ORA-20002: You do not own session '142,12947,@1'

ORA-06512: at "SYS.PRO_KILL_MYOWN_SESSION_LHR", line 36

ORA-06512: at line 1

普通用户LHR也不能杀掉其它用户LHRTEST的会话。

  About Me

...............................................................................................................................

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/viewspace-2124932/

● 本文博客园地址:http://www.cnblogs.com/lhrbest/p/5869495.html

● 本文pdf版:http://yunpan.cn/cdEQedhCs2kFz (提取码:ed9b)

● 小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● QQ群:230161599     微信群:私聊

● 联系我请加QQ好友(642808185),注明添加缘由

● 于 2016-09-13 10:00~ 2016-09-13 11:20 在中行完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解!

● 【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】

...............................................................................................................................

手机长按下图识别二维码或微信客户端扫描下边的二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,免费学习最实用的数据库技术。

【技巧】如何让普通用户可以杀掉自己用户的会话相关推荐

  1. 如何充分利用开源项目_5个技巧:在开源项目中利用以用户为中心的设计

    如何充分利用开源项目 当我刚开始在开放技术学院 (OTI)工作时,我始终受到以下问题的挑战:"为什么UX设计师为什么要在开源组织工作?" 在我看来,事实是几乎所有设计和可用性工作本 ...

  2. it 决策者用户_了解最终用户的安全决策

    it 决策者用户 A look at mental models and risk communication to better understand the security decisions ...

  3. Linux常用命令(中)、时间日期类、date 显示当前时间、ntpdate命令、cal 查看日历、useradd 添加新用户、passwd 设置用户密码、id 查看用户是否存在

    文章目录 1.3 时间日期类 1.3.1 date 显示当前时间 1.3.2 date 显示非当前时间 1.3.3 date 设置系统时间 1.3.4ntpdate命令 ntpdate常用服务器 国内 ...

  4. ubuntu修改新增用户的目录_Ubuntu 18.04下创建新用户/目录、修改用户权限及删除用户的方法...

    以下介绍在Ubuntu 18.04系统下创建新用户/目录.修改用户权限及删除用户的正确方法.在Ubuntu系统上创建新用户使用[sudo useradd 用户名]命令,但只能创建用户,不能在/home ...

  5. Linux用户配置密码,linux用户配置文件passwd和密码配置文件shadow,用户管理,组管理...

    一.linux和windows互传文件 1.安装支持包:lrzszyum -y install   lrzszputty工具 不支持lrzsz 2.rz windows文件fail2ban-0.8.1 ...

  6. unix实际用户ID和有效用户ID解析

    源文:http://blog.csdn.net/guosha/article/details/2679334 看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念 ...

  7. SEO系列二:何为用户体验?如何做好用户体验?

    昨天写了一篇<SEO系列一:SEO是什么?SEO有什么意义?>的文章,受到了汇道童鞋们的支持和鼓舞,周珍在这里和大家说声谢谢.甚至还有童鞋说期待我写到SEO系列2000,是否能写到2000 ...

  8. redhat linux新建用户,linux redhat 添加用户

    id ###查看用户信息 id -u  ###查看用户uid -g   ###查看用户所在组id -a   ### 查看用户所有信息 -G###查看用户所在所有组id(包括所有历史组) -un ### ...

  9. asp.net mvc 4 AntiForgery 提供的防伪标记适用于用户“”,但当前用户为“XX” 问题处理记录...

    情景:    某页面未登录下可以访问,但具体操作时发现未登录就弹出登录窗,待完成登录后继续操作. 当登录成功,前端继续操作(post后端接口)时发现以下错误:   提供的防伪标记适用于用户" ...

最新文章

  1. python函数拟合不规则曲线_python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...
  2. 函数用计算机代码,用main函数传参做简单的计算器的代码
  3. python 虚拟环境 virtualenv virtualenvwrapper的使用方法、命令
  4. Fiddler设置抓一个域名下个包
  5. easywechat报错:Failed to cache access token
  6. Android Studio 打开activity_main.xml不能正常显示
  7. 【BZOJ1030】【Tyvj1806】文本生成器,AC自动机+DP
  8. unix和linux的区别
  9. Java 找到并返回一组字符串中第一个不为空的字符串
  10. 一元多项式的相加(单链表的应用)
  11. java朗控点异常_Java语言基础(day_04)
  12. Mysql远程连接报错2003 Cant connect toMySQL server on your address解决方案
  13. [译]Flask教程--Cookie
  14. linux 磁盘管理三部曲——(1)磁盘结构,认识分区
  15. 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn
  16. c语言void nzp,二级C语言考试辅导教程第五章:函数[5]
  17. 微型计算机原理小闹钟,微机原理课程设计_电子钟的设计.doc
  18. **Gcc编译器报错:gcc -m32报错**
  19. 【数据技术】关于HP Vertica MPP列式数据库资源池设置的一点心得
  20. Excel如何制作人形条形图

热门文章

  1. JavaScript 的使用简单总结
  2. mysql unix 安装教程_在UNIX系统下安装MySQL_MySQL
  3. 在工作中有被动转主动的体会_积极主动应对眼前的一切,就是对自己最好的犒赏...
  4. postgresql 编码_开源力量与职业发展 --写给对PostgreSQL有志趣的朋友们
  5. matlab 绘制圆
  6. FPGA的设计艺术(3)静态时序分析
  7. Markdown 编辑器的使用记录 (Typora)
  8. 数字集成电路的层次关系
  9. 安卓系统底层C语言算法之测试参数是几个long型的算法
  10. centos 6.4 更新163源