有些时候为了一些特殊的需求,要暂时锁住ORACLE中的某个用户,以防止用户中的数据被修改。
但这只对新登录的会话有效,对已经登录的session只要不退出是没有影响的。
session1:
SQL> show user;
User is "scott"
SQL> select count(1) from user_objects;
COUNT(1)
----------
9
session2:
SQL> show user;
User is "SYS"
SQL> alter user SCOTT account lock;
User altered
session3:
C:/Users/Liangwei>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期六 6月 4 22:58:06 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn scott/tiger
ERROR:
ORA-28000: the account is locked
sesion1在sys用户发出alter user SCOTT account lock;命令后,只要不退出,仍然不受影响。
SQL> select count(1) from user_tables;
COUNT(1)
----------
6
session2解锁scott用户后,session3能正常登录。
SQL> alter user SCOTT account unlock;
User altered
SQL> conn scott/tiger
已连接。
SQL> select sysdate from dual;
SYSDATE
--------------
04-6月 -11
利用oracle account lock 只对新登录的会话有效,对已经登录的session只要不退出是没有影响的的特性 。
得出如下结论:
1.如果要想真正锁住oracle的某个用户,最好先断开所有该用户的会话。
在利用alter user &username account lock; 锁住该账户。
某用户被锁住该后,仍然不能阻止有权限的用户(如:sys),对已锁住用户下的对象进行操作。
2. 如果既想阻止别人用这个用户登录,自己又想用这个用户去做维护。可以先登录进去一个sesion并保持不断开,
杀掉该用户的其它session后,在利用alter user &username account lock; 锁住这个用户即可。