重新認識口令檔案

byfree發表於2009-12-03
昨天一同事問起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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章