標籤:blog http io os 使用 ar for 檔案 資料
Oracle OS認證 口令檔案 密碼丟失處理分類: Oracle Basic Knowledge2009-10-19 14:24 5031人閱讀 評論(9) 收藏 舉報oracleos資料庫sql遠程登入login
一. OS認證
1.1 OS認證介紹
Oracle安裝之後預設情況下是啟用了OS認證的,這裡提到的OS認證是指伺服器端OS認證。OS認證的意思把登入資料庫的使用者和口令校正放在了作業系統一級。如果以安裝Oracle時的使用者登入OS,那麼此時在登入Oracle資料庫時不需要任何驗證,如:
SQL> connect /as sysdba
已串連。
SQL> connect sys/[email protected] 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檔案。
二. 口令檔案
2.1 口令檔案說明
Oracle的口令檔案的作用是存放所有以sysdba或者sysoper許可權串連資料庫的使用者的口令,如果想以sysdba許可權遠端連線資料庫,必須使用口令檔案,否則不能連上,由於sys使用者在串連資料庫時必須以sysdba or sysoper方式,也就是說sys使用者要想串連資料庫必須使用口令檔案,因此我認為在資料庫中存放sys使用者的口令其實沒有任何意義!使用口令檔案的好處是即使資料庫不處於open狀態,依然可以通過口令檔案驗證來串連資料庫。開始安裝完oracle,沒有給普通使用者授予sysdba許可權,口令檔案中只存放了sys的口令,如果之後把sysdba許可權授予了普通使用者,那麼此時會把普通使用者的口令從資料庫中讀到口令檔案中儲存下來,當然這時必須要求資料庫處於open狀態。如:
SQL> grant sysdba to test;
授權成功。
SQL> connect test/[email protected] as sysdba
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
警告: 您不再串連到 ORACLE。
SQL> connect test/[email protected] as sysdba
已串連。
SQL> alter database close;
資料庫已更改。
SQL> grant sysdba , sysoper to test;
grant sysdba , sysoper to test
*
第 1 行出現錯誤:
ORA-01109: 資料庫未開啟
2.2 查看具有sysdba 許可權的使用者
可以通過查詢v$pwfile_users視圖來查看有幾個使用者被授予了sysdba或者sysoper許可權, v$pwfile_users的資訊就是源於口令檔案.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
TEST TRUE FALSE
到底可以有幾個使用者被授予sysdba或者sysoper許可權,是由建立口令檔案時指定的entries數決定的,準確的說還不完全是,最終還和os block的大小有關,如果entries指定了5,一個os block可以存放8個使用者的口令,那麼可以由8個使用者被授予sysdba或者sysoper。
注意:事實是口令多長,加密之後的長度幾乎都是相同的,也就是說口令檔案佔用的大小和口令指定的長度幾乎關係不大。
C:>orapwd file=databasepwd.ora password=system entries=5
OPW-00005: 存在相同名稱的檔案 - 請刪除或重新命名
C:>orapwd file=databasepwd.ora password=system entries=5 force=y
建立口令檔案需要注意的是=前後沒有空格。在10g增加了一個新的參數force default值n,它的作用類似於建立資料表空間時的reuse功能,當同名檔案存在時是否覆蓋。
是否使用口令檔案,由remote_login_passwordfile參數控制。這個參數在上面有說明。
2.3 口令檔案格式
win下口令檔案的格式是pwdsid.ora(大小寫敏感)。
unix下的格式是orapwSID(大小寫敏感),
Oracle資料庫在啟動時,首先尋找的是orapw<sid>的口令檔案,如果該檔案不存在,則開始尋找,orapw的口令檔案,如果口令檔案命名為orapw,多個資料庫就可以共用。 口令檔案建立完後,資料庫需要重啟動,新的口令檔案才會生效。
2.4 sys/system 密碼丟失的處理方法
(1).查詢檢視V$PWFILE_USERS,select * from V$PWFILE_USERS;
記錄下擁有 SYSOPER/SYSDBA 系統許可權的使用者資訊。
(2)關閉資料庫 shutdown immediate
(3)將密碼檔案重新命名
(4)用orapwd 命令重建建立密碼檔案
orapwd file=/u01/app/oracle/product/10.2.0/db_1/dbs/orapworcl password=admin
entries=5 force=y
(5)將第一步查出來的使用者添加到密碼檔案
grant sysdba , sysoper to user;
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Oracle OS認證 口令檔案 密碼丟失處理