Oracle 每个session的限制,限制oracle普通用户能且只能kill自己的会话

声明:

仅用于测试环境方便调试,不可能应用于生产环境;故请勿加入到程序源代码来实现自动杀进程。

只需一个参数,就能kill用户自己的会话,请小心操作,以免误kill进程。

使用方法:

新开一个session后,执行

EXEC SYS.P_KILL_USER_SESSION(要杀的会话的sid);

就能实现sys用户才能操作的alter system kill session(sid,serial#);

例子:04:14:46 sql1>exec sys.p_kill_user_session(2525);

目的:

一般用户在不具备执行alter system权限的前提下,对于自己的所有session,能达到alter system kill session功能。

原理:

普通用户先根据(自己的)username和要kill的session的sid查找到这个session的(sid,serial#);再把这两个变量传到另一个存储过程P_KILL_SESSION,该存储过程中sys用户会亲自执行alter system kill session (sid,serial#);从而杀掉session。

背景知识:

sid是唯一的,不会重复;假设登录了A用户,意图要kill user A的会话,结果输入了user B的sid,则在查找(sid,serial#)时,因为限制了username=A and sid=输入的sid,则会返回0条记录。从而限制了只能kill当前操作用户的session。

实施步骤:

1.sys用户先建立procedure

存储过程P_KILL_SESSION

CREATE OR REPLACE PROCEDURE P_KILL_SESSION(P_USER IN VARCHAR2,

P_SID  IN VARCHAR2) AS

V_SQL VARCHAR2(32767);

BEGIN

SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || ''''

INTO V_SQL

FROM V$SESSION

WHERE USERNAME = P_USER

AND SID = P_SID;

EXECUTE IMMEDIATE V_SQL;

EXCEPTION

WHEN NO_DATA_FOUND THEN

RAISE_APPLICATION_ERROR(-20001,

'SID:' || P_SID ||

' DOES NOT EXISTS, OR THE SESSION USER IS NOT ' ||

P_USER);

END;

存储过程P_KILL_USER_SESSION

CREATE OR REPLACE PROCEDURE P_KILL_USER_SESSION(P_SID IN NUMBER) AUTHID CURRENT_USER AS

V_USERNAME VARCHAR2(30);

V_SID      NUMBER;

BEGIN

SELECT SYS_CONTEXT('USERENV', 'SESSION_USER'),

SYS_CONTEXT('USERENV', 'SID')

INTO V_USERNAME, V_SID

FROM DUAL;

IF P_SID != V_SID THEN

P_KILL_SESSION(V_USERNAME, P_SID);

ELSE

RAISE_APPLICATION_ERROR(-20000, 'CAN NOT KILL CURRENT SESSION!');

END IF;

END;

2.sys再grant执行存储过程的权限给用户

GRANT EXECUTE ON P_KILL_USER_SESSION TO  JF_ISU;

3.获得授权的用户根据会话的sid就可以杀自己的任何session了;

exec sys.p_kill_user_session(sid);

验证

在服务器srcbdc建立3个会话;2个JF_ISU用户sql1=(3012,751),sql2=(1070,469)1个system用户(其它用户)

会话1

04:14:22 192.168.210.65:1521/SRCBFIN@JF_ISU> set sqlp 'sql1>'

04:14:30 sql1>col sys_context('userenv','session_user') for a50;

04:14:46 sql1>col sys_context('userenv','sid') for a50;

04:14:46 sql1>select sys_context('userenv','session_user') ,sys_context('userenv','sid') from dual;

SYS_CONTEXT('USERENV','SESSION_USER')              SYS_CONTEXT('USERENV','SID')

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

JF_ISU                                             3012

会话2

04:14:52 192.168.210.65:1521/SRCBFIN@JF_ISU> set sqlp 'sql2>'

04:14:59 sql2>col sys_context('userenv','session_user') for a50;

04:15:01 sql2>col sys_context('userenv','sid') for a50;

04:15:01 sql2>select sys_context('userenv','session_user') ,sys_context('userenv','sid') from dual;

SYS_CONTEXT('USERENV','SESSION_USER')              SYS_CONTEXT('USERENV','SID')

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

JF_ISU                                             1070

会话3

04:15:05 192.168.210.65:1521/SRCBFIN@SYSTEM> set sqlp 'system3>';

04:15:23 system3>col sys_context('userenv','session_user') for a50;

04:15:30 system3>col sys_context('userenv','sid') for a50;

04:15:30 system3>select sys_context('userenv','session_user') ,sys_context('userenv','sid') from dual;

SYS_CONTEXT('USERENV','SESSION_USER')              SYS_CONTEXT('USERENV','SID')

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

SYSTEM                                             2525

04:15:30 system3>

04:15:32 system3>select sid,serial#,username,type,program,machine from v$session where machine like '%srcbdc%';

SID    SERIAL# USERNAME                       TYPE       PROGRAM                                          MACHINE

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

1070        469 JF_ISU                         USER       sqlplus@srcbdc (TNS V1-V3)                       srcbdc

2525        511 SYSTEM                         USER       sqlplus@srcbdc (TNS V1-V3)                       srcbdc

3012        751 JF_ISU                         USER       sqlplus@srcbdc (TNS V1-V3)                       srcbdc

安全限制测试:

u JF_ISU不能kill其它用户的会话;(JF_ISU无法kill system用户的)

04:14:46 sql1>exec sys.p_kill_user_session(2525);

BEGIN sys.p_kill_user_session(2525); END;

*

ERROR at line 1:

ORA-20001: SID? 2525 DOES NOT EXISTS, OR THE SESSION USER IS NOT JF_ISU

ORA-06512: at "SYS.P_KILL_SESSION", line 12

ORA-06512: at "SYS.P_KILL_USER_SESSION", line 10

ORA-06512: at line 1

u JF_ISU不能kill当前session;

04:16:29 sql1>exec sys.p_kill_user_session(3012);

BEGIN sys.p_kill_user_session(3012); END;

*

ERROR at line 1:

ORA-20000: CAN NOT KILL CURRENT SESSION!

ORA-06512: at "SYS.P_KILL_USER_SESSION", line 12

ORA-06512: at line 1

u 未获得存储过程执行权限的用户不能调用该存储过程。

04:15:41 system3>exec sys.p_kill_user_session(3012);

BEGIN sys.p_kill_user_session(3012); END;

*

ERROR at line 1:

ORA-06550: line 1, column 7:

PLS-00201: identifier 'SYS.P_KILL_USER_SESSION' must be declared

ORA-06550: line 1, column 7:

PL/SQL: Statement ignored

基本测试:

JF_ISU能kill除当前session之外的自己的所有会话(且该用户不具备alter system权限);

04:16:38 sql1>exec sys.p_kill_user_session(1070);

PL/SQL procedure successfully completed.

04:17:16 sql1>

04:17:18 sql1>select * from session_privs; (实际上只需要有create session并获得exec on procedure p_kill_user_session即可完成)

PRIVILEGE

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

CREATE SESSION

UNLIMITED TABLESPACE

CREATE TABLE

SELECT ANY TABLE

CREATE CLUSTER

CREATE SYNONYM

CREATE VIEW

CREATE SEQUENCE

SELECT ANY SEQUENCE

CREATE DATABASE LINK

CREATE PROCEDURE

CREATE TRIGGER

CREATE TYPE

CREATE OPERATOR

CREATE INDEXTYPE

SELECT ANY DICTIONARY

DEBUG CONNECT SESSION

DEBUG ANY PROCEDURE

18 rows selected.

04:17:44 sql1>

04:15:01 sql2>select sys_context('userenv','session_user') ,sys_context('userenv','sid') from dual;

select sys_context('userenv','session_user') ,sys_context('userenv','sid') from dual

*

ERROR at line 1:

ORA-00028: your session has been killed

附录:

查看当前session信息,要对视图v$session有select权限才能获得serial#,

col username for A10;

sql1>select sid,serial#,username from v$session where sid=(select sys_context('userenv','sid') from dual);

SID    SERIAL# USERNAME

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

1457          3 JF_ISU

04:43:18 sql1>select * from user_role_privs;

USERNAME                       GRANTED_ROLE                   ADM DEF OS_

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

JF_ISU                         CONNECT                        NO  YES NO

JF_ISU                         RESOURCE                       NO  YES NO

04:43:24 sql1>

04:43:25 sql1>select * from role_sys_privs;

ROLE                           PRIVILEGE                                ADM

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

CONNECT                        CREATE SESSION                           NO

RESOURCE                       CREATE CLUSTER                           NO

RESOURCE                       CREATE SEQUENCE                          NO

RESOURCE                       CREATE TRIGGER                           NO

RESOURCE                       CREATE TABLE                             NO

RESOURCE                       CREATE PROCEDURE                         NO

RESOURCE                       CREATE TYPE                              NO

RESOURCE                       CREATE OPERATOR                          NO

RESOURCE                       CREATE INDEXTYPE                         NO

9 rows selected.

04:43:34 sql1>

04:43:35 sql1>select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM

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

JF_ISU                         SELECT ANY DICTIONARY                    NO

JF_ISU                         CREATE SEQUENCE                          NO

JF_ISU                         DEBUG CONNECT SESSION                    NO

JF_ISU                         CREATE TYPE                              NO

JF_ISU                         CREATE VIEW                              NO

JF_ISU                         SELECT ANY TABLE                         NO

JF_ISU                         CREATE DATABASE LINK                     NO

JF_ISU                         CREATE TABLE                             NO

JF_ISU                         UNLIMITED TABLESPACE                     NO

JF_ISU                         CREATE TRIGGER                           NO

JF_ISU                         CREATE SYNONYM                           NO

JF_ISU                         DEBUG ANY PROCEDURE                      NO

JF_ISU                         SELECT ANY SEQUENCE                      NO

13 rows selected.

04:43:43 sql1>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hessian简介

Hessian Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据目 录 1介绍 1.1 注意事…

linux 以某个用户执行,Linux root用户肿么以制定的用户去执行某个程序。

chmod o-x m1说明:命令格式:chmod [options] mode files只能文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以who opcode permission形式表示。who是可选的,默认是a(所有用户)。只能选择一个opcode(操作码)。可指…

linux启动sh文件命令,Linux下如何写 .sh 脚本启动 项目

Linux下如何写 .sh 脚本启动 项目创建文件 mealcoupon.sh内容如下:#!/bin/bash#这里可替换为你自己的执行程序,其他代码无需更改APP_NAMExhqy_yzf-1.0.0.war#项目的路径(替换成你项目的路径)PROJECT_LOCATION/home/xpro/xhqy_jt#使用说明,用…

[wikioi]奇怪的梦境

http://wikioi.com/problem/2833/ 拓扑排序&#xff0c;居然1A&#xff0c;哈哈。 #include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <memory.h> #define MAX(a, b) a>b?a:b…

linux所有用户无法登录用户名和密码错误,为什么linux登录不了啊,用户名和密码都没问题,就是出现这个,有高手指点一下。...

为什么linux登录不了啊&#xff0c;用户名和密码都没问题&#xff0c;就是出现这个&#xff0c;有高手指点一下。关注:121 答案:6 mip版解决时间 2021-02-04 23:27提问者删除记忆里的你2021-02-04 04:27最佳答案二级知识专家那年夏天2021-02-04 05:19用户名肯定是root&#x…

Notes of the scrum meeting(2013/10/23)

ps&#xff1a;本来是10月23号周三下午开的会&#xff0c;这几天由于各种事情忙&#xff0c;忘记写博客了&#xff0c;现在补上。 软工项目组buaa_smile开始项目第一次scrum meeting meeting time:4:00~5:00p.m.,October 23th,2013 meeting place:主M202 attendees: 顾育豪 …

linux查用户的家目录,详解Linux误删用户家目录的恢复方法

在生产中可能会由于误操作而删除了某一用户的家目录&#xff0c;这时就需要把用户的家目录安装创建新用户时的模板文件&#xff0c;再恢复并且要跟之前的权限相同。1. 创建一个新的用户用于测试[rootcentos6 aubin]# useradd wangcai2. 新用户创建完成时会在/home下面自动创建同…

linux spring mvc tomcat配置,Spring MVC配置详解

一、Spring MVC处理流程1.Spring MVC将所有请求都交由DispatchServlet进行处理。2.DispatchServlet获取HandlerMapping(处理映射器)&#xff0c;然后找到对应的HandlerBean处理Controller请求&#xff0c;并返回一个ModelAndView对象。3.DispatchServlet查询一个或多个ViewReso…

这段时

这段时间通过与大家一起努力与研究&#xff0c;用新的技术框架重新构建了某集团销售统计系统。在这里总结一下项目心得。 技术—— EasyUI更好前端设计&#xff0c;通过json生成相应UI组件。并且风格统一大方&#xff0c;比较好的支持异步调用。MVC更好的将显示与控制分离&…

如何在linux里面运行ncl,NCL基础讲解(二)——NCL安装与运行

NCL基础讲解(二)——NCL安装与运行兰溪之水2015-11-04上一期已经给大家简单介绍了NCL的基本情况&#xff0c;既然NCL在科学数据分析和可视化方面有那么多优点&#xff0c;那还等什么&#xff0c;让我们一起“用”起来吧&#xff01;这一期给大家介绍NCL的安装与运行。关于NCL的…

C#值类型和引用类型的不同

1 C#中有两种类型&#xff1a; 值类型和引用类型&#xff1a; 值类型的变量直接包含他们的数据&#xff0c;引用类型存储对他们的数据的引用&#xff0c;后者称为对象&#xff1a; 简单说:值类型直接存储其值,引用类型存储对值得引用.引用类型分为引用和引用的对象。2…

linux malloc命令,减少 curl 中内存分配操作(malloc)

今天我在 libcurl 内部又做了一个小改动&#xff0c;使其做更少的 malloc。这一次&#xff0c;泛型链表函数被转换成更少的 malloc (这才是链表函数应有的方式&#xff0c;真的)。研究 malloc几周前我开始研究内存分配。这很容易&#xff0c;因为多年前我们 curl 中就已经有内存…

Linux与Windows中动态链接库的分析与对比

摘要&#xff1a;动态链接库技术实现和设计程序常用的技术&#xff0c;在Windows和Linux系统中都有动态库的概念&#xff0c;采用动态库可以有效的减少程序大小&#xff0c;节省空间&#xff0c;提高效率&#xff0c;增加程序的可扩展性&#xff0c;便于模块化管理。但不同操作…

flume linux 命令,flume启动命令 · Mr.Deng’s Blog

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;突然发现拖了很久的flume启动命令了&#xff0c;今天就简单讲讲flume的启动命令吧。如何启动flumeflume目录以上是安装flume的目录&#xff0c;flume的启动主要是在…

stm32 IAP + APP ==双剑合一

&#xff08;扩展-IAP主要用于产品出厂后应用程序的更新作用&#xff0c;上一篇博文详细的对IAP 升级程序做了详细的分析http://blog.csdn.net/yx_l128125/article/details/12992773&#xff0c;考虑到出厂时要先烧写IAP 再烧写APP应用程序要烧写2次增加工人劳动力基础上写了“…

花旗linux 内核 如何调试,揭秘首个运行在Linux平台的核心银行系统

上个星期社区进行了一场直播&#xff0c;关于“新一代核心银行系统解决方案CBOD”——首个运行在Linux平台的核心银行系统。国外上线Linux核心系统的银行已经不少&#xff0c;例如花旗银行在主机系统上装载了Linux系统&#xff0c;处理所有信用卡交易和认证交易&#xff0c;但国…

360发布穿戴设备“儿童卫士”手环

10月29日下午消息&#xff0c;360今日召开发布会发布“儿童卫士”手环&#xff0c;可随时定位孩子位置&#xff0c;并具备安全区域预警、通话连接等功能。这款手环售价199元&#xff0c;将于12月开始销售。 据360透露&#xff0c;儿童卫士具备三大功能&#xff1a; 一、随时定位…