ORA-28002觸發對概要檔案的理解
關於ORA-28002和ORA-28001的故障處理思路和過程:
收到報錯:ORA-28002 :the password will expire within 7 days 提示使用者密碼7天之後將要過期,經查詢可知:這個問題是由於Oracle 11G的新特性所致, Oracle 11G建立使用者時預設密碼過期限制是180天, 如果超過180天使用者密碼未做修改則該使用者無法登入。可透過SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'語句查詢密碼的有效期設定,LIMIT欄位是密碼有效天數,並且這個新特性是概要檔案控制的,
解決辦法:
1:重新修改使用者密碼:
alter user hezi identified by oracle; ##這樣之後hezi這個使用者的密碼重新計算過期時間。
如果您想永久解決那麼你可以按著下面的方式操作:
先查出使用者使用的概要檔案,如下所示使用的是預設的概要檔案。
SQL> select USERNAME,PROFILE from dba_users where USERNAME='HEZI';
USERNAME PROFILE
------------------------------ ------------------------------
HEZI DEFAULT
修改概要檔案的密碼有效天數的屬性,改成無限,需要注意的是,如果資料庫的某個使用者已經報錯ORA-28002或者ORA-28001,那麼你修改概要檔案,也不起作用了,最後會演示實驗。
alter profile default limit PASSWORD_LIFE_TIME unlimited;
這樣操作之後,所有使用default概要檔案的使用者都不會過期了,其實你可以為某個使用者單獨建立一個概要檔案,如下:
SQL> create profile hezi_profile limit PASSWORD_LIFE_TIME unlimited;
Profile created.
SQL> alter user frank profile hezi_profile;
User altered.
如下檢視結果,hezi這個使用者已經是使用前面新建立的概要檔案了。
SQL>select username ,profile from dba_users where username ='HEZI'
USERNAME PROFILE
------------------------------ ------------------------------
HEZI HEZI_PROFILE
現在討論下概要檔案相關內容:
oracle概要檔案主要兩方面內容:
1,管理某個使用者使用伺服器的資源,
2,管理帳戶狀態和口令屬性的限制。
注:只有將RESOURCE_LIMIT設定為TRUE,概要檔案才能強制執行資源限制。但是針對口令的限制不受這個引數影響,總是強制實施概要檔案對使用者口令的限制。概要檔案儲存在資料字典中,由oracle自己管理維護。
概要檔案是用於限制資料庫用法和例項資源的一組已命名的資源限制條件。透過概要檔案還可管理帳戶狀態並對使用者的口令進行限制(長度、失效時間等)。每個使用者都分配有一個概要檔案,而且該使用者在指定時間只屬於一個概要檔案。如果在更改使用者概要檔案時使用者已經登入,則所做更改只在使用者下一次登入時才生效。
DEFAULT概要檔案用作其它所有概要檔案的基礎。
除非RESOURCE_LIMIT初始化引數設定為TRUE,否則不能透過概要檔案強行設定使用者的資源限制。
如果RESOURCE_LIMIT使用預設值FALSE,則忽略概要檔案資源限制。總是強制實施概要檔案口令設定
Oracle系統為了合理分配和使用系統的資源提出了概要檔案的概念。所謂概要檔案,就是一份描述如何使用系統的資源(主要是CPU資源)的配置檔案。將概要檔案賦予某個資料庫使用者,在使用者連線並訪問資料庫伺服器時,系統就按照概要檔案給他分配資源,概要檔案儲存在資料字典中,由oracle自己管理維護,
概要檔案裡面包含的內容很多,其中就包含了很多關於使用者口令的一些限制,
在有的書中將其翻譯為配置檔案,其作用包括。
1、管理資料庫系統資源。
利用Profile來分配資源限額,必須把初始化引數resource_limit設定為true
ALTER SYSTEM SET resource_limit=TRUE SCOPE=BOTH;
2、管理資料庫口令及驗證方式。
預設給使用者分配的是DEFAULT概要檔案,將該檔案賦予了每個建立的使用者。但該檔案對資源沒有任何限制,因此管理員常常需要根據自己數
據庫系統的環境自行建立概要檔案,下面介紹如何建立及管理概要檔案。
示例:
CREATE PROFILE pro_test LIMIT CPU_PER_SESSION 1000
--cpu每秒會話數
任意一個會話所消耗的量(時間量為1/100秒)
CPU_PER_CALL 1000
--cpu每秒呼叫數
任意一個會話中的任意一個單獨資料庫呼叫所消耗的量(時間量為1/100秒)
CONNECT_TIME 30
--允許連線時間
任意一個會話連線時間限定在指定的分鐘數內
IDLE_TIME DEFAULT
--允許空閒時間
SESSIONS_PER_USER 10
--使用者最大並行會話數(指定使用者的會話數量)
LOGICAL_READS_PER_SESSION 1000 --讀取數/會話(單位:塊)
LOGICAL_READS_PER_CALL 1000 --讀取數/呼叫(單位:塊)
PRIVATE_SGA 16K --專用sga
COMPOSITE_LIMIT 1000000 --組合限制(單位:單元)
FAILED_LOGIN_ATTEMPTS 10 --登入幾次後
PASSWORD_LOCK_TIME 10 --鎖定時間(單位:天)
PASSWORD_GRACE_TIME 120 --多少天后鎖定
PASSWORD_LIFE_TIME 60 --口令有效期(單位:天)
PASSWORD_REUSE_MAX UNLIMITED --保留口令歷史記錄:保留次數(單位:次)
PASSWORD_REUSE_TIME 120 --保留口令歷史記錄:保留時間(單位:天)
PASSWORD_VERIFY_FUNCTION DEFAULT --啟用口令複雜 ......
create profile xxx limit ...;LIMIT後面是各種資源限定
alter user lyn profile xxx;是將使用者lyn交給xxx這個PROFILE限制
create user lyn profile xxx;是在建立使用者的時候指定XXX這個概要檔案而不是預設的default
oracle profile儲存在的資料字典中. 由資料庫自己維護.
SQL> desc dba_profiles
Name Null? Type
----------------------------------------- -------- ----------------------------
PROFILE NOT NULL VARCHAR2(30)
RESOURCE_NAME NOT NULL VARCHAR2(32)
RESOURCE_TYPE VARCHAR2(8)
LIMIT VARCHAR2(40)
SQL> select * from dba_profiles where profile='DEFAULT';
PROFILE RESOURCE_NAME RESOURCE LIMIT
---------- -------------------------------- -------- ----------------------------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED //
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED //每個使用者名稱所允許的並行會話數
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED //一個會話一共可以使用的CPU時間,單位是百分之一秒
DEFAULT CPU_PER_CALL KERNEL UNLIMITED //一次SQL呼叫(解析、執行和獲取)允許使用的CPU時間
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED //限制會話對資料塊的讀取,單位是塊
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED //限制SQL呼叫對資料塊的讀取,單位是塊
DEFAULT IDLE_TIME KERNEL UNLIMITED //允許空閒會話的時間,單位是分鐘
DEFAULT CONNECT_TIME KERNEL UNLIMITED //限制會話連線時間,單位是分鐘
DEFAULT PRIVATE_SGA KERNEL UNLIMITED //限制會話在SGA中Shared Pool中私有空間的分配
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10 //指定鎖定使用者的登入失敗次數
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED //密碼可以被使用的天數,單位是天,預設值180天
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED //密碼可重用的間隔時間(結合PASSWORD_REUSE_MAX)
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED //密碼的最大改變次數(結合PASSWORD_REUSE_TIME)
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED //超過錯誤嘗試次數後,使用者被鎖定的天數,預設1天
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED //當密碼過期之後還有多少天可以使用原密碼
刪除PROFILE:
drop profile [資原始檔名] [CASCADE] ;
若建立的PROFILE已經授權給了某個使用者,使用CASCADE級聯收回相應的限制,收回限制資訊後將以系統預設的PROFILE對該使用者進行限制。
設定PROFILE引數的生效時間
1、使用者所有擁有的PROFILE中有關密碼的限制立即生效,不受限制。從這個可看出Oracle對使用者密碼的重視程度。
2、使用者所有擁有的PROFILE中有關資源的限制與resource_limit引數的設定有關,當為TRUE時生效,當為FALSE時(預設值)設定任何值都無效。
SQL> show parameter resource_limit
NAME TYPE VALUE
-------------------- ----------- -------
resource_limit boolean FALSE
修改profile:
alter profile default RESOURCE_NAME 1000;
如:
alter profile default limit failed_login_attempts 1000;
alter profile default limit failed_login_attempts unlimited;
我們可以手動的建立一個profile,並指定限制:
SQL> create profile frank_profile limit
2 SESSIONS_PER_USER 5
3 IDLE_TIME 2
4 FAILED_LOGIN_ATTEMPTS 5;
Profile created.
SQL> alter user frank profile frank_profile;
User altered.
如果使用者密碼即將過期,在登入資料庫時會收到如下提示:
ERROR:
ORA-28002: the password will expire within 7 days
當然,此時密碼還未真正過期,使用者在收到錯誤提示後依然可以登入資料庫。但是,如果當收到密碼即將過期的提示,想要開啟autotrace就會有問題。
- SQL> conn darren/darren
- ERROR:
- ORA-28002: the password will expire within 7 days
- Connected.
- SQL> set autotrace on;
- ERROR:
- ORA-28002: the password will expire within 7 days
SP2-0619: Error while connecting
SP2-0611: Error enabling STATISTICS report
既然出現了密碼即將過期的提示,說明profile中的PASSWORD_LIFE_TIME引數肯定沒有設定成unlimited,可以檢視dba_profiles進行驗證:
- SQL> select profile,resource_name,limit from dba_profiles where resource_name='PASSWORD_LIFE_TIME';
- PROFILE RESOURCE_NAME LIMIT
- ---------- -------------------------------- ----------
- DEFAULT PASSWORD_LIFE_TIME 180
如果生產環境沒有對密碼過期的特殊限制,可以把該引數修改為unlimitd:
- ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED
此時再嘗試開啟autotrace:
- SQL> select profile,resource_name,limit from dba_profiles where resource_name='PASSWORD_LIFE_TIME';
- PROFILE RESOURCE_NAME LIMIT
- ---------- -------------------------------- ----------
- DEFAULT PASSWORD_LIFE_TIME UNLIMITED
- SQL> conn darren/darren
- ERROR:
- ORA-28002: the password will expire within 7 days
- Connected.
- SQL> set autotrace on;
- ERROR:
- ORA-28002: the password will expire within 7 days
- SP2-0619: Error while connecting
- SP2-0611: Error enabling STATISTICS report
還是同樣的錯誤,說明在使用者密碼即將過期時,再修改profile是不會對密碼即將過期的使用者生效的。應該採用重設使用者密碼(密碼可以與之前的密碼一樣)的方法。
總結:當你收到ORA-28002或者ORA-28001報錯資訊後,你應該清楚這個使用者使用的概要檔案中PASSWORD_LIFE_TIME引數肯定沒有設定成unlimited,這時候你的處理思路就是重新設定一下密碼(仍然使用原來的密碼),這樣是最快速的,當然你也可以重新建立一個PASSWORD_LIFE_TIME曹氏是limit的概要檔案,並指定給該使用者。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2126026/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 概要檔案常用的命令
- 【使用者概要檔案】建立使用者概要檔案
- ORACLE 概要檔案管理Oracle
- ORACLE概要檔案管理Oracle
- Oracle基礎 09 概要檔案 profileOracle
- WebSphere概要檔案管理工具Web
- 關於SQL SERVER觸發器的理解SQLServer觸發器
- 建立並運用使用者概要檔案
- RAC中對DB引數檔案的簡單理解
- 專案開發中對前端資料管理的理解前端
- .Oracle固定執行計劃之SQL PROFILE概要檔案OracleSQL
- 兩種閱讀理解模型框架的概要介紹模型框架
- with table as觸發ora-03113:通訊通道的檔案結束
- 比對檔案sam檔案的解讀
- Android外掛化原理解析——概要Android
- element-plus 如何點選其它位置觸發檔案上傳
- 理解 Typescript 配置檔案TypeScript
- 對Jsecode專案的理解JS
- 對多種情況下控制檔案的理解與疑問,請指正。
- 理解linux的配置檔案(轉)Linux
- smali檔案對比java檔案Java
- Android 外掛化原理解析(1):概要Android
- JN專案-刪除觸發器的命令觸發器
- 聊聊我對敏捷專案交付的理解敏捷
- 理解linux配置檔案Linux
- mysql關於ibdata檔案的理解MySql
- [譯] 理解 NPM 5 中的 lock 檔案NPM
- python對檔案的操作Python
- 觸發DBWR程式寫髒資料塊到資料檔案的幾個條件
- 各檔案系統對單個檔案大小的限制
- Oracle的檔案號、相對檔案號及其他(續)Oracle
- 臨時檔案的順序和絕對檔案號
- js檔案命名衝突理解JS
- 理解 Proc 檔案系統(轉)
- 理解Linux配置檔案(轉)Linux
- grep檔案比對
- <input type="file">連續選中同一檔案無法觸發onchange事件事件
- Java中對檔案的操作 (轉)Java