ITPub博客

首页 > 数据库 > Oracle > 用户只有select 权限导致业务无法使用

用户只有select 权限导致业务无法使用

原创 Oracle 作者:xueshancheng 时间:2021-04-30 09:20:43 0 删除 编辑

1 业务场景

   某行业核心业务表不能update,导致业务无法进行,处于等待状态,经查询,是某个运维人员执行了select * from TABLE for update 语句引起的,查看此用户权限,只有创建会话和select table的权限,但为什么会导致锁表,故针对select权限做相关测试。

2  创建测试用户,并授权

SYS@orcl>create user test_select identified by qwe123456;


User created.


SYS@orcl>grant connect to test_select;


Grant succeeded.


SYS@orcl>grant create session to test_select;


Grant succeeded.


SYS@orcl>grant select on test.test1 to test_select;


Grant succeeded.

 3 测试

会话1 执行 select for update 语句:

15:32:53 SYS@orcl>select * from test.test1 where EMPLOYEE_ID=198 for update;

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


        198 Donald               OConnell                  DOCONNEL                  650.507.9833         21-JUN-99    SH_CLERK         2600                       124                50

        198 Donald               OConnell                  DOCONNEL                  650.507.9833         21-JUN-99    SH_CLERK         2600                       124                50

        198 Donald               OConnell                  DOCONNEL                  650.507.9833         21-JUN-99    SH_CLERK         2600                       124                50

        198 Donald               OConnell                  DOCONNEL                  650.507.9833         21-JUN-99    SH_CLERK         2600                       124                50

        198 Donald               OConnell                  DOCONNEL                  650.507.9833         21-JUN-99    SH_CLERK         2600                       124                50

        198 Donald               OConnell                  DOCONNEL                  650.507.9833         21-JUN-99    SH_CLERK         2600                       124                50


459 rows selected.


会话2执行如下语句,处于等待状态:

SYS@orcl>set time on

15:37:22  SYS@orcl>delete from test.test1 where EMPLOYEE_ID=198;


会话三查询锁并查看执行的语句:

查看锁

15:38:41 SYS@orcl>/


SESS                                                    ID1        ID2      LMODE    REQUEST TY

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

Holder: 135                                          458790       1231          6          0 TX

Waiter: 148                                          458790       1231          0          6 TX

查看执行的语句:


Waiting sid SQL from Waiting Session                                     Blocking sid SQL from blocking se

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

        148 delete from test.test1 where EMPLOYEE_ID=198                          135 select * from test.test1 where                                                                                                                                           EMPLOYEE_ID=198 for update


会话1 提交数据:

15:44:56 SYS@orcl>commit;


Commit complete.


会话2 查看执行结果:

15:37:22 SYS@orcl>delete from test.test1 where EMPLOYEE_ID=198;


459 rows deleted.


15:45:00 SYS@orcl>


会话3 查看是否还有锁等待:

15:46:35 SYS@orcl>/


no rows selected


4 测试 select for update是否可以修改数据, 发现不能,如下:


使用PLSQL执行for update

修改数据,并提交,发现不能修改数据



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69996316/viewspace-2770592/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
本人目前就职于北京海天起点技术服务股份有限公司,从事Oracle数据库有十几年了,对Oracle及goldengate比较精通。

注册时间:2021-03-11

  • 博文量
    60
  • 访问量
    68949