---------------------------------------------------------------------------
---- 本文為andkylee個人原創,請在尊重作者勞動成果的前提下進行轉載;
---- 轉載務必註明原始出處
:
http://blog.csdn.net/andkylee
---
2010-08-10
18:19:57
---- 關鍵字: oracle sysdba sysoper驗證 os password file authentication
----------------------------------------------------------------------------
今天下午用手工寫create database命令的方式建立了一個測試庫demo,執行了catalog.sql,catproc.sql,pupbld.sql這三個指令碼後,也用orapwd工具建立了密碼檔案:
orapwd file=e:/oracle/db_1/database/orapwdemo.ora
password=db entries=10
因為那台機器上原本有一個oracle執行個體在跑,所以就沒有改listener.ora檔案的內容。
在測試庫demo的本機上串連執行個體demo的時候,沒有問題。
set oracle_sid=demo
sqlplus /nolog
conn / as sysdba
能夠連上!
C:/Documents and Settings/Administrator>set oracle_sid=demo<br />C:/Documents and Settings/Administrator>sqlplus /nolog<br />SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 10 17:28:21 2010<br />Copyright (c) 1982, 2005, Oracle. All rights reserved.<br />SQL> conn / as sysdba<br />已串連。<br />SQL> show parameter db_name<br />NAME TYPE VALUE<br />------------------------------------ ----------- ------------------------------<br />db_name string demo
但是在遠程電腦上,用system使用者可以串連,用sys串連的時候報錯:
SQL> conn sys/db@demo178 as sysdba
ERROR:
ORA-01031: insufficient privileges
解決辦法:
最後問題出在密碼檔案的名稱上。oracle 9i的時候密碼檔案以orapw
開頭,但是在oracle10g中以pwd
開頭。所以,到測試執行個體demo所在機器上,將e:/oracle/db_1/database/下的密碼檔案orapwdemo.ora名稱改為:pwddemo.ora。問題即可解決!
另外,將其他的密碼檔案,按照pwd$oracle_sid.ora改名後即可使用。不過,你要是事Crowdsourced Security Testing道密碼檔案的密碼。(這種方式可以省去用orapwd建立密碼檔案的過程,呵呵!)
通過以上的錯誤,可以看出:oracle在使用密碼檔案對sys使用者進行登入驗證的時候,會到$ORACLE_HOME/dbs/目錄下面找pwd$oracle_sid.ora這個檔案。如果找個該檔案,則再檢查密碼是否正確;否則,就不能驗證sys的有效性,也就報沒有足夠許可權的錯誤。
總結:
有必要回顧一下,oracle中的sys登入使用者的驗證方式。在oracle資料庫執行個體所在的本機上,當用sys使用者登入的時候,會首先選用作業系統驗證模式,如果當前作業系統的登入使用者屬於組dba(windows上位ora_dba),那麼驗證成功;否則,才會使用密碼驗證模式。
在本地系統使用作業系統層級驗證sys登入
下面示範一下,用telnet上一台裝有oracle10g執行個體名為demo的windows機器。使用的作業系統登入名稱為:sa,此使用者屬於ora_dba組。執行個體demo的sys使用者的密碼為:db。
在telnet下執行:net localgroup ora_dba 查看當前的登入使用者sa是否屬於該組。
C:/WINDOWS/system32>net localgroup ora_dba<br />別名 ora_dba<br />注釋<br />成員<br />--------------------------------------------------------------<br />Administrator<br />NT AUTHORITY/SYSTEM<br />sa<br />命令成功完成。<br />
可見,sa屬於oracle的ora_dba組。所以,在用sys串連資料庫的時候,oracle會優先使用作業系統層級的驗證。
C:/WINDOWS/system32>set oracle_sid=demo<br />C:/WINDOWS/system32>sqlplus /nolog<br />SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 10 17:47:02 2010<br />Copyright (c) 1982, 2005, Oracle. All rights reserved.<br />SQL> conn sys/dbaaa as sysdba<br />已串連。<br />SQL> conn / as sysdba<br />已串連。<br />SQL> conn sys as sysdba<br />輸入口令:<br />已串連。<br />SQL> show parameter db_name<br />NAME TYPE VALUE<br />------------------------------------ ----------- ------------------------------<br />db_name string demo<br />SQL>
在本地系統使用密碼檔案來驗證sys登入
以另外一個使用者user作為登入telnet到oracle執行個體所在機器。user這個使用者不屬於ora_dba組。
執行:net user user 可以查看該使用者所屬的本機群組。
C:/WINDOWS/system32>set oracle_sid=demo<br />C:/WINDOWS/system32>sqlplus /nolog<br />SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 10 17:53:58 2010<br />Copyright (c) 1982, 2005, Oracle. All rights reserved.<br />SQL> conn / as sysdba<br />ERROR:<br />ORA-01031: insufficient privileges<br />SQL> conn sys/db as sysdba<br />已串連。<br />SQL> conn sys/dbaa as sysdba<br />ERROR:<br />ORA-01031: insufficient privileges
可以不屬於組ora_dba時,只能使用密碼檔案進行驗證。
在遠程系統使用作業系統層級驗證sys登入
此種方法需要在遠程系統上的“本地net服務名配置”中使用安全的tcp(即:tcps)網路通訊協定。不過,暫時還沒學會怎麼用。可能用這種方法的人比較少吧。
在遠程系統使用
密碼檔案來驗證sys登入
很好理解,在遠程系統上的“本地net服務名配置”中使用安全的tcp(不安全的tcp協議)網路通訊協定時,會使用密碼檔案驗證。
下面的圖片很直觀的介紹了sys使用者的驗證方式: