Oracle DB のパスワードが分からなくなった時の裏技

Oracle Database で、あるユーザのパスワードが分からなくなった時に、以下の方法でパスワードを変更することができる。

-- ALTER USER 権限を持つユーザで接続する

-- SYS ユーザのパスワードを「test」に変更する
ALTER USER SYS IDENTIFIED BY test;

-- パスワード test でログインできるようになる
CONNECT SYS/test@hoge AS SYSDBA

実は ALTER USER 権限さえあれば元のパスワードが分からなくとも、他のユーザのパスワードは変更できる

さらに、以下の手順を踏めば、変更したパスワードを元に戻すこともできる。そのユーザを使いたいがパスワードが分からない、という時にこれで回避できるだろう。

-- ALTER USER 権限を持つユーザで接続する
-- 予め、ユーザ名と「パスワードの暗号文字列」を控えておく
SELECT USERNAME, PASSWORD FROM DBA_USERS;

/* ココカラさっきと同じ */
-- SYS ユーザのパスワードを「test」に変更する
ALTER USER SYS IDENTIFIED BY test;
-- パスワード test でログインする
CONNECT SYS/test@hoge AS SYSDBA
-- SYS ユーザとして好きに作業する
/* ココマデさっきと同じ */

-- 再度 ALTER USER 権限を持つユーザで接続する
-- SYS ユーザのパスワードを元の暗号文字列に戻す
ALTER USER SYS IDENTIFIED BY VALUES '【元の暗号文字列】';

暗号化された文字列を BY VALUES で直接渡すことで、仮に元のパスワード自体が分からなくとも、元のパスワードに戻せる。

さすがに暗号化されたパスワード文字列を復号する方法はないようなので、以前のパスワードを知る方法は諦めるしか…。