在Oracle9i/10g的(11g還沒有測試過) Data guard環(huán)境下,,通過alter user sys identified by xxx 修改sys用戶密碼時(shí),,不會(huì)自動(dòng)更新備庫的密碼文件,。Oracle Dataguard環(huán)境的日志傳輸安全機(jī)制依靠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)閉備庫并覆蓋備庫密碼文件后啟動(dòng)備庫,。操作步驟如下:
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)進(jìn)行關(guān)閉了)再啟動(dòng)備庫,。 具體操作步命令: $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增加了一個(gè)新的參數(shù)force default值n,當(dāng)同名文件存在時(shí)是否覆蓋。創(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)閉后,再進(jìn)行拷貝覆蓋)再啟動(dòng)備庫,。 具體操作步命令: $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;
對(duì)備庫密碼文件要不要關(guān)閉后覆蓋問題,,有不同的說法,網(wǎng)上部分資料上說不必關(guān)閉,,本人對(duì)此沒有進(jìn)行測試,。但是對(duì)于在線生產(chǎn)系統(tǒng),為了安全起見還是建議關(guān)閉后再覆蓋(擔(dān)心某個(gè)文件傳到一半就(密碼文件被修改)然后出現(xiàn)錯(cuò)誤之類的),。
驗(yàn)證密碼更新結(jié)果: 在主庫或其他終端遠(yuǎn)程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 密碼文件驗(yàn)證模式和OS驗(yàn)證模式概念及在windows上的測試: 1、os認(rèn)證 oracle安裝之后默認(rèn)情況下是啟用了os認(rèn)證的,,這里提到的os認(rèn)證是指服務(wù)器端os認(rèn)證,。os認(rèn)證的意思把登錄數(shù)據(jù)庫的用戶和口令校驗(yàn)放在了操作系統(tǒng)一級(jí)。如果以安裝oracle時(shí)的用戶登錄os,,那么此時(shí)在登錄oracle數(shù)據(jù)庫時(shí)不需要任何驗(yàn)證,,如: SQL> connect /as sysdba 已連接。 SQL> connect sys/aaa as sysdba 已連接,。
2,、口令文件 oracle的口令文件的作用是存放所有以sysdba或者sysoper權(quán)限連接數(shù)據(jù)庫的用戶的口令,如果想以sysdba權(quán)限遠(yuǎn)程連接數(shù)據(jù)庫,,必須使用口令文件,,否則不能連上,由于sys用戶在連接數(shù)據(jù)庫時(shí)必須以sysdba or sysoper方式,,也就是說sys用戶要想連接數(shù)據(jù)庫必須使用口令文件,。 在unix/linux下也可以在文件sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及刪除dba(groupdel dba)組或者把oracle用戶從dba組中刪除都可以屏蔽os認(rèn)證。
如下是在windows環(huán)境的測試: 1,、只要把oracle_home/NETWORK/admin/sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者注釋掉這句話(在前面加上#),,就可以屏蔽OS驗(yàn)證功能,要想以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),,通過密碼文件來驗(yàn)證 @>conn sys/kuqlan as sysdba 已連接,。 SYS@kuqlan10>conn sys/aaa as sysdba ERROR: ORA-01017: 用戶名/口令無效; 登錄被拒絕 警告: 您不再連接到 ORACLE。 @>
Data Guard中sys用戶密碼的修改通過覆蓋或orapwd方式來解決的原因 數(shù)據(jù)庫在沒有OPEN時(shí)(對(duì)于DG來說mount狀態(tài)下),,通過alter user sys identified by sys_new_password命令無法修改密碼的(無論在OS驗(yàn)證模式還是密碼文件驗(yàn)證模式),,因此備庫只能通過密碼文件覆蓋方式來實(shí)現(xiàn)sys用戶的密碼更新,如下是Oracle在密碼文件驗(yàn)證模式下的測試:
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)啟動(dò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)錯(cuò)誤: ORA-01109: 數(shù)據(jù)庫未打開 SYS@kuqlan10>alter database open; 數(shù)據(jù)庫已更改。 SYS@kuqlan10>alter user sys identified by kuqlan1; 用戶已更改,。
其他補(bǔ)充: 凡是修改具有sysdba or sysoper權(quán)限的用戶,,如果通過alter user來修改口令,,那么同時(shí)修改了口令文件和數(shù)據(jù)庫中的口令,。 sys密碼存放于文件,system存放于數(shù)據(jù)字典改動(dòng)sys密碼,,一定要在副機(jī)未啟動(dòng)時(shí),,及時(shí)拷貝覆蓋副機(jī)的文件。
在更改sys密碼之前,,首先應(yīng)該檢查$ORACLE_HOME/dbs目錄下的密碼文件是本地文件還是一個(gè)連接指向共享存儲(chǔ)上的密碼文件,。對(duì)于密碼文件是本地存儲(chǔ)還是共享存儲(chǔ),對(duì)于RAC環(huán)境而言還是有點(diǎn)區(qū)別的,。 如果是兩個(gè)節(jié)點(diǎn)分別本地存儲(chǔ),,那么最簡單的方式莫過于在兩個(gè)節(jié)點(diǎn)上分別執(zhí)行: alter user sys identified by sys_new_password; 如果是共享存儲(chǔ),那么執(zhí)行一次就可以了,,當(dāng)然如果不確定,,或者為了方便,也可以在兩個(gè)節(jié)點(diǎn)上分別執(zhí)行這個(gè)語句,。所以對(duì)于RAC環(huán)境而言,,修改SYS密碼可以在每個(gè)節(jié)點(diǎn)上都運(yùn)行一次alter user語句 |
|