有時需以某用戶身份操作,但不知其密碼,又不想永久修改密碼。本文介紹修改用戶名、密碼的標準方法,以及「臨時替換密碼、事後恢復」的進階技巧。
su - oraclesqlplus /nologconn sys/password as sysdba-- 1. 查詢目標用戶的 USER#
SELECT user#, name FROM user$; -- 假設 user#=66
-- 2. 修改用戶名
UPDATE user$ SET name='新用戶名' WHERE user#=66;
COMMIT;
警告: 直接更新 USER$ 屬於非支持操作,極易導致數據字典不一致,生產環境強烈建議使用 RENAME USER(12c+)或導出/導入重建用戶。
ALTER USER 用戶名 IDENTIFIED BY 新密碼;
COMMIT;
原理:DBA_USERS.PASSWORD 存儲的是密碼哈希值。先備份哈希,修改為已知密碼,操作完成後用 IDENTIFIED BY VALUES '哈希值' 恢復原密碼。
-- 1. 以 SYSDBA 登入,查詢目標用戶當前密碼哈希
SELECT username, password FROM dba_users WHERE username='SYSTEM';
-- 假設返回哈希:2D594E86F93B17A1
-- 2. 修改為臨時密碼
ALTER USER system IDENTIFIED BY manager;
-- 3. 以臨時密碼登入,執行所需操作
CONNECT system/manager
-- ... do something ...
-- 4. 恢復原密碼哈希
CONNECT sys/oracle as sysdba
ALTER USER system IDENTIFIED BY VALUES '2D594E86F93B17A1';
-- 5. 驗證原密碼生效
CONNECT system/oracle -- 成功
CONNECT system/manager -- 失敗 ORA-01017
ALTER USER 用戶名 ACCOUNT UNLOCK;
ALTER USER ... IDENTIFIED BY;USER$ 修改用戶名風險極高,非必要勿用。