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

来源:这里教程网 时间:2026-03-03 16:38:49 作者:

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 on15: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 修改数据,并提交,发现不能修改数据

相关推荐