ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 2106|回复: 6

[原创] 给testuser用户赋予查询并且能解锁的权限

[复制链接]
求职 : 数据库管理员
招聘 : Oracle OCP专职讲师
论坛徽章:
45
祖国60周年纪念徽章
日期:2015-05-19 13:02:04itpub13周年纪念徽章
日期:2014-12-30 09:02:12itpub13周年纪念徽章
日期:2014-12-30 09:02:12BLOG每日发帖之星
日期:2015-08-17 16:57:372015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:242010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:192014数据库大会纪念章
日期:2015-04-23 10:33:19
发表于 2016-1-29 18:24 | 显示全部楼层 |阅读模式
本帖最后由 zcs0237 于 2016-2-1 08:46 编辑

小刚:
    快速出单系统的测试环境数据库10.1.x.x,用户:testuser,是否能给testuser用户赋予查询并且能解锁的权限?方便以后测试。
    谢谢。

求职 : 数据库管理员
招聘 : Oracle OCP专职讲师
论坛徽章:
45
祖国60周年纪念徽章
日期:2015-05-19 13:02:04itpub13周年纪念徽章
日期:2014-12-30 09:02:12itpub13周年纪念徽章
日期:2014-12-30 09:02:12BLOG每日发帖之星
日期:2015-08-17 16:57:372015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:242010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:192014数据库大会纪念章
日期:2015-04-23 10:33:19
 楼主| 发表于 2016-1-29 18:24 | 显示全部楼层
本帖最后由 zcs0237 于 2016-2-1 08:44 编辑

第一部分、配置存储过程

一、procedure
1、创建(本脚本由李瑞龙提供)
create or replace procedure sys.kill_session(in_username in varchar2,
                                             in_sid      in number,
                                             in_serial   in number) as
  v_sid              number;
  v_serial           number;
  v_count            number;
  v_username         varchar2(40);
  v_sql_kill_session varchar2(2000);
begin
  select count(*)
    into v_count
    from v$session
   where username = upper(in_username)
     and sid = in_sid
     and serial# = in_serial
     and username in (upper(in_username));
  select username
    into v_username
    from v$session
   where audsid = SYS_CONTEXT('USERENV', 'SESSIONID');
  if v_count = 1 then
    if upper(in_username) = upper(v_username) then
      v_sid              := in_sid;
      v_serial           := in_serial;
      v_sql_kill_session := 'alter system kill session ' || '''' || v_sid || ',' ||
                            v_serial || '''';
      dbms_output.put_line(chr(10));
      dbms_output.put_line('###############################################');
      dbms_output.put_line('Executing ...' || v_sql_kill_session);
      execute immediate v_sql_kill_session;
      dbms_output.put_line('-----------------Finished----------------------');
      dbms_output.put_line('###############################################');
    else
      dbms_output.put_line(chr(10));
      dbms_output.put_line('###############################################');
      dbms_output.put_line('Error : Do NOT permitted to kill session owned by OTHER user !');
      dbms_output.put_line('###############################################');
    end if;
  else
    dbms_output.put_line(chr(10));
    dbms_output.put_line('###############################################');
    dbms_output.put_line('Error : The session does not exists !');
    dbms_output.put_line('###############################################');
  end if;
end;
/
2、授权
SQL> conn  / as sysdba
SQL> grant execute on sys.kill_session to testuser;


使用道具 举报

回复
求职 : 数据库管理员
招聘 : Oracle OCP专职讲师
论坛徽章:
45
祖国60周年纪念徽章
日期:2015-05-19 13:02:04itpub13周年纪念徽章
日期:2014-12-30 09:02:12itpub13周年纪念徽章
日期:2014-12-30 09:02:12BLOG每日发帖之星
日期:2015-08-17 16:57:372015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:242010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:192014数据库大会纪念章
日期:2015-04-23 10:33:19
 楼主| 发表于 2016-1-29 18:26 | 显示全部楼层
本帖最后由 zcs0237 于 2016-2-16 17:24 编辑

第二部分、限制testuser的alter system权限

SQL> conn / as sysdba
SQL> revoke alter system from testuser;
ORA-01952: system privileges not granted to 'TESTUSER'

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Oracle OCP专职讲师
论坛徽章:
45
祖国60周年纪念徽章
日期:2015-05-19 13:02:04itpub13周年纪念徽章
日期:2014-12-30 09:02:12itpub13周年纪念徽章
日期:2014-12-30 09:02:12BLOG每日发帖之星
日期:2015-08-17 16:57:372015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:242010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:192014数据库大会纪念章
日期:2015-04-23 10:33:19
 楼主| 发表于 2016-1-29 18:26 | 显示全部楼层
本帖最后由 zcs0237 于 2016-2-1 08:43 编辑

第三部分、允许testuser访问v$mystat和v$session

一、允许testuser访问v$mystat视图
SQL> grant select on v_$mystat to testuser;

二、允许testuser访问v$session视图
1、允许testuser访问
v$session视图
SQL> grant select on v_$session to testuser;
2、在testuser下创建v$session同义词
SQL> conn testuser/testuser
SQL> create synonym v$session for sys.v_$session;

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Oracle OCP专职讲师
论坛徽章:
45
祖国60周年纪念徽章
日期:2015-05-19 13:02:04itpub13周年纪念徽章
日期:2014-12-30 09:02:12itpub13周年纪念徽章
日期:2014-12-30 09:02:12BLOG每日发帖之星
日期:2015-08-17 16:57:372015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:242010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:192014数据库大会纪念章
日期:2015-04-23 10:33:19
 楼主| 发表于 2016-1-29 18:26 | 显示全部楼层
本帖最后由 zcs0237 于 2016-2-1 08:44 编辑

第四部分、验证kill_session存储过程

一、testuser的第一个会话
conn testuser/testuser
select distinct(a.sid||','||serial#) from v$session a,v$mystat b where a.sid=b.sid;
-- 1041,52284

二、testuser的第二个会话:去杀第一个会话
SQL> conn testuser/testuser
Connected.
SQL> show user
USER is "TESTUSER"
SQL> exec sys.kill_session('TESTUSER', 1041,52284);      
                           
三、到testuser的第一个会话验证:会话已被杀死
SQL> select distinct(a.sid||','||serial#) from v$session a,v$mystat b where a.sid=b.sid;
ORA-00028: your session has been killed

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Oracle OCP专职讲师
论坛徽章:
45
祖国60周年纪念徽章
日期:2015-05-19 13:02:04itpub13周年纪念徽章
日期:2014-12-30 09:02:12itpub13周年纪念徽章
日期:2014-12-30 09:02:12BLOG每日发帖之星
日期:2015-08-17 16:57:372015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:242010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:192014数据库大会纪念章
日期:2015-04-23 10:33:19
 楼主| 发表于 2016-1-29 18:27 | 显示全部楼层
本帖最后由 zcs0237 于 2016-2-16 17:24 编辑

第五部分、增加其它查询权限

一、查询哪个表被锁了:需增加权限
1、出错
SQL> conn testuser/testuser
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    3  from v$locked_object a,dba_objects b
                       *
ERROR at line 2:
ORA-00942: table or view does not exist
2、授权
SQL> conn / as sysdba
Connected.
SQL> grant  select on sys.v_$locked_object to testuser;
grant select on  SYS.DBA_OBJECTS TO testuser;
3、验证:成功
SQL> 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;
--no rows selected

二、查询是哪个session引起的:有权限
SQL> conn testuser/testuser
select b.username,b.sid,b.serial#,logon_time
                    from v$locked_object a,v$session b
                    where a.session_id = b.sid

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Oracle OCP专职讲师
论坛徽章:
45
祖国60周年纪念徽章
日期:2015-05-19 13:02:04itpub13周年纪念徽章
日期:2014-12-30 09:02:12itpub13周年纪念徽章
日期:2014-12-30 09:02:12BLOG每日发帖之星
日期:2015-08-17 16:57:372015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:242010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:192014数据库大会纪念章
日期:2015-04-23 10:33:19
 楼主| 发表于 2016-1-29 18:33 | 显示全部楼层
--

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表