【发布时间】:2020-07-01 02:47:30
【问题描述】:
在没有 DBA 权限的情况下,用户是否可以终止自己的会话/连接?
具体来说,我可以在没有管理员权限的情况下在我的数据库中运行它:
SELECT SID, "SERIAL#", STATUS, USERNAME
FROM V$SESSION
WHERE
(USERNAME = 'LastF')
AND
(STATUS = 'INACTIVE');
但是当我去终止我的孤立会话(从另一个我仍然可以访问的会话)时,
ALTER SYSTEM KILL SESSION "12, 123"
我得到以下信息:
JDBC ERROR: ORA-01031: insufficient privileges
注意:我通过 R/Rstudio 使用 RJDBC 包连接 JDBC。
动机:
在 Oracle SQL 中终止会话似乎并不难:
https://docs.oracle.com/cd/B28359_01/server.111/b28310/manproc008.htm#ADMIN11192
How can I kill all sessions connecting to my oracle database?
但是,对于具有孤立连接(即互联网中断、管理连接错误的第 3 方客户端等)的非 DBA 用户来说,获得以下信息可能会非常令人沮丧:
ORA-02391 exceeded simultaneous SESSIONS_PER_USER limit
并且必须等待超时。
【问题讨论】:
-
关于在此处执行此操作的好文章dba-oracle.com/t_granting_alter_system_kill_session.htm 但简而言之,要么让 DBA 编写一个将终止会话的过程(使用适当的安全保护)并在该过程上授予执行权限,要么让他们授予 ALTER SESSION (我在所有开发数据库上都有这个,肯定不会在 PROD 上授予)
-
@ShaunPeterson - 我猜你的意思是 ALTER SYSTEM? ALTER SESSION 与杀死会话无关。
-
@mathguy 是的,你是对的,谢谢你接受这个。
标签: sql r oracle jdbc database-administration