Oracle: Password has expired

ใน Oracle สามารถกำหนด profile ให้แต่ละ user ได้ ซึ่งใน profile นั้นจะกำหนดลักษณะของ user account ได้ โดยผ่าน resource และใน resource นี้เอง DBA สามารถกำหนดได้ว่า จะให้ user นี้จะต้องเปลี่ยน password บ่อยแค่ไหน งงม่ะค่ะ

เช่น userA ใช้ profileA ซึ่งใน profileA กำหนดว่า user จะต้องเปลี่ยน password ทุกๆ 180 วัน แบบนี้เป็นต้น

ดังนั้น user ไม่มีการเปลี่ยน password ในเวลาที่กำหนด password ก็จะ expired และเมื่อ log in ก็จะได้ error แบบนี้

ORA-28001: The password has expired

เราจะรู้ได้อย่างไร ว่า user ไหนใช้ profile ไหน และ profile set ไว้อย่างไร ดูได้ดังนี้ค่ะ

> select profile
from dba_users
where username = '<username>';


ซึ่งตัวอย่างคำสั่งข้างต้นเราจะได้ชื่อของ profile ที่ user นั้นๆ ใช้อยู่ จาก profile ถ้าอยากรู้ว่า profile set ไว้อย่างไร ก็ sql command นี้ค่ะ

> select resource_name, resource_type, limit
from dba_profiles
where profile = '<profile>';


แทนที่ชื่อ profile ที่ได้จากคำสั่งข้างต้น ก็จะได้ผลลัพธ์ออกมาประมาณนี้

RESOURCE_NAME                    RESOURCE LIMIT
-------------------------------- -------- ----------------------------------------
COMPOSITE_LIMIT KERNEL UNLIMITED
SESSIONS_PER_USER KERNEL UNLIMITED
CPU_PER_SESSION KERNEL UNLIMITED
CPU_PER_CALL KERNEL UNLIMITED
LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
LOGICAL_READS_PER_CALL KERNEL UNLIMITED
IDLE_TIME KERNEL UNLIMITED
CONNECT_TIME KERNEL UNLIMITED
PRIVATE_SGA KERNEL UNLIMITED
FAILED_LOGIN_ATTEMPTS PASSWORD 10
PASSWORD_LIFE_TIME PASSWORD 180
PASSWORD_REUSE_TIME PASSWORD UNLIMITED
PASSWORD_REUSE_MAX PASSWORD UNLIMITED
PASSWORD_VERIFY_FUNCTION PASSWORD NULL
PASSWORD_LOCK_TIME PASSWORD 1
PASSWORD_GRACE_TIME PASSWORD 7

16 rows selected.

สำหรับการดูว่า user จะ expired ภายในกี่วัน ดูจาก resouce_name ที่ชื่อ PASSWORD_LIFE_TIME ซึ่งในกรณีข้างต้น password จะ expired ภายใน 180 วัน และ user จะต้องเปลี่ยน password ภายในเวลาที่กำหนดไว้ใน PASSWORD_GRACE_TIME ซึ่งก็คือ 7 วัน มิฉะนั้นแล้ว ก็จะ error ดังข้างต้น

ในกรณีที่ ถ้าเกิด error แล้ว ต้องการจะแก้ไข จะต้องใช้ DBA เป็นคนเข้าไปเปลี่ยน password ของ user คนนั้นค่ะ โดย sql command ดังนี้

> alter user <username> identified by <new_password>;


Reference:
ORA-28001: The password has expired
Oracle profile

No comments:

Post a Comment