一. OS認證
1.1 OS認證介紹
Oracle安裝之後預設情況下是啟用了OS認證的,這裡提到的OS認證是指伺服器端OS認證。OS認證的意思把登入資料庫的使用者和口令校正放在了作業系統一級。如果以安裝Oracle時的使用者登入OS,那麼此時在登入Oracle資料庫時不需要任何驗證,如:
SQL> connect /as sysdba
已串連。
SQL> connect sys/aaa@test as sysdba
已串連。
SQL> connect sys/bbb as sysdba
已串連。
SQL> connect aaa/bbb as sysdba
已串連。
SQL> show user
SYS
SQL>
不論輸入什麼使用者(哪怕這個使用者如aaa在資料庫中根本不存在),只要以sysdba許可權串連資料庫,都可以串連上,並且串連使用者是sys,這樣很方便,有時候,如果忘記了資料庫的密碼,而又想登入資料庫,可以通過這種方式,前提是在資料庫伺服器上.
1.2 OS 認證相關的參數
Oracle資料庫通過如下3個參數來實現OS 認證:
(1)sqlnet.ora中的 SQLNET.AUTHENTICATION_SERVICES參數。
(2)PFILE(或SPFILE)檔案中的參數REMOTE_LOGIN_PASSWORDFILE
(3)口令檔案PWDsid.ora(windows)或者 orapwSID(linux,大小寫敏感)。
1.2.1 sqlnet.ora 檔案參數
檔案位置:$ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
參數可以有如下值:
SQLNET.AUTHENTICATION_SERVICES=(NTS)|(NONE)
其中:
(NTS): 表示作業系統認證方式,不使用口令檔案,預設值。
(NONE):口令檔案認證方式
1.2.2 REMOTE_LOGIN_PASSWORDFILE 參數
該參數可以有如下值:
REMOTE_LOGIN_PASSWORDFILE ='NONE'|'EXCLUSIVE'|'SHARED'
(1)NONE:不使用密碼檔案登入、不允許遠端使用者用sys登入系統、可以線上修改sys的密碼;
(2)EXCLUSIVE:預設值。只允許一個資料庫使用該密碼檔案、允許遠程登入、允許非sys使用者以sysdba身份管理資料庫、可以線上修改sys的密碼。在這種模式下,口令檔案可以包含用於多個特許的Oracle賬戶的口令。這是推薦的操作模式,特別是在運行RMAN時。如果希望將RMAN與來自於遠程用戶端的資料庫連接,則必須使用該參數設定。
(3)SHARE:可以多個資料庫使用密碼檔案。實際上是這樣的: Oracle資料庫在啟動時,首先尋找的是orapw<sid>的口令檔案,如果該檔案不存在,則開始尋找,orapw的口令檔案如果口令檔案命名為orapw,多個資料庫就可以共用、允許遠程登入、只能用sys進行sysdba管理、可以線上修改sys的密碼。在此設定下只有INTERNAL/SYS帳號能被識別,即使檔案中存有其它使用者的資訊,也不允許他們以SYSOPER/SYSDBA登入。
修改:
SQL>ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
需要注意的是:這個參數不是動態參數。需要在資料庫載入到MOUNT狀態下修改,另外改變以後需要重新啟動資料庫,參數的設定才能夠生效。
1.3 禁用OS認證
OS 認證存在一定的安全隱患,我們可以屏蔽OS認證。
1.3.1 windows下
在win下只要把oracle_home/NETWORK/admin/sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者注釋掉這句話(在前面加上#),就可以屏蔽os功能,要想以sys使用者連上資料庫必須輸入正確的sys口令,或者可以把oracle的安裝使用者從組ora_dba中刪除掉,當然也可以直接把ora_dba這個組也刪除,都可以屏蔽os功能.
如:
SQL> connect /as sysdba
ERROR:
ORA-01031: 許可權不足
SQL> connect sys/aaa as sysdba
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
SQL> connect aaa/bbb as sysdba
ERROR:
ORA-01031: 許可權不足
SQL> connect sys/system as sysdba
已串連。
SQL>
1.3.2 LINUX/UNIX 下
在檔案sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及刪除dba(groupdel dba)組或者把oracle使用者從dba組中刪除都可以屏蔽os認證。
注意:
使用這種屏蔽方法, 系統管理員還是可以建立ora_dba or dba組以及修改sqlnet.ora檔案。