在Oracle9i/10g的(11g還沒有測試過) Data guard環(huán)境下,通過alter user sys identified by xxx 修改sys用戶密碼時,不會自動更新備庫的密碼文件。Oracle Dataguard環(huán)境的日志傳輸安全機制依靠Oracle生產(chǎn)庫的密碼文件,因此在具有Dataguard環(huán)境的災(zāi)備系統(tǒng)中,修改sys用戶密碼需要兩種方式: 一、主庫用alter user命令,備庫用主庫傳過來的密碼文件; 1、在主庫通過alter user sys identified by sys_new_password后將主庫的密碼文件拷貝到備庫相應(yīng)目錄,關(guān)閉備庫并覆蓋備庫密碼文件后啟動備庫。操作步驟如下:
SQL> alter system archive log current ; System altered.
SQL> shutdown immediate; ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> exit [@more@]
SQL> alter user sys identified by newpasswd; User altered.
$scp orapwrac1 oracle@192.168.1.6:/oracle/product/10.2.0/dbs The authenticity of host '192.168.1.6 (192.168.1.6)' can't be established. RSA key fingerprint is 6a:ef:bb:e0:4a:97:cb:5d:79:d0:a9:f3:95:73:9e:e2. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.6' (RSA) to the list of known hosts. Password: orapwrac1 100% |**********************************| 1536 00:00
2、將主庫的密碼文件拷貝并覆蓋到備庫相應(yīng)的目錄 也就是說,在Oracle 備庫需要將主庫的密碼文件拷貝到備庫的$ORACLE_HOME/dbs目錄下,關(guān)閉備庫后覆蓋原有的密碼文件(以上已經(jīng)進行關(guān)閉了)再啟動備庫。 具體操作步命令: $mv orapwrac orapwrac_bak --將原來的密碼文件做好備份 $ mv orapwrac1 orapwrac --替換生產(chǎn)庫復(fù)制過來的password文件 SQL>startup mount SQL>alter database recover managed standby database disconnect from session;
二、主庫備庫都用orapwd生成新密碼文件
1、通過orapwd 來重建 重建密碼文件可能導(dǎo)致其他擁有sysdba或sysoper權(quán)限的用戶丟失權(quán)限。 在創(chuàng)建密碼文件之前,應(yīng)該先查詢視圖V$PWFILE_USERS,需要確定原本擁有sysdba和sysoper的用戶是否還需要權(quán)限,如果需要,還要重新授權(quán)。
創(chuàng)建口令文件需要注意的是=前后沒有空格!另外值得一提的是10g增加了一個新的參數(shù)force default值n,當(dāng)同名文件存在時是否覆蓋。創(chuàng)建完密碼文件后需要復(fù)制到災(zāi)備庫相應(yīng)目錄或采用force參數(shù)直接覆蓋。具體操作命令: orapwd file=/oracle/product/10.2.0/dbs/orapwtest password=system entries=5 force=y
2、將主庫的密碼文件拷貝到備庫相應(yīng)的目錄,需要備庫的重啟 也就是說,在Oracle 備庫需要將主庫的密碼文件拷貝到$ORACLE_HOME/dbs目錄下,關(guān)閉備庫后覆蓋原有的密碼文件(將備庫關(guān)閉后,再進行拷貝覆蓋)再啟動備庫。 具體操作步命令: $scp oraprac1 oracle@192.168.1.6:/oracle/product/10.2.0/dbs $mv orapwrac orapwrac_bak --將原來的密碼文件做好備份 SQL>shutdown immediate --關(guān)閉備庫 $ mv orapwrac1 orapwrac --替換生產(chǎn)庫復(fù)制過來的password文件 SQL>startup mount SQL>alter database recover managed standby database disconnect from session;
對備庫密碼文件要不要關(guān)閉后覆蓋問題,有不同的說法,網(wǎng)上部分資料上說不必關(guān)閉,本人對此沒有進行測試。但是對于在線生產(chǎn)系統(tǒng),為了安全起見還是建議關(guān)閉后再覆蓋(擔(dān)心某個文件傳到一半就(密碼文件被修改)然后出現(xiàn)錯誤之類的)。
驗證密碼更新結(jié)果: 在主庫或其他終端遠程sysdba身份登錄備庫 SQL> conn sys/passwd@standby as sysdba; Connected. SQL> select open_mode from v$database; OPEN_MODE ---------- MOUNTED
還要在備庫的alertlog中觀察主庫歸檔日志(或日志)的傳輸和應(yīng)用情況。
如下是關(guān)于Oracle 密碼文件驗證模式和OS驗證模式概念及在windows上的測試: 1、os認證 oracle安裝之后默認情況下是啟用了os認證的,這里提到的os認證是指服務(wù)器端os認證。os認證的意思把登錄數(shù)據(jù)庫的用戶和口令校驗放在了操作系統(tǒng)一級。如果以安裝oracle時的用戶登錄os,那么此時在登錄oracle數(shù)據(jù)庫時不需要任何驗證,如: SQL> connect /as sysdba 已連接。 SQL> connect sys/aaa as sysdba 已連接。
2、口令文件 oracle的口令文件的作用是存放所有以sysdba或者sysoper權(quán)限連接數(shù)據(jù)庫的用戶的口令,如果想以sysdba權(quán)限遠程連接數(shù)據(jù)庫,必須使用口令文件,否則不能連上,由于sys用戶在連接數(shù)據(jù)庫時必須以sysdba or sysoper方式,也就是說sys用戶要想連接數(shù)據(jù)庫必須使用口令文件。 在unix/linux下也可以在文件sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及刪除dba(groupdel dba)組或者把oracle用戶從dba組中刪除都可以屏蔽os認證。
如下是在windows環(huán)境的測試: 1、只要把oracle_home/NETWORK/admin/sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者注釋掉這句話(在前面加上#),就可以屏蔽OS驗證功能,要想以sys用戶連上數(shù)據(jù)庫必須輸入正確的sys口令,如: 在SQLNET.AUTHENTICATION_SERVICES= (NTS)注釋之前: @>conn sys/aaa as sysdba --- aaa是并不是sys用戶的密碼,而隨意輸入的字母 已連接。 SYS@kuqlan10>conn sys/bbb as sysdba 已連接。
在SQLNET.AUTHENTICATION_SERVICES= (NTS)注釋之后: @>conn sys/aaa as sysdba ERROR: ORA-01017: 用戶名/口令無效; 登錄被拒絕
改回SQLNET.AUTHENTICATION_SERVICES= (NTS)原來設(shè)置后,修改sys用戶的密碼: SYS@kuqlan10>alter user sys identified by kuqlan; 用戶已更改。 SYS@kuqlan10>conn sys/ aaa as sysdba 已連接。
重新注釋掉SQLNET.AUTHENTICATION_SERVICES= (NTS),通過密碼文件來驗證 @>conn sys/kuqlan as sysdba 已連接。 SYS@kuqlan10>conn sys/aaa as sysdba ERROR: ORA-01017: 用戶名/口令無效; 登錄被拒絕 警告: 您不再連接到 ORACLE。 @>
Data Guard中sys用戶密碼的修改通過覆蓋或orapwd方式來解決的原因 數(shù)據(jù)庫在沒有OPEN時(對于DG來說mount狀態(tài)下),通過alter user sys identified by sys_new_password命令無法修改密碼的(無論在OS驗證模式還是密碼文件驗證模式),因此備庫只能通過密碼文件覆蓋方式來實現(xiàn)sys用戶的密碼更新,如下是Oracle在密碼文件驗證模式下的測試:
SYS@kuqlan10>shutdown immediate 數(shù)據(jù)庫已經(jīng)關(guān)閉。 已經(jīng)卸載數(shù)據(jù)庫。 ORACLE 例程已經(jīng)關(guān)閉。 SYS@kuqlan10>startup mount ORACLE 例程已經(jīng)啟動。
Total System Global Area 612368384 bytes Fixed Size 1250476 bytes Variable Size 587205460 bytes Database Buffers 16777216 bytes Redo Buffers 7135232 bytes 數(shù)據(jù)庫裝載完畢。 SYS@kuqlan10>alter user sys identified by kuqlan1; alter user sys identified by kuqlan1 * 第 1 行出現(xiàn)錯誤: ORA-01109: 數(shù)據(jù)庫未打開 SYS@kuqlan10>alter database open; 數(shù)據(jù)庫已更改。 SYS@kuqlan10>alter user sys identified by kuqlan1; 用戶已更改。
其他補充: 凡是修改具有sysdba or sysoper權(quán)限的用戶,如果通過alter user來修改口令,那么同時修改了口令文件和數(shù)據(jù)庫中的口令。 sys密碼存放于文件,system存放于數(shù)據(jù)字典改動sys密碼,一定要在副機未啟動時,及時拷貝覆蓋副機的文件。
在更改sys密碼之前,首先應(yīng)該檢查$ORACLE_HOME/dbs目錄下的密碼文件是本地文件還是一個連接指向共享存儲上的密碼文件。對于密碼文件是本地存儲還是共享存儲,對于RAC環(huán)境而言還是有點區(qū)別的。 如果是兩個節(jié)點分別本地存儲,那么最簡單的方式莫過于在兩個節(jié)點上分別執(zhí)行: alter user sys identified by sys_new_password; 如果是共享存儲,那么執(zhí)行一次就可以了,當(dāng)然如果不確定,或者為了方便,也可以在兩個節(jié)點上分別執(zhí)行這個語句。所以對于RAC環(huán)境而言,修改SYS密碼可以在每個節(jié)點上都運行一次alter user語句 |
|