在Oracle9i/10g的(11g還沒(méi)有測(cè)試過(guò)) Data guard環(huán)境下,通過(guò)alter user sys identified by xxx 修改sys用戶密碼時(shí),不會(huì)自動(dòng)更新備庫(kù)的密碼文件。Oracle Dataguard環(huán)境的日志傳輸安全機(jī)制依靠Oracle生產(chǎn)庫(kù)的密碼文件,因此在具有Dataguard環(huán)境的災(zāi)備系統(tǒng)中,修改sys用戶密碼需要兩種方式: 一、主庫(kù)用alter user命令,備庫(kù)用主庫(kù)傳過(guò)來(lái)的密碼文件; 1、在主庫(kù)通過(guò)alter user sys identified by sys_new_password后將主庫(kù)的密碼文件拷貝到備庫(kù)相應(yīng)目錄,關(guān)閉備庫(kù)并覆蓋備庫(kù)密碼文件后啟動(dòng)備庫(kù)。操作步驟如下:
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、將主庫(kù)的密碼文件拷貝并覆蓋到備庫(kù)相應(yīng)的目錄 也就是說(shuō),在Oracle 備庫(kù)需要將主庫(kù)的密碼文件拷貝到備庫(kù)的$ORACLE_HOME/dbs目錄下,關(guān)閉備庫(kù)后覆蓋原有的密碼文件(以上已經(jīng)進(jìn)行關(guān)閉了)再啟動(dòng)備庫(kù)。 具體操作步命令: $mv orapwrac orapwrac_bak --將原來(lái)的密碼文件做好備份 $ mv orapwrac1 orapwrac --替換生產(chǎn)庫(kù)復(fù)制過(guò)來(lái)的password文件 SQL>startup mount SQL>alter database recover managed standby database disconnect from session;
二、主庫(kù)備庫(kù)都用orapwd生成新密碼文件
1、通過(guò)orapwd 來(lái)重建 重建密碼文件可能導(dǎo)致其他擁有sysdba或sysoper權(quán)限的用戶丟失權(quán)限。 在創(chuàng)建密碼文件之前,應(yīng)該先查詢視圖V$PWFILE_USERS,需要確定原本擁有sysdba和sysoper的用戶是否還需要權(quán)限,如果需要,還要重新授權(quán)。
創(chuàng)建口令文件需要注意的是=前后沒(méi)有空格!另外值得一提的是10g增加了一個(gè)新的參數(shù)force default值n,當(dāng)同名文件存在時(shí)是否覆蓋。創(chuàng)建完密碼文件后需要復(fù)制到災(zāi)備庫(kù)相應(yīng)目錄或采用force參數(shù)直接覆蓋。具體操作命令: orapwd file=/oracle/product/10.2.0/dbs/orapwtest password=system entries=5 force=y
2、將主庫(kù)的密碼文件拷貝到備庫(kù)相應(yīng)的目錄,需要備庫(kù)的重啟 也就是說(shuō),在Oracle 備庫(kù)需要將主庫(kù)的密碼文件拷貝到$ORACLE_HOME/dbs目錄下,關(guān)閉備庫(kù)后覆蓋原有的密碼文件(將備庫(kù)關(guān)閉后,再進(jìn)行拷貝覆蓋)再啟動(dòng)備庫(kù)。 具體操作步命令: $scp oraprac1 oracle@192.168.1.6:/oracle/product/10.2.0/dbs $mv orapwrac orapwrac_bak --將原來(lái)的密碼文件做好備份 SQL>shutdown immediate --關(guān)閉備庫(kù) $ mv orapwrac1 orapwrac --替換生產(chǎn)庫(kù)復(fù)制過(guò)來(lái)的password文件 SQL>startup mount SQL>alter database recover managed standby database disconnect from session;
對(duì)備庫(kù)密碼文件要不要關(guān)閉后覆蓋問(wèn)題,有不同的說(shuō)法,網(wǎng)上部分資料上說(shuō)不必關(guān)閉,本人對(duì)此沒(méi)有進(jìn)行測(cè)試。但是對(duì)于在線生產(chǎn)系統(tǒng),為了安全起見還是建議關(guān)閉后再覆蓋(擔(dān)心某個(gè)文件傳到一半就(密碼文件被修改)然后出現(xiàn)錯(cuò)誤之類的)。
驗(yàn)證密碼更新結(jié)果: 在主庫(kù)或其他終端遠(yuǎn)程sysdba身份登錄備庫(kù) SQL> conn sys/passwd@standby as sysdba; Connected. SQL> select open_mode from v$database; OPEN_MODE ---------- MOUNTED
還要在備庫(kù)的alertlog中觀察主庫(kù)歸檔日志(或日志)的傳輸和應(yīng)用情況。
如下是關(guān)于Oracle 密碼文件驗(yàn)證模式和OS驗(yàn)證模式概念及在windows上的測(cè)試: 1、os認(rèn)證 oracle安裝之后默認(rèn)情況下是啟用了os認(rèn)證的,這里提到的os認(rèn)證是指服務(wù)器端os認(rèn)證。os認(rèn)證的意思把登錄數(shù)據(jù)庫(kù)的用戶和口令校驗(yàn)放在了操作系統(tǒng)一級(jí)。如果以安裝oracle時(shí)的用戶登錄os,那么此時(shí)在登錄oracle數(shù)據(jù)庫(kù)時(shí)不需要任何驗(yàn)證,如: SQL> connect /as sysdba 已連接。 SQL> connect sys/aaa as sysdba 已連接。
2、口令文件 oracle的口令文件的作用是存放所有以sysdba或者sysoper權(quán)限連接數(shù)據(jù)庫(kù)的用戶的口令,如果想以sysdba權(quán)限遠(yuǎn)程連接數(shù)據(jù)庫(kù),必須使用口令文件,否則不能連上,由于sys用戶在連接數(shù)據(jù)庫(kù)時(shí)必須以sysdba or sysoper方式,也就是說(shuō)sys用戶要想連接數(shù)據(jù)庫(kù)必須使用口令文件。 在unix/linux下也可以在文件sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及刪除dba(groupdel dba)組或者把oracle用戶從dba組中刪除都可以屏蔽os認(rèn)證。
如下是在windows環(huán)境的測(cè)試: 1、只要把oracle_home/NETWORK/admin/sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者注釋掉這句話(在前面加上#),就可以屏蔽OS驗(yàn)證功能,要想以sys用戶連上數(shù)據(jù)庫(kù)必須輸入正確的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: 用戶名/口令無(wú)效; 登錄被拒絕
改回SQLNET.AUTHENTICATION_SERVICES= (NTS)原來(lái)設(shè)置后,修改sys用戶的密碼: SYS@kuqlan10>alter user sys identified by kuqlan; 用戶已更改。 SYS@kuqlan10>conn sys/ aaa as sysdba 已連接。
重新注釋掉SQLNET.AUTHENTICATION_SERVICES= (NTS),通過(guò)密碼文件來(lái)驗(yàn)證 @>conn sys/kuqlan as sysdba 已連接。 SYS@kuqlan10>conn sys/aaa as sysdba ERROR: ORA-01017: 用戶名/口令無(wú)效; 登錄被拒絕 警告: 您不再連接到 ORACLE。 @>
Data Guard中sys用戶密碼的修改通過(guò)覆蓋或orapwd方式來(lái)解決的原因 數(shù)據(jù)庫(kù)在沒(méi)有OPEN時(shí)(對(duì)于DG來(lái)說(shuō)mount狀態(tài)下),通過(guò)alter user sys identified by sys_new_password命令無(wú)法修改密碼的(無(wú)論在OS驗(yàn)證模式還是密碼文件驗(yàn)證模式),因此備庫(kù)只能通過(guò)密碼文件覆蓋方式來(lái)實(shí)現(xiàn)sys用戶的密碼更新,如下是Oracle在密碼文件驗(yàn)證模式下的測(cè)試:
SYS@kuqlan10>shutdown immediate 數(shù)據(jù)庫(kù)已經(jīng)關(guān)閉。 已經(jīng)卸載數(shù)據(jù)庫(kù)。 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ù)庫(kù)裝載完畢。 SYS@kuqlan10>alter user sys identified by kuqlan1; alter user sys identified by kuqlan1 * 第 1 行出現(xiàn)錯(cuò)誤: ORA-01109: 數(shù)據(jù)庫(kù)未打開 SYS@kuqlan10>alter database open; 數(shù)據(jù)庫(kù)已更改。 SYS@kuqlan10>alter user sys identified by kuqlan1; 用戶已更改。
其他補(bǔ)充: 凡是修改具有sysdba or sysoper權(quán)限的用戶,如果通過(guò)alter user來(lái)修改口令,那么同時(shí)修改了口令文件和數(shù)據(jù)庫(kù)中的口令。 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ǔ),那么最簡(jiǎn)單的方式莫過(guò)于在兩個(gè)節(jié)點(diǎn)上分別執(zhí)行: alter user sys identified by sys_new_password; 如果是共享存儲(chǔ),那么執(zhí)行一次就可以了,當(dāng)然如果不確定,或者為了方便,也可以在兩個(gè)節(jié)點(diǎn)上分別執(zhí)行這個(gè)語(yǔ)句。所以對(duì)于RAC環(huán)境而言,修改SYS密碼可以在每個(gè)節(jié)點(diǎn)上都運(yùn)行一次alter user語(yǔ)句 |
|
來(lái)自: 浸心閣 > 《口令認(rèn)證》