Oracle的操作系統身份認證

sqlnet.authentication_services=(NTS),在$ORACLE_HOME/network/admin/sqlnet.ora中

NTS特指的是windows系統,或者設爲all,這兩種情況都允許操作系統認證。

如果在unix下如果沒有設置sqlnet.authentication_services,默認就是操作系統認證!或者設爲all也允許操作系統認證。
參數SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)表明用戶連接Oracle服務器時使用哪種驗證方式
NONE表示Oracle數據庫身份驗證,NTS表示操作系統身份驗證,兩種方式可以並用。
 
數據庫用sysdba登錄的驗證有兩種方式,一種是通過os認證,一種是通過密碼文件驗證;登錄方式有兩種,一種是在數據庫主機直接登錄(用os認證的方式),一種是通過網絡遠程登錄;需要設置的參數有兩個,一個是SQLNET.AUTHENTICATION_SERVICES,一個是REMOTE_LOGIN_PASSWORDFILE。

os認證:如果啓用了os認證,以sysdba登錄,那麼我們只要用oracle軟件的安裝用戶就能登錄:sqlplus “/ as sysdba”。如果我們要禁用os認證,只利用密碼文件登錄,我們首先要有一個密碼文件:
orapwd file=C:/oracle/product/10.2.0/db_1/database/PWDoralocal.ora password=maximo entries=10;
然後我們要把$ORACLE_HOME/network/admin/sqlnet.ora中設置:
SQLNET.AUTHENTICATION_SERVICES= none

注意一下,密碼文件只在數據庫啓動的時候加載進去,一旦加載進去,密碼文件就脫離了oracle管理,所以我們用orapwd新建密碼文件後,裏面指定的密碼要在數據重啓後才能生效:
至此,我們已經實現不用os認證(sqlplus “/ as sysdba”的方式登錄不了)。那麼我們怎麼限制網絡方面利用sysdba遠程登錄呢?我們可以設置初始化文件中的REMOTE_LOGIN_PASSWORDFILE=none。
注意,當REMOTE_LOGIN_PASSWORDFILE=none時,這個參數生效需要重啓數據庫,並且,一旦啓用這個參數,將使用操作系統認證,不使用口令文件。因此如果REMOTE_LOGIN_PASSWORDFILE=none且SQLNET.AUTHENTICATION_SERVICES= none這個時候數據庫是無法登錄的。
 
alter system set REMOTE_LOGIN_PASSWORDFILE=none scope=spfile;
(1)REMOTE_LOGIN_PASSWORDFILE=none且SQLNET.AUTHENTICATION_SERVICES= none:
oracle安裝用戶本地sqlplus “/ as sysdba”無法登錄
非oracle安裝用戶本機sqlplus “sys/change_on_install as sysdba”無法登錄
非oracle安裝用戶遠程sqlplus “/ as sysdba_on_install@sid as sysdba”無法登錄
(2)REMOTE_LOGIN_PASSWORDFILE=exclusive且SQLNET.AUTHENTICATION_SERVICES= none:
oracle安裝用戶本地sqlplus “/ as sysdba”無法登錄
非oracle安裝用戶本機sqlplus “sys/change_on_install as sysdba”能登錄
非oracle安裝用戶遠程sqlplus “/ as sysdba_on_install@sid as sysdba”能登錄
(3)REMOTE_LOGIN_PASSWORDFILE=none且SQLNET.AUTHENTICATION_SERVICES= (NTS):
oracle安裝用戶本地sqlplus “/ as sysdba”能登錄
非oracle安裝用戶本機sqlplus “sys/change_on_install as sysdba”無法登錄
非oracle安裝用戶遠程sqlplus “/ as sysdba_on_install@sid as sysdba”無法登錄
(4)REMOTE_LOGIN_PASSWORDFILE=exclusive且SQLNET.AUTHENTICATION_SERVICES= (NTS):
oracle安裝用戶本地sqlplus “/ as sysdba”能登錄
非oracle安裝用戶本機sqlplus “sys/change_on_install as sysdba”能登錄
非oracle安裝用戶遠程sqlplus “/ as sysdba_on_install@sid as sysdba”能登錄
Oracle REMOTE_LOGIN_PASSWORDFILE 參數
設置初始化參數 REMOTE_LOGIN_PASSWORDFILE :
在 Oracle 數據庫實例的初始化參數文件中,此參數控制着密碼文件的使用及其狀態。它可以有以下幾個選項:
1、NONE :指示 Oracle 系統不使用密碼文件,特權用戶的登錄通過操作系統進行身份驗證;
2、EXCLUSIVE :指示只有一個數據庫實例可以使用此密碼文件。只有在此設置下的密碼文件可以包含有除 SYS 以外的用戶信息,即允許將系統權限 SYSOPER /SYSDBA 授予除 SYS 以外的其他用戶。此設置oracle 9i中爲缺省值。有朋友說是shared,其實不然.
3、SHARED :指示可有多個數據庫實例可以使用此密碼文件。在此設置下只有 SYS 帳號能被密碼文件識別,即使文件中存有其他用戶的信息,也不允許他們以 SYSOPER /SYSDBA 的權限登錄。

---- 在 REMOTE_LOGIN_PASSWORDFILE 參數設置爲 EXCLUSIVE 、 SHARED 情況下, Oracle 系統搜索密碼文件的次序爲:在系統註冊庫中查找 ORA_SID_PWFILE 參數值(它爲密碼文件的全路徑名);若未找到,則查找 ORA_PWFILE 參數值;若仍未找到,則使用缺省值 ORACLE_HOME/DATABASE/PWDSID.ORA ;其中的 SID 代表相應的 Oracle 數據庫系統標識符。

 

 

 


總結

$ORACLE_HOME/network/admin/sqlnet.ora中的AUTHENTICATION_SERVICES參數:
1、在windows下,SQLNET.AUTHENTICATION_SERVICES必須設置爲NTS或者ALL才能使用OS認證;不設置或者設置爲其他任何值都不能使用OS認證。
2、在linux下,在SQLNET.AUTHENTICATION_SERVICES的值設置爲ALL,或者不設置的情況下,OS驗證才能成功;設置爲其他任何值都不能使用OS認證。


spfile中的REMOTE_LOGIN_PASSWORDFILE參數:
1、值爲exclusive時,遠程能作爲sysdba身份登錄
2、值爲none時,以sysdba身份無法登錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章