RAC和Dataguard環境下修改sys使用者密碼

like052629發表於2015-02-04

Oracle9i/10g的(11g還沒有測試過) Data guard環境下,透過alter user sys identified by xxx 修改sys使用者密碼時,不會自動更新備庫的密碼檔案Oracle Dataguard環境的日誌傳輸安全機制依靠Oracle生產庫的密碼檔案,因此在具有Dataguard環境的災備系統中,修改sys使用者密碼需要兩種方式:

一、主庫用alter user命令,備庫用主庫傳過來的密碼檔案;

1、在主庫透過alter user sys identified by sys_new_password後將主庫的密碼檔案複製到備庫相應目錄,關閉備庫並覆蓋備庫密碼檔案後啟動備庫。操作步驟如下:

  • 在主庫執行:

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、將主庫的密碼檔案複製並覆蓋到備庫相應的目錄

也就是說,在Oracle 備庫需要將主庫的密碼檔案複製到備庫的$ORACLE_HOME/dbs目錄下,關閉備庫後覆蓋原有的密碼檔案(以上已經進行關閉了)再啟動備庫。

具體操作步命令:

$mv orapwrac orapwrac_bak --將原來的密碼檔案做好備份

$ mv orapwrac1 orapwrac --替換生產庫複製過來的password檔案

SQL>startup mount

SQL>alter database recover managed standby database disconnect from session;

二、主庫備庫都用orapwd生成新密碼檔案

1、透過orapwd 來重建

重建密碼檔案可能導致其他擁有sysdbasysoper許可權的使用者丟失許可權。

在建立密碼檔案之前,應該先查詢檢視V$PWFILE_USERS,需要確定原本擁有sysdbasysoper的使用者是否還需要許可權,如果需要,還要重新授權。

建立口令檔案需要注意的是=前後沒有空格!另外值得一提的是10g增加了一個新的引數force default值n,當同名檔案存在時是否覆蓋。建立完密碼檔案後需要複製到災備庫相應目錄或採用force引數直接覆蓋。具體操作命令:

orapwd file=/oracle/product/10.2.0/dbs/orapwtest password=system entries=5 force=y

2、將主庫的密碼檔案複製到備庫相應的目錄,需要備庫的重啟

也就是說,在Oracle 備庫需要將主庫的密碼檔案複製到$ORACLE_HOME/dbs目錄下,關閉備庫後覆蓋原有的密碼檔案(將備庫關閉後,再進行複製覆蓋)再啟動備庫。

具體操作步命令:

$scp oraprac1 oracle@192.168.1.6:/oracle/product/10.2.0/dbs

$mv orapwrac orapwrac_bak --將原來的密碼檔案做好備份

SQL>shutdown immediate --關閉備庫

$ mv orapwrac1 orapwrac --替換生產庫複製過來的password檔案

SQL>startup mount

SQL>alter database recover managed standby database disconnect from session;

對備庫密碼檔案要不要關閉後覆蓋問題,有不同的說法,網上部分資料上說不必關閉,本人對此沒有進行測試。但是對於線上生產系統,為了安全起見還是建議關閉後再覆蓋(擔心某個檔案傳到一半就(密碼檔案被修改)然後出現錯誤之類的)。

驗證密碼更新結果:

在主庫或其他終端遠端sysdba身份登入備庫

SQL> conn sys/passwd@standby as sysdba;

Connected.

SQL> select open_mode from v$database;

OPEN_MODE

----------

MOUNTED

還要在備庫的alertlog中觀察主庫歸檔日誌(或日誌)的傳輸和應用情況。

如下是關於Oracle 密碼檔案驗證模式和OS驗證模式概念及在windows上的測試:

1、os認證

oracle安裝之後預設情況下是啟用了os認證的,這裡提到的os認證是指伺服器端os認證。os認證的意思把登入資料庫的使用者和口令校驗放在了作業系統一級。如果以安裝oracle時的使用者登入os,那麼此時在登入oracle資料庫時不需要任何驗證,如:

SQL> connect /as sysdba

已連線。

SQL> connect sys/aaa as sysdba

已連線。

2、口令檔案

oracle的口令檔案的作用是存放所有以sysdba或者sysoper許可權連線資料庫的使用者的口令,如果想以sysdba許可權遠端連線資料庫,必須使用口令檔案,否則不能連上,由於sys使用者在連線資料庫時必須以sysdba or sysoper方式,也就是說sys使用者要想連線資料庫必須使用口令檔案

在unix/linux下也可以在檔案sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及刪除dba(groupdel dba)組或者把oracle使用者從dba組中刪除都可以遮蔽os認證

如下是在windows環境的測試:

1只要把oracle_home/NETWORK/admin/sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者註釋掉這句話(在前面加上#),就可以遮蔽OS驗證功能,要想以sys使用者連上資料庫必須輸入正確的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)原來設定後,修改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 Guardsys使用者密碼的修改透過覆蓋或orapwd方式來解決的原因

資料庫在沒有OPEN時(對於DG來說mount狀態下),透過alter user sys identified by sys_new_password命令無法修改密碼的(無論在OS驗證模式還是密碼檔案驗證模式),因此備庫只能透過密碼檔案覆蓋方式來實現sys使用者的密碼更新,如下是Oracle在密碼檔案驗證模式下的測試:

SYS@kuqlan10>shutdown immediate

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE 例程已經關閉。

SYS@kuqlan10>startup mount

ORACLE 例程已經啟動。

Total System Global Area 612368384 bytes

Fixed Size 1250476 bytes

Variable Size 587205460 bytes

Database Buffers 16777216 bytes

Redo Buffers 7135232 bytes

資料庫裝載完畢。

SYS@kuqlan10>alter user sys identified by kuqlan1;

alter user sys identified by kuqlan1

*

第 1 行出現錯誤:

ORA-01109: 資料庫未開啟

SYS@kuqlan10>alter database open;

資料庫已更改。

SYS@kuqlan10>alter user sys identified by kuqlan1;

使用者已更改。

其他補充:

凡是修改具有sysdba or sysoper許可權的使用者,如果透過alter user來修改口令,那麼同時修改了口令檔案和資料庫中的口令。

sys密碼存放於檔案,system存放於資料字典改動sys密碼,一定要在副機未啟動時,及時複製覆蓋副機的檔案

在更改sys密碼之前,首先應該檢查$ORACLE_HOME/dbs目錄下的密碼檔案是本地檔案還是一個連線指向共享儲存上的密碼檔案。對於密碼檔案是本地儲存還是共享儲存,對於RAC環境而言還是有點區別的。

如果是兩個節點分別本地儲存,那麼最簡單的方式莫過於在兩個節點上分別執行:

alter user sys identified by sys_new_password;

如果是共享儲存,那麼執行一次就可以了,當然如果不確定,或者為了方便,也可以在兩個節點上分別執行這個語句。所以對於RAC環境而言,修改SYS密碼可以在每個節點上都執行一次alter user語句

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28258625/viewspace-1426335/,如需轉載,請註明出處,否則將追究法律責任。

相關文章