重新认识口令文件

昨天一同事问起oracle口令文件和OS验证登录的问题,为此我做了如下一些测试,同时感谢此同事多次提出的问题,推动我进行深入研究。
ORACLE使用OS验证方式登录时,是不经过口令文件的,有无口令文件都能正常登录。

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
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: 权限不足

请输入用户名:
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
SQL> select username,password from dba_users;
USERNAME                       PASSWORD
------------------------------ ------------------------------
TEST                           7A0F2B316C212D67
SYS                            4DE42795E66117AE
.
.
.
查看二进制的口令文件可以看到test的口令是7A0F2B316C212D67(test),说明一般情况下口令文件与数据字典中的password是一致的。
为使这两个地方存储的口令不一致,我手动把口令文件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
password得到改变,PWDorcl.ora.bak中记录的test的password保持不变。
之后,将口令文件PWDorcl.ora.bak改回原来的PWDorcl.ora(口令文件中test的口令是test),仍然用非OS验证登录测试:
****************************************************************************
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 断开
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: 用户名/口令无效; 登录被拒绝

请输入用户名:
****************************************************************************

此时进一步证明了在非OS验证登录时,使用的口令来自于口令文件中。
 
****************************************************************************
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: 用户名/口令无效; 登录被拒绝

警告: 您不再连接到 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 断开
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: 用户名/口令无效; 登录被拒绝

请输入用户名:
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: 用户名/口令无效; 登录被拒绝

请输入用户名:
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身份登录,口令取自口令文件,普通用户登录,口令取自数据字典。

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

转载于:http://blog.itpub.net/17997/viewspace-621529/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值