[アップデート] Amazon RDS for SQL Server で SQL Server 認証でもパスワードポリシーをカスタマイズ出来るようになりました
いわさです。
Amazon RDS for SQL Server ではユーザーパスワードのコンプライアンス要件を満たすためにパスワードポリシーを設定することが出来ます。
RDS for SQL Server は混合認証モードがサポートされており、Windows 認証と SQL Server 認証を使うことが出来ます。
Windows 認証を使いたい場合は RDS for SQL Server の作成時に次のオプションを構成します。
従来はパスワードポリシーのカスタマイズは Active Directory へ参加させるこの Windows 認証でのみサポートされており、SQL Server 認証ではデフォルトのローカルパスワードポリシーから変更することは出来ませんでした。
デフォルトのローカルパスワードポリシーはパスワードの最小文字数が 0 文字で複雑なパスワード設定も不要でした。
これが先日のアップデートで SQL Server 認証でもカスタムパスワードポリシーがサポートされるようになりました。
本日はこちらを構成してみてパスワード設定の挙動を確認してみましたので、その様子を紹介したいと思います。
デフォルト挙動を確認する
まず、適当な RDS for SQL Server インスタンスを SQL Server 認証で作成しまして、緩いパスワードでユーザー作成をしてみましょう。
なお、一部割愛していますがユーザー作成手順は以下を参考にしています。
1> CREATE LOGIN hoge1 WITH PASSWORD = 'password';
2> go
1> CREATE USER hoge1 FOR LOGIN hoge1;
2> go
ゆるパスワードでユーザーが作成出来ましたね。
ユーザーごとのポリシーチェック設定も確認してみます。
1> SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
2> go
name is_policy_checked is_expiration_checked
-------------------------------------------------------------------------------------------------------------------------------- ----------------- ---------------------
rdsa 1 0
##MS_PolicyTsqlExecutionLogin## 1 0
##MS_PolicyEventProcessingLogin## 1 0
admin 0 0
hogeuser1 1 0
hoge1 1 0
hoge2 1 0
RDS の管理ユーザーはパスワードポリシーが無効化されていますが、セルフで作成したユーザーはデフォルトでポリシーチェックが ON でパスワード有効期限チェックは OFF で作成されますね。
ただし、ローカルパスワードポリシーがそもそも前述のとおり緩いので、ポリシーチェック自体はされていても対して機能していない感じです。
パスワードポリシーを設定する
今回のアップデートで SQL Server 認証でもパスワードポリシーを設定出来るようになったわけですが、設定方法としては DB パラメータでカスタマイズを行う形となります。
パラメータを確認してみると、password の文字列を含むいくつかのパラメータを確認することが出来ました。
これらのパラメータの仕様は次の公式ドキュメントにも記載されています。
パスワードの複雑性、長さ、期間やロックポリシーなどが設定可能です。
今回は検証のために次のようなカスタムパラメータを作成してみます。
で、パラメータ設定後にまたユーザー作成を行ってみましょう。
デフォルトでパスワードポリシーチェック自体は有効化されているので機能するはず。
1> CREATE LOGIN hoge3 WITH PASSWORD = 'password';
2> CREATE USER hoge3 FOR LOGIN hoge3;
3> go
Msg 15116, Level 16, State 1, Server EC2AMAZ-P9FULUI, Line 1
Password validation failed. The password does not meet the operating system policy requirements because it is too short.
おっ、パスワードが短すぎると怒られました。いいですね。
1> CREATE LOGIN hoge4 WITH PASSWORD = 'passwordpassword';
2> go
Msg 15118, Level 16, State 1, Server EC2AMAZ-P9FULUI, Line 1
Password validation failed. The password does not meet the operating system policy requirements because it is not complex enough.
今度は長さをカスタムパラメータで指定した 10 文字以上にしてみたのですが、今度は複雑性が不十分だと怒られました。
アルファベットの大文字・小文字、記号を 1 文字以上組み合わせる必要があります。
1> CREATE LOGIN hoge6 WITH PASSWORD = 'Password123!';
2> go
1> CREATE USER hoge6 FOR LOGIN hoge6;
2> go
今度は成功しました。しっかり機能していますね。
ロックの挙動も確認してみる
先ほどのパスワードポリシーでは 3 回以上認証に失敗すると 3 分間ログイン拒否するような設定も行っています。こちらも試してみましょう。
# パスワード誤り
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'hoge6'..
# パスワード誤り
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'hoge6'..
# パスワード誤り
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'hoge6'..
# パスワード正しい、が認証失敗
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'hoge6'..
:
# 3 分後に正しいパスワードで認証成功
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password:
1>
こちらも期待どおり動作していますね。
ポリシー変更
なお、ALTER LOGIN
でポリシー変更が可能です。
ここではデフォルトでは OFF のCHECK_EXPIRATION
を ON にしてみましょう。
1> ALTER LOGIN hoge6 WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
2> go
1> SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
2> go
name is_policy_checked is_expiration_checked
-------------------------------------------------------------------------------------------------------------------------------- ----------------- ---------------------
rdsa 1 0
##MS_PolicyTsqlExecutionLogin## 1 0
##MS_PolicyEventProcessingLogin## 1 0
admin 0 0
hogeuser1 1 0
hoge1 1 0
hoge2 1 0
hoge5 1 0
hoge6 1 1
(9 rows affected)
1>
変更出来ました。これで期限チェックも動作するはずです。
なおCHECK_EXPIRATION
を有効化する際は、CHECK_POLICY
も併せて有効化が必要ですので注意してください。
さいごに
本日は Amazon RDS for SQL Server で SQL Server 認証でもパスワードポリシーをカスタマイズ出来るようになったので試してみました。
個人的には SQL Server 認証のほうが圧倒的に使うことが多いので、今回のアップデート良いなと思ってます。
SQL Server 認証でもパスワードポリシーをカスタマイズしたかった方は試してみてください。