※ 本記事は2016年12月21日に公開されたものです。

Oracle Databaseでは一般のデータベースユーザーのパスワードをデータベースの内部で管理しています。

どのように管理しているかはOracle Database 10gまでと11g、12cで異なります。

具体的にはOracle Database 10gまでは独自のパスワード保存形式でしたが、11gからはSALT付きSHA-1ハッシュアルゴリズム、12cからはSALT付きSHA-512ハッシュアルゴリズムが利用できるようになっています。データベースユーザーのパスワードがどのようにデータベースの中に保存されているかはDBA_USERSビューのPASSWORD_VERSIONS列から確認可能です。

select username,password_versions from dba_users where account_status=’OPEN’;

SQL> select username,password_versions from dba_users where account_status='OPEN';
USERNAME         PASSWORD_VER
---------------- ------------
APPUSER          10G 11G 12C
APP              10G 11G 12C
DBSNMP           10G 11G 12C
PUKU             11G 12C
APPADMIN         12C
PDBADMIN         10G 11G 12C
SYSTEM           10G 11G 12C
SYS              10G 11G 12C
  • PASSWORD_VERSIONS列に10Gが含まれる場合、独自のパスワード保存形式でパスワードが保存されています。
  • PASSWORD_VERSIONS列に11Gが含まれる場合、SALT付きSHA-1でパスワードが保存されています。
  • PASSWORD_VERSIONS列に12Cが含まれる場合、SALT付きSHA-512でパスワードが保存されています。 

なお、プロファイル・パラメータ(sqlnet.oraファイル)で、以下の設定をおこない、その後パスワードを変更する事により、保存されるパスワードの形式を限定することができます。

値:
12a: 12C
12: 11G 12C (12cR2のデフォルト)
11: 10G 11G 12C (12cR1のデフォルト)

値:
12: 11G
11: 10G 11G (デフォルト)

このパラメータをより安全な大きな値にすると、それ以前のデータベースクライアントからの接続ができなくなる事にご注意ください。また、10.2.0.3以前のバージョンではパッチ(CPUOct2012以降)の適用により動作が変わりますのでご注意ください。

10g以前の独自のパスワード保存形式はセキュリティ的に脆弱である事が分かっています。より安全を期すためにこの形式でのパスワードを保存しない設定にすることもご検討ください。12cR2からはデフォルトの設定で独自のパスワード保存形式でのパスワードの保存がされなくなっています。

ただし、保存形式の安全性よりも重要なのは複雑なパスワードを設定し、設定したパスワードを知られないように保護することです。まずは簡単なパスワードが設定できないような運用(パスワードプロファイル機能の活用)をすることをお勧めします。