在 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 。在刪除密碼文件後,若想要以管理員身份連入數據庫的話,則必須使用操作系統驗證的方法進行登錄。