※ 本記事は2016年12月21日に公開されたものです。
Oracle Databaseでは一般のデータベースユーザーのパスワードをデータベースの内部で管理しています。
具体的には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ファイル)で、以下の設定をおこない、その後パスワードを変更する事により、保存されるパスワードの形式を限定することができます。
- Oracle Database 12cの場合、SQLNET.ALLOWED_LOGON_VERSION_SERVERパラメータ
値:
12a: 12C
12: 11G 12C (12cR2のデフォルト)
11: 10G 11G 12C (12cR1のデフォルト)
- Oracle Database11g(11.2.0.4)の場合、SQLNET.ALLOWED_LOGON_VERSIONパラメータ
値:12: 11G11: 10G 11G (デフォルト)
このパラメータをより安全な大きな値にすると、それ以前のデータベースクライアントからの接続ができなくなる事にご注意ください。また、10.2.0.3以前のバージョンではパッチ(CPUOct2012以降)の適用により動作が変わりますのでご注意ください。
10g以前の独自のパスワード保存形式はセキュリティ的に脆弱である事が分かっています。より安全を期すためにこの形式でのパスワードを保存しない設定にすることもご検討ください。12cR2からはデフォルトの設定で独自のパスワード保存形式でのパスワードの保存がされなくなっています。
ただし、保存形式の安全性よりも重要なのは複雑なパスワードを設定し、設定したパスワードを知られないように保護することです。まずは簡単なパスワードが設定できないような運用(パスワードプロファイル機能の活用)をすることをお勧めします。
