昨天一同事问起oracle口令文件和OS验证登录的问题,为此我做了如下一些测试,同时感谢此同事多次提出的问题,推动我进行深入研究。
ORACLE使用OS验证方式登录时,是不经过口令文件的,有无口令文件都能正常登录。
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 09:31:56 2009
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 09:31:56 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
下面使用非OS验证测试登录,注释sqlnet.ora文件中的SQLNET.AUTHENTICATION_SERVICES= (NTS),用sysdba登录如下:
不输入用户名口令时,无法登录,必须明确输入用户名口令,而且必须存在有效的口令文件才能登录。
不输入用户名口令时,无法登录,必须明确输入用户名口令,而且必须存在有效的口令文件才能登录。
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 09:34:48 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: 权限不足
ORA-01031: 权限不足
请输入用户名:
C:\>sqlplus sys/sys as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 09:40:21 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select * from v$pwfile_users;(此视图信息来自于口令文件)
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
TEST TRUE TRUE
------------------------------ ----- -----
SYS TRUE TRUE
TEST TRUE TRUE
SQL> select username,password from dba_users;
USERNAME PASSWORD
------------------------------ ------------------------------
TEST 7A0F2B316C212D67
SYS 4DE42795E66117AE
.
.
.
------------------------------ ------------------------------
TEST 7A0F2B316C212D67
SYS 4DE42795E66117AE
.
.
.
查看二进制的口令文件可以看到test的口令是7A0F2B316C212D67(test),说明一般情况下口令文件与数据字典中的password是一致的。
为使这两个地方存储的口令不一致,我手动把口令文件PWDorcl.ora改名为PWDorcl.ora.bak(如不能修改请退出所有sqlplus),用OS验证登录后:
SQL> alter user test identified by ttt;
为使这两个地方存储的口令不一致,我手动把口令文件PWDorcl.ora改名为PWDorcl.ora.bak(如不能修改请退出所有sqlplus),用OS验证登录后:
SQL> alter user test identified by ttt;
用户已更改。
SQL> select username,password from dba_users where username='TEST';
USERNAME PASSWORD
------------------------------ ------------------------------
TEST FFB4FF2D2CE750F9
------------------------------ ------------------------------
TEST FFB4FF2D2CE750F9
password得到改变,PWDorcl.ora.bak中记录的test的password保持不变。
之后,将口令文件PWDorcl.ora.bak改回原来的PWDorcl.ora(口令文件中test的口令是test),仍然用非OS验证登录测试:
****************************************************************************
C:\>sqlplus test/test as sysdba
****************************************************************************
C:\>sqlplus test/test as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 10:53:24 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
C:\>sqlplus test/ttt as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 10:53:31 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
ORA-01017: 用户名/口令无效; 登录被拒绝
请输入用户名:
****************************************************************************
此时进一步证明了在非OS验证登录时,使用的口令来自于口令文件中。
****************************************************************************
C:\>sqlplus test/test as sysdba
C:\>sqlplus test/test as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 11:03:30 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> conn test/test (此时口令取自数据字典,而字典中存放的口令是ttt)
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
警告: 您不再连接到 ORACLE。
SQL> conn test/ttt (此时口令取自数据字典)
已连接。
SQL> conn test/ttt as sysdba (此时口令取自口令文件,而口令文件中存放的口令是test)
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
警告: 您不再连接到 ORACLE。
SQL> conn test/test as sysdba (此时口令取自口令文件)
已连接。
C:\>sqlplus test/ttt
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 11:10:21 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
C:\>sqlplus test/test
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 11:10:29 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
ORA-01017: 用户名/口令无效; 登录被拒绝
请输入用户名:
C:\>sqlplus test/ttt as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 11:12:04 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
ORA-01017: 用户名/口令无效; 登录被拒绝
请输入用户名:
C:\>sqlplus test/test as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 3 11:12:14 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
****************************************************************************
****************************************************************************
结论:
在非OS验证登录中,用户使用sysdba身份登录,口令取自口令文件,普通用户登录,口令取自数据字典。
在非OS验证登录中,用户使用sysdba身份登录,口令取自口令文件,普通用户登录,口令取自数据字典。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17997/viewspace-621529/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17997/viewspace-621529/