注册
DM如何正确给普通用户授予kill session权限
技术分享/ 文章详情 /

DM如何正确给普通用户授予kill session权限

输入法 2023/02/09 1600 4 2

正常的kill session ,在DM中需要使用sysdba用执行sp_close_session(session_id)
普通用户如何进行这种操作呢?
大致有以下思路:

  • 直接授予sp_close_session----NO ,此路不通,这个对象DM是没有外放出来的,会提示“无效的数据库对象”;
  • 给sp_close_session包装下----可行,操作如下;
create PROCEDURE kill_session(session_id bigint) as BEGIN sp_close_session(session_id); end;

这种做法不足之处,拥有kill_session执行权限的用户可以kill所有用户的session,权限过大;

改进思路,如果不是当前用户自己的session则无法kill(感谢@气可鼓不可泄 提供建议)
最终版为:

--sysdba创建kill_session CREATE OR REPLACE PROCEDURE kill_session(session_id bigint) IS sessid_count INT; e2 EXCEPTION; pragma exception_init (e2,-20096); BEGIN -- 需要增加对用户的判断 SELECT COUNT(1) INTO sessid_count FROM v$sessions WHERE sess_id=session_id AND user_name=USER; IF sessid_count=1 THEN sp_close_session(session_id); ELSE raise e2; END IF; EXCEPTION WHEN e2 THEN PRINT SQLCODE||': SESS_ID('||session_id||') DOES NOT EXISTS, OR THE SESSION USER IS NOT'||USER; END; / --给普通用户授权 grant exec on kill_session to u1; --普通用户登录后进行kill session操作,117798928为session_id sysdba.kill_session(117798928);
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服