關於密碼檔案,SYS密碼

tolywang發表於2008-09-03


           在 Oracle 資料庫系統中,使用者如果要以特權使用者身份( INTERNAL / SYSDBA / SYSOPER )登入 Oracle 資料庫可以有兩種身份驗證的方法:即使用與作業系統整合的身份驗證或使用 Oracle 資料庫的密碼檔案進行身份驗證。因此,管理好密碼檔案,對於控制授權使用者從遠端或本機登入 Oracle 資料庫系統,執行資料庫管理工作,具有重要的意義。

Oracle 資料庫的密碼檔案存放有超級使用者 INTERNAL / SYS 的口令及其他特權使用者的使用者名稱/口令,它一般存放在 ORACLE_HOME \ DATABASE 目錄下。

  一、 密碼檔案的建立:

   在使用 Oracle Instance Manager 建立一資料庫例項的時侯,在 ORACLE_HOME \ DATABASE 目錄下還自動建立了一個與之對應的密碼檔案,檔名為 PWDSID.ORA ,其中 SID 代表相應的 Oracle 資料庫系統識別符號。此密碼檔案是進行初始資料庫管理工作的基礎。在此之後,管理員也可以根據需要,使用工具 ORAPWD.EXE 手工建立密碼檔案,命令格式如下:

C: \ >ORAPWD FILE= < FILENAME >  PASSWORD
= < PASSWORD > ENTRIES=< MAX_USERS >

 


   各命令引數的含義為:

FILENAME :密碼檔名;

PASSWORD :設定 INTERNAL / SYS 帳號的口令;

MAX_USERS :密碼檔案中可以存放的最大使用者數,對應於允許以 SYSDBA / SYSOPER 許可權登入資料庫的最大使用者數。由於在以後的維護中,若使用者數超出了此限制,則需要重建密碼檔案,所以此引數可以根據需要設定得大一些。

   有了密碼檔案之後,需要設定初始化引數 REMOTE_LOGIN_PASSWORDFILE 來控制密碼檔案的使用狀態。

  二、 設定初始化引數 REMOTE_LOGIN_PASSWORDFILE :

   在 Oracle 資料庫例項的初始化引數檔案中,此引數控制著密碼檔案的使用及其狀態。它可以有以下幾個選項:

NONE :指示 Oracle 系統不使用密碼檔案,特權使用者的登入透過作業系統進行身份驗證;

EXCLUSIVE :指示只有一個資料庫例項可以使用此密碼檔案。只有在此設定下的密碼檔案可以包含有除 INTERNAL / SYS 以外的使用者資訊,即允許將系統許可權 SYSOPER / SYSDBA 授予除 INTERNAL / SYS 以外的其他使用者。

SHARED :指示可有多個資料庫例項可以使用此密碼檔案。在此設定下只有 INTERNAL / SYS 帳號能被密碼檔案識別,即使檔案中存有其他使用者的資訊,也不允許他們以 SYSOPER / SYSDBA 的許可權登入。此設定為預設值。
---- 在 REMOTE_LOGIN_PASSWORDFILE 引數設定為 EXCLUSIVE 、 SHARED 情況下, Oracle 系統搜尋密碼檔案的次序為:在系統註冊庫中查詢 ORA_SID_PWFILE 引數值(它為密碼檔案的全路徑名);若未找到,則查詢 ORA_PWFILE 引數值;若仍未找到,則使用預設值 ORACLE_HOME \ DATABASE \ PWDSID.ORA ;其中的 SID 代表相應的 Oracle 資料庫系統識別符號。

三、 向密碼檔案中增加、刪除使用者:

   當初始化引數 REMOTE_LOGIN_PASSWORDFILE 設定為 EXCLUSIVE 時,系統允許除 INTERNAL / SYS 以外的其他使用者以管理員身份從遠端或本機登入到 Oracle 資料庫系統,執行資料庫管理工作;這些使用者名稱必須存在於密碼檔案中,系統才能識別他們。由於不管是在建立資料庫例項時自動建立的密碼檔案,還是使用工具 ORAPWD.EXE 手工建立的密碼檔案,都只包含 INTERNAL / SYS 使用者的資訊;為此,在實際操作中,可能需要向密碼檔案新增或刪除其他使用者帳號。

   由於僅被授予 SYSOPER / SYSDBA 系統許可權的使用者才存在於密碼檔案中,所以當向某一使用者授予或收回 SYSOPER / SYSDBA 系統許可權時,他們的帳號也將相應地被加入到密碼檔案或從密碼檔案中刪除。由此,向密碼檔案中增加或刪除某一使用者,實際上也就是對某一使用者授予或收回 SYSOPER / SYSDBA 系統許可權。

   要進行此項授權操作,需使用 SYSDBA 許可權(或 INTERNAL 帳號)連入資料庫,且初始化引數 REMOTE_LOGIN_PASSWORDFILE 的設定必須為 EXCLUSIVE 。具體操作步驟如下:

   建立相應的密碼檔案;

   設定初始化引數 REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE ;

   使用 SYSDBA 許可權登入:

CONNECT SYS / internal_user_passsword AS SYSDBA ;

 


   啟動資料庫例項並開啟資料庫;

   建立相應使用者帳號,對其授權(包括 SYSOPER 和 SYSDBA ):
   授予許可權: GRANT SYSDBA TO user_name ;
   收回許可權: REVOKE SYSDBA FROM user_name ;

   現在這些使用者可以以管理員身份登入資料庫系統了;

  四、 使用密碼檔案登入:

   有了密碼檔案後,使用者就可以使用密碼檔案以 SYSOPER / SYSDBA 許可權登入 Oracle 資料庫例項了,注意初始化引數 REMOTE_LOGIN_PASSWORDFILE 應設定為 EXCLUSIVE 或 SHARED 。任何使用者以 SYSOPER / SYSDBA 的許可權登入後,將位於 SYS 使用者的 Schema 之下,以下為兩個登入的例子:

1. 以管理員身份登入:

   假設使用者 scott 已被授予 SYSDBA 許可權,則他可以使用以下命令登入:

CONNECT scott / tiger AS SYSDBA

 


2. 以 INTERNAL 身份登入:

CONNECT INTERNAL / INTERNAL_PASSWORD


五、密碼檔案的維護:

1. 檢視密碼檔案中的成員:

   可以透過查詢檢視 V$PWFILE_USERS 來獲取擁有 SYSOPER / SYSDBA 系統許可權的使用者的資訊,表中 SYSOPER / SYSDBA 列的取值 TRUE / FALSE 表示此使用者是否擁有相應的許可權。這些使用者也就是相應地存在於密碼檔案中的成員。

2. 擴充套件密碼檔案的使用者數量:

   當向密碼檔案新增的帳號數目超過建立密碼檔案時所定的限制(即 ORAPWD.EXE 工具的 MAX_USERS 引數)時,為擴充套件密碼檔案的使用者數限制,需重建密碼檔案,具體步驟如下:

a) 查詢檢視 V$PWFILE_USERS ,記錄下擁有 SYSOPER / SYSDBA 系統許可權的使用者資訊;

b) 關閉資料庫;

c) 刪除密碼檔案;

d) 用 ORAPWD.EXE 新建一密碼檔案;

e) 將步驟 a 中獲取的使用者新增到密碼檔案中。

3. 修改密碼檔案的狀態:

   密碼檔案的狀態資訊存放於此檔案中,當它被建立時,它的預設狀態為 SHARED 。可以透過改變初始化引數 REMOTE_LOGIN_PASSWORDFILE 的設定改變密碼檔案的狀態。當啟動資料庫事例時, Oracle 系統從初始化引數檔案中讀取 REMOTE_LOGIN_PASSWORDFILE 引數的設定;當載入資料庫時,系統將此引數與口令檔案的狀態進行比較,如果不同,則更新密碼檔案的狀態。若計劃允許從多臺客戶機上啟動資料庫例項,由於各客戶機上必須有初始化引數檔案,所以應確保各客戶機上的初始化引數檔案的一致性,以避免意外地改變了密碼檔案的狀態,造成資料庫登陸的失敗。

4. 修改密碼檔案的儲存位置:

   密碼檔案的存放位置可以根據需要進行移動,但作此修改後,應相應修改系統註冊庫有關指向密碼檔案存放位置的引數或環境變數的設定。

5. 刪除密碼檔案:

   在刪除密碼檔案前 , 應確保當前執行的各資料庫例項的初始化引數 REMOTE_LOGIN_PASSWORDFILE 皆設定為 NONE 。在刪除密碼檔案後,若想要以管理員身份連入資料庫的話,則必須使用作業系統驗證的方法進行登入。

 

------------------------------------ 

 

alter user sys identified by abc一下,就連資料庫中的密碼和密碼檔案中的密碼一起改成abc了;  

 

---------------------------------------

 

 

 

 

特權使用者是指SYSDBA或者SYSOPER許可權的使用者,登陸的時候用 as sysdba或者as sysoper。我們這裡用SYS使用者來做個例子,當SYS使用者以作業系統認證方式登陸的時候,SYS儲存在資料庫中的密碼是不被使用的。這裡,作業系統認證方式也透過遠端進行,前提是你和資料庫伺服器的連線是使用的安全連線,TCP協議不屬於安全連線,用於區域網訪問的NETBIOS協議應該是屬於安全連線,這個是windows作業系統內部網 間訪問採用的協議,如果是透過域使用者登陸的我估計也是安全連線,但是我不清楚具體採用的協議,從資料庫管理角度來看,遠端方式的作業系統認證一般不推薦使用,有安全漏洞。
??下面我們主要說說密碼檔案方式認證。
??我們在資料庫建立初期給sys使用者設立了一個密碼,同時密碼檔案中也儲存了該密碼的加密文字。密碼檔案中的密碼和資料庫中儲存的SYS使用者的密碼是同步的,你在Oracle Enterprise Manger Console中更改SYS密碼的同時,密碼檔案$oracle_home\database下面的密碼檔案也被同步修改了,這點你可以從密碼檔案的修改時間看出來。反之,如果你修改了密碼檔案密碼,資料庫中的密碼也會被修改。
??可以作如下試驗:
??1.刪除密碼檔案(密碼檔案一般位於$oracle_home\database)
??2.利用orapwd建立密碼檔案,密碼為BBBBBB,如果原本密碼為AAAAAA。Orapwd file=D:\oracle\ora92\database\pwdorcl.ora password=BBBBBB entries=5
??3.禁用作業系統認證。註釋掉$oracle_home\network\admin sqlnet.ora 中 #SQLNET.AUTHENTICATION_SERVICES= (NTS)
??4.在sqlplus中connect sys/AAAAAA as sysdba;登陸失敗;改用connect sys/BBBBBB as sysdba應該可以登陸成功;
??5.修改sys使用者密碼: alter user sys identified by AAAAAA;
??6.斷開和資料庫連線disconnect;
??7.connect sys/BBBBBB as sysdba;失敗 connect sys/AAAAAA成功
??
??oralce中的密碼檔案建立的時候密碼只是針對SYS使用者的,所以如果你有其他使用者如test被賦予了sysdba許可權,當用test使用者以sysdba許可權登陸的時候,應該使用test自己的密碼,而不是oracle密碼檔案建立時候的密碼。

 

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

相關文章