0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Oracle Databaseのパスワードをハッシュ値で変更してみた

Posted at

はじめに

Oracle Databaseのパスワードは、パスワードベースのキー導出関数(PBKDF2)およびSHA-512暗号化ハッシュ関数を含む非最適化されたアルゴリズムに基づいてハッシュ化されています(Oracle Databaseの組込みパスワード保護の概要)。
その保存されているハッシュ値ベースでもパスワードを設定できるため、その方法を紹介します。
たとえば、パスワードを変更前に戻してほしいが誰もパスワードはわからない、といったケースに利用できます(レアケースですが、、)。

パスワードハッシュ値の確認

今回はOracle XE 21cの環境を利用します。
XEPDB1というPDBにTEST01というユーザを hogehogehoge というパスワードで作成し、接続してみます。

11g辺りまではdba_usersのPASSWORDでハッシュ値が確認できましたが、12c以降はできないです。

ユーザ作成
SQL> create user test01 identified by hogehogehoge;

ユーザーが作成されました。

SQL> grant create session to test01;

権限付与が成功しました。

SQL> select username, password from dba_users where username like 'TEST%';

USERNAME                       PASSWORD
------------------------------ --------------------------------------------------------------
TEST01

SQL> conn test01/hogehogehoge@xepdb1;
接続されました。

sysdbaに戻り、ハッシュ値を確認します、一部マスクしてます。

ハッシュ値の確認
SQL> SELECT name, spare4 FROM sys.user$ where name like 'TEST%';

NAME       SPARE4
---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TEST01     S:xxxxxxxxx2570779B32F28E134FA26A64B0EBB68B85904A9xxxxxxxxxxxx;T:xxxxxxxxxxxxxxx3F85932D369AF3113F26310E9BE2DDBE57090A22D0AF7D8355B18B8541D853D5AA87F7E9xxxxxx7B0DBEBF73572861C3F9B4473E43081C4EC099265261342B78AB6F7BCBF67Bxxxxx

ハッシュ値でのパスワード変更

この状態で一度 TEST01 ユーザのパスワードを新パスワード asahidetest01 に変更します。

TEST01ユーザの新パスワードへの変更
SQL> alter user test01 identified by asahidetest01;

ユーザーが変更されました。

SQL> conn test01/asahidetest01@xepdb1;
接続されました。

元のパスワード(hogehogehoge)では当然接続できません。

元のパスワードでの接続失敗
SQL> conn test01/hogehogehoge@xepdb1;
ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。

警告: Oracleにはもう接続されていません。

ハッシュ値の確認、で確認したパスワードへ戻し(一部マスク化してます)、元のパスワード(hogehogehoge)で再接続してみます。無事接続されました。

ハッシュ値でのパスワード変更と元のパスワードでの再接続
SQL> alter user test01 identified by values 'S:xxxxxxxxx2570779B32F28E134FA26A64B0EBB68B85904A9xxxxxxxxxxxx;T:xxxxxxxxxxxxxxx3F85932D369AF3113F26310E9BE2DDBE57090A22D0AF7D8355B18B8541D853D5AA87F7E9xxxxxx7B0DBEBF73572861C3F9B4473E43081C4EC099265261342B78AB6F7BCBF67Bxxxxx';

ユーザーが変更されました。

SQL> conn test01/hogehogehoge@xepdb1;
接続されました。

まとめ

ということで、定期的に sys.user$ の spare4 の値を取得しておくことで、パスワードがわからなくなってもリカバリは可能となります。
あまり使い道はないかもしれませんが、クライアント側でもパスワードを暗号化して保持されていることが増えてきてますので、緊急時には利用できるかもしれません。

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?