說說密碼檔案Passwordfile(二)
首先,要說明的問題是,密碼檔案是駐留在資料庫伺服器上的一個檔案。如果資料庫是使用OUI安裝的,密碼檔案是預設生成的。其中維護的具有SYSDBA管理許可權的使用者資訊,也是隨著系統執行自動維護的。
一般來說,是不需要我們直接進行密碼檔案的管理工作。但是有時候,當發生密碼檔案被破壞的時候,常常需要手工的重建密碼檔案。
“使用管理員帳號不能登陸”
有時候我們會發生這樣的事情(在網上也經常看到這樣的詢問貼),需要啟動資料庫,但是輸入了正確的使用者名稱和密碼不能登陸。這種問題的解決也比較通用。
1、 確認密碼檔案起效情況。密碼檔案就是一個物理檔案,儲存著可以在例項關閉時登入使用者的帳號密碼資訊。但是是否使用密碼檔案就是需要系統引數來控制了。這個引數就是remote_login_passwordfile,其各種取值已經在前面講述過了,這裡就不累述。一般我們就確認為Exclusive或者NONE。如果不想使用密碼檔案,就是用NONE值。如果使用密碼檔案,就設定為Exclusive值。不使用密碼檔案,就只能使用作業系統層面驗證,一般認為這樣安全問題更大。所以,通常我們的設定都是exclusive;
2、 判斷密碼檔案情況。可以透過檢視v$pwfile_users來檢查使用者列表。如果檢查不到或者資訊有問題,就需要手工重新建立密碼檔案了。
建立密碼檔案
使用orapwd命令建立密碼檔案,具體語法格式和引數為:
ORAPWD file=[filename] password=[password] [entries=numberuser] [force=y/n] [ignorecase=y/n];
其中:
ü file表示生成檔案的路徑和名稱(本引數是必須錄入專案);
ü password表示sys使用者的密碼(必須錄入專案),用來驗證生成操作是否合法;
ü entries表示檔案中允許容納使用者的最大數量。密碼檔案是容納具有sysdba、sysoper等管理的使用者資訊,預設情況下是由sys在其中。實際生產環境下,是不可能使用sys如此許可權的使用者進行日常管理的。必然有一些自定義的資料庫管理員和操作員,具有sysdba和sysoper許可權。這些資訊都要存放在密碼檔案中。Entries引數專案就是定義這個檔案最大可以容納的使用者資訊數量。Oracle官方文件中,建議設定這個值為一個高於實際需要的值,供日後擴充時使用;
ü force:是否覆蓋已存在的密碼檔案。如果設定為Y,表示如果現在存在有密碼檔案,就覆蓋掉。預設值為N;
ü ignorecase:忽視大小寫。是儲存密碼的一種策略。如果設定為Y,表示忽視大小寫。注意:在早期的Oracle版本中(包括10g),使用者密碼是不區分大小寫的,輸入之後,Oracle在內部全部按照大寫處理。而這個不合時宜的特性在Oracle11g中進行了修正,預設情況下,已經支援大小寫使用者密碼。
下面是一個例項:
//下面是在windows cmd命令視窗中
D:\oracle\database>orapwd file=PWDorcl.ora password=syspassword entries=5 force=y
D:\oracle\database>
透過上面的分析,我們已經瞭解密碼檔案就是管理員sysdba和操作員sysoper使用者資訊在資料庫外的一個備份。這樣,一個新的問題出現了,賬戶資訊在密碼檔案上的更新和同步是一個什麼過程呢?
這裡面,sys賬戶和非sys帳號有所區別。
首先,我們賦給scott許可權sysdba。
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
//授權
SQL> grant sysdba to scott;
授權成功。
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
SCOTT TRUE FALSE
Scott也可以使用密碼檔案進行登入了。下面,我嘗試修改兩個使用者的密碼。
SQL> -- Modify the user
SQL> alter user SCOTT
2 identified by tiger1;
User altered
SQL>
SQL> -- Modify the user
SQL> alter user SYS
2 identified by sys;
User altered
停止例項執行,再次空例項登入。注意:為驗證效果,已關閉作業系統驗證機制!
SQL> shutdown
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> quit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開
D:\oracle\database>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 1月 24 00:07:00 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges //OS層面驗證已經終止
SQL> conn sys/sys as sysdba
已連線到空閒例程。
SQL> conn scott/tiger1 as sysdba
已連線到空閒例程。
發現,在修改了密碼的情況下。密碼檔案是會隨著alter user命令而進行修改同步的。
那麼,如果我重建了密碼檔案,或者修改了引數remote_login_passwordfile的情況下,又是如何?
先看重建密碼檔案。
D:\oracle\database>orapwd file=PWDorcl.ora password=sys entries=5 force=y //重建密碼檔案
此時,密碼檔案中的使用者資訊:
//重建密碼檔案之前!
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
SCOTT TRUE FALSE
//重建密碼檔案之後
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
差異顯而易見,當重新建立密碼檔案之後,系統對sys使用者和非sys使用者的處理方法是不同的。如果是sys使用者,新密碼檔案是存在的。但是對於非sys使用者的具有管理員許可權的使用者,密碼檔案中的資訊被去除掉。
如果這時候我們登入,則:
//實驗需要,關閉資料庫
SQL> shutdown
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> quit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開
D:\oracle\database>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 1月 24 00:22:41 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges //OS層面禁用
SQL> conn sys/sys as sysdba; //sys還在密碼檔案中,登入無問題
已連線到空閒例程。
SQL> conn scott/tiger1 as sysdba;
ERROR:
ORA-01031: insufficient privileges //登入失敗!!!
警告: 您不再連線到 ORACLE。
SQL>
那麼,這種時候,scott還具有sysdba許可權,如何處理呢?需要手工的重新對scott(非sys)使用者授權。
SQL> revoke sysdba from scott;
撤銷成功。
SQL> grant sysdba to scott;
授權成功。
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
SCOTT TRUE FALSE
發現這樣處理下之後,scott又重新出現在密碼檔案中了。
那麼,如果變化引數remote_login_passwordfile呢?
SQL> alter system set remote_login_passwordfile=NONE scope=spfile;
系統已更改。
--當重新啟動之後
SQL> select * from v$pwfile_users;
未選定行 –NONE選項,表示不需要使用密碼檔案;
--再次修改回原有結構。
SQL> alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;
系統已更改。
此時,重新啟動資料庫伺服器。
SQL> conn sys/sys as sysdba; //sys密碼檔案起效
已連線到空閒例程。
SQL> conn scott/tiger1 as sysdba; //scott密碼檔案起效
已連線到空閒例程。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 205523844 bytes
Database Buffers 398458880 bytes
Redo Buffers 7135232 bytes
資料庫裝載完畢。
資料庫已經開啟。
//判斷密碼檔案使用者
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
SCOTT TRUE FALSE
結論:當引數模式從Exclusive轉化到NONE的時候,密碼檔案徹底失效,密碼檔案檢視結果為空。當從NONE轉回到Exclusive的時候,密碼檔案會重新建立。這個過程中,sys與非sys使用者效用相同。
下面,我們來進行一些實驗,進一步瞭解密碼檔案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-684510/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 說說密碼檔案Passwordfile(一)密碼
- 說說密碼檔案Passwordfile(三)密碼
- Oracle密碼檔案的作用和說明Oracle密碼
- REMOTE_LOGIN_PASSWORDFILE引數和ORAPW密碼檔案REM密碼
- saltstack/saltmaster配置檔案說明(二)AST
- 【Docker】(10)---詳細說說 Dockerfile檔案Docker
- 簡單說說webpack的配置檔案Web
- Infer - 檔案說明
- 檔案-spfile說明
- Oracle中passwordfile的作用及說明考試大全Oracle
- php檔案操作錯誤程式碼說明PHP
- 無密碼身份認證,跟密碼說再見!密碼
- 說說在 Python 中,如何寫入檔案Python
- fepk檔案格式說明
- 說說我和Mac(二)Mac
- JVM(筆記)—— Class 類檔案結構的說明(二)JVM筆記
- Oracle Listener設定密碼示例說明Oracle密碼
- Nginx的配置檔案說明Nginx
- Docker 的配置檔案說明Docker
- LINUX常用檔案說明Linux
- android混淆檔案說明Android
- 檔案-init.ora說明
- MySQL 日誌檔案 說明MySql
- Apache 配置檔案說明(轉)Apache
- 【口令檔案】remote_login_passwordfileREM
- 說說Oracle監聽器(二)Oracle
- Linux下玩轉nginx系列(二)——nginx配置檔案說明LinuxNginx
- 關於密碼檔案,SYS密碼密碼
- Oracle 密碼檔案Oracle密碼
- Nginx配置檔案詳細說明Nginx
- linux日誌檔案說明Linux
- Redis配置檔案引數說明Redis
- TIFF檔案格式中文解說.txt
- oracle控制檔案轉儲說明Oracle
- Linux的基本檔案說明Linux
- 說說在 Python 中,如何讀取檔案中的資料Python
- Java 大檔案IO操作效率對比【我說說 你瞅瞅】Java
- Oracle:ASM & 密碼檔案OracleASM密碼