パスワード ポリシー

適用対象:SQL Server

SQL Server は Windows のパスワード ポリシー メカニズムに対応しています。 パスワード ポリシーは SQL Server 認証を使用するログインに適用され、パスワードを持つ包含データベース ユーザーに適用されます。

SQL Server は、Windows で使用されているのと同じ複雑性と有効期限のポリシーを、SQL Server 内で使用されるパスワードに適用することができます。 この機能は NetValidatePasswordPolicy API に依存します。

注

Azure SQL Database はパスワードの複雑性を強制します。 パスワードの有効期限とポリシー適用のセクションは、Azure SQL Database には適用されません。 Azure SQL Managed Instance のパスワード ポリシーの詳細については、SQL Managed Instance に関する FAQ を参照してください。

パスワードの複雑さ

パスワードの複雑性のポリシーは、使用可能なパスワードの数を増やすことにより、総当り攻撃を防ぐようにデザインされています。 パスワードの複雑性のポリシーが適用される場合、新しいパスワードは次のガイドラインを満たしている必要があります:

  • パスワードにユーザーのアカウント名が含まれていません。

  • パスワードは 8 文字以上である。

  • パスワードは次の 4 つのカテゴリのうちの 3 つのカテゴリの文字を含みます:

    • 英大文字 (A ~ Z)
    • 英小文字 (a ~ z)
    • ベース 10 桁 (0 ~ 9)
    • 感嘆符 (!)、ドル記号 ($)、数値記号 (#)、パーセント (%) などの英数字以外の文字。

パスワードには最大 128 文字まで使用できます。 パスワードはできるだけ長く、複雑にします。

パスワードの有効期限

パスワードの有効期限のポリシーは、パスワードの寿命を管理します。 SQL Server でパスワードの有効期限が適用されている場合、ユーザーは古いパスワードを変更するよう通知され、有効期限が切れたパスワードを持つアカウントは無効になります。

ポリシーの適用

パスワード ポリシーの適用は、SQL Server ログインごとに個別に構成できます。 ALTER LOGINを使用して、SQL Server ログインのパスワード ポリシー オプションを構成します。 パスワード ポリシーの適用を構成する際に、次の規則が当てはまります:

  • CHECK_POLICYが ON に変更されると、次の動作が発生します。

    • CHECK_EXPIRATIONは、明示的に ON に設定されていない限り、OFFにも設定されます。
    • パスワードの履歴が、現在のパスワード ハッシュの値に初期化されます。
    • [アカウント ロックアウトの期間]、 [アカウント ロックアウトのしきい値]、および [ロックアウト カウンターのリセット] も有効になります。
  • CHECK_POLICYが OFF に変更されると、次の動作が発生します。

    • CHECK_EXPIRATION も OFFに設定されます。
    • パスワード履歴は消去されます。
    • lockout_time の値がリセットされます。

政策オプションの組み合わせによってはサポートされないものもある。

  • MUST_CHANGEを指定する場合は、CHECK_EXPIRATIONとCHECK_POLICYをONに設定する必要があります。 そうでない場合、ステートメントは失敗します。

  • CHECK_POLICYが OFF に設定されている場合、CHECK_EXPIRATIONを ON に設定することはできません。 このオプションの組み合わせを持つ ALTER LOGIN ステートメントは失敗します。

  • CHECK_POLICY = ONを設定することで、次のようなパスワードの作成が防止されます。

    • null または空
    • コンピューター名またはログイン名と同じ文字列
    • password、admin、administrator、sa、sysadmin のいずれか

セキュリティ ポリシーは、Windows で設定する場合も、ドメインから受け取る場合もあります。 コンピューターでパスワード ポリシーを表示するには、ローカル セキュリティ ポリシーの MMC スナップイン (secpol.msc) を使用します。

注

CHECK_POLICYが有効になっているSQL Serverログインの場合、ALTER LOGINを実行し、パスワードを変更するコマンドにOLD_PASSWORDを含めない場合、パスワード履歴の強制は無視されます。 これは、以前に使用したパスワードに関わらず、パスワードのリセットを許可する仕様の動作です。 CHECK_POLICYに関連付けられているその他のチェック (長さと複雑さなど) は、OLD_PASSWORDが使用されているかどうかに関係なくチェックされます。

SQL ユーザー パスワード ポリシー情報を確認する

次のクエリを使用して、SQL Server の SQL ユーザー パスワード ポリシーと有効期限を確認できます。 次のクエリは Azure SQL データベースでも機能しますが、Azure SQL データベースではパスワードの複雑性のみが適用されます。

SELECT name,
       is_policy_checked,
       is_expiration_checked,
       LOGINPROPERTY(name, 'IsMustChange') AS IsMustChange,
       LOGINPROPERTY(name, 'IsLocked') AS IsLocked,
       LOGINPROPERTY(name, 'LockoutTime') AS LockoutTime,
       LOGINPROPERTY(name, 'PasswordLastSetTime') AS PasswordLastSetTime,
       LOGINPROPERTY(name, 'IsExpired') AS IsExpired,
       LOGINPROPERTY(name, 'BadPasswordCount') AS BadPasswordCount,
       LOGINPROPERTY(name, 'BadPasswordTime') AS BadPasswordTime,
       LOGINPROPERTY(name, 'HistoryLength') AS HistoryLength,
       modify_date
FROM sys.sql_logins;