oracle的認證機制

奮奮熊發表於2011-07-22
Oracle資料庫究竟使用OS認證還是口令檔案認證來進行管理取決於下面三個因素:
 1.SQLNET.ORA引數檔案中的引數SQLNET.AUTHENTICATION_SERVICES設定
 2.PFILE(SPFILE)引數檔案中的引數REMOTE_LOGIN_PASSWORDFILE設定
 3.口令檔案orapw$SID(Linux) | PWD$SID.ora(Windows)
Oracle許可權認證的基本順序是這樣的,先由SQLNET.AUTHENTICATION_SERVICES的設定值來決定是使用OS認證還是口令檔案認證,
如果使用口令檔案認證的話就要看後面兩個條件了:
 如果REMOTE_LOGIN_PASSWORDFILE引數設定為非NONE,而且口令檔案存在的話就能正常使用口令檔案認證,否則將會失敗。

SQLNET.AUTHENTICATION_SERVICES引數
在SQLNET.ORA(位於$ORACLE_HOME/network/admin目錄中)檔案中,需要修改時直接用文字編輯器開啟修改就行了,
對於不同的作業系統SQLNET.AUTHENTICATION_SERVICES的取值會有些不一樣,通常我們會用到下面的一些設定值:
linux下 none  all nts 不設定 四種情況
 啟動監聽 lsnrctl start 用於網路連線 走密碼檔案
 將sys的密碼設定成a
  orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=a force=y
linux平臺測試
第一種預設情況  沒設定或者設定成BEQ
 [oracle@dba admin]$ grep -v '#' sqlnet.ora
  NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
 [oracle@dba admin]$
 $ sqlplus sys/a@db10 as sysdba
  可以登入
 $ sql / as sysdba
  可以登入
 結論: 沒設定或值為BEQ時 密碼認證和OS認證都啟用
第二種情況 設定成none
[oracle@dba admin]$ grep -v '#' sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES=(none)
[oracle@dba admin]$
 
[oracle@dba admin]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Apr 30 04:35:02 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn / as sysdba
ERROR:
ORA-01031: 許可權不足

SQL> conn sys/a as sysdba
Connected.
SQL>
SQL> conn sys/a@db10 as sysdba
Connected.
SQL>
 結論: (none) OS認證被遮蔽 必須走密碼檔案認證
第三種情況 設定成all
SQL> conn / as sysdba
Connected.
SQL> conn sys/a@db10 as sysdba
ERROR:
ORA-12641: Authentication service failed to initialize

Warning: You are no longer connected to ORACLE.
SQL>
 結論: all 密碼檔案認證被遮蔽 只能OS認證
 
第四種情況 設定nts
[oracle@dba admin]$ grep -v '#' sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES=(nts)
[oracle@dba admin]$
SQL> conn / as sysdba
ERROR:
ORA-01031: 許可權不足

SQL> conn sys/a as sysdba
Connected.
SQL> conn sys/a@db10 as sysdba
Connected.
SQL>
 結論: nts只能密碼檔案認證
 
windows平臺測試
第一種 預設情況 設定nts
 
SQL> conn / as sysdba
已連線。
SQL> alter user sys identified by a;
使用者已更改。
SQL> conn / as sysdba
已連線。
SQL> conn sys/a as sysdba
已連線。
SQL> conn sys/a@orawin as sysdba
已連線。
SQL>
 結論: 設定nts(和linux不一致) 密碼和OS認證都啟用
第二種 設定成none
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges

SQL> conn sys/a as sysdba
已連線。
SQL> conn sys/a@orawin as sysdba
已連線。
SQL>
 結論: 設定成none(和linux一致) 只能密碼認證 OS認證被遮蔽
第三種 設定成 all
SQL> conn / as sysdba
ERROR:
ORA-12641: 驗證服務無法初始化

SQL> conn sys/a as sysdba
ERROR:
ORA-12641: 驗證服務無法初始化

SQL> conn sys/a@orawin as sysdba
ERROR:
ORA-12641: 驗證服務無法初始化
 結論: 此引數在windows下 OS和密碼認證都遮蔽了
第四種 不設定
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges

SQL> conn sys/a as sysdba
已連線。
SQL> conn sys/a@orawin as sysdba
已連線。
SQL>
 結論:只允許密碼認證 OS認證被遮蔽

第五種 設定成beq
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges

警告: 您不再連線到 ORACLE。
SQL> conn sys/a as sysdba
已連線。
SQL> conn sys/a@orawin as sysdba
已連線。
SQL>
 結論:只能使用密碼認證 OS認證被遮蔽
REMOTE_LOGIN_PASSWORDFILE引數
 此係統引數的設定制定了資料庫使用口令檔案的方法,此引數可以設定的值有三個:
 REMOTE_LOGIN_PASSWORDFILE = NONE
  不使用口令檔案
 REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE
  使用口令檔案,但只有一個資料庫例項可用使用
 REMOTE_LOGIN_PASSWORDFILE = SHARED
  多個資料庫例項共用一個口令檔案,這種設定下是不能增加其他資料庫使用者作為特殊許可權使用者到口令檔案中的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26077805/viewspace-702791/,如需轉載,請註明出處,否則將追究法律責任。

相關文章