Terraform を使用して SQL サーバーとデータベースを作成しましたが、今度はデータベース ユーザーを作成し、それにロールを割り当てる必要があります。
どうすればいいでしょうか。提案してください。
答え1
私はこれを実現するTerraformプロバイダーの開発を始めました。https://github.com/jayway/terraform-provider-mssqlまだ非常に初期の作業ですが、ローカル SQL Server インスタンスにログインとそれらのログインのユーザーをプロビジョニングできるようになりました (既に実行されていたため、AzureRM プロバイダーなどと組み合わせてテストしたことはありません)。テストと貢献は大歓迎です (ただし、まだ運用シナリオには使用しないでください)。
答え2
ユーザーとロールの作成は、Azure プラットフォームではなく、SQL サーバーの機能です。そのため、Terraforms ARM プロバイダーはこれを処理しません。また、私が知る限り、Terraform にはこの作業を行う MSSQL プロバイダーはありません (MYSQL と Postgres はあります)。この作業は、SQL スクリプトを使用して行う必要があります。
答え3
postgres/psql を使用してこれを実行した方法は次のとおりです。
まず、ユーザー名をパスワードに追加して md5 パスワード ハッシュを生成します。
$ echo -n mypasswordbob|md5sum
fd9c9714184c4ae189ca83f1c21aeeb8
結果のハッシュの先頭に文字列「md5」を追加して、Postgres が受け入れる暗号化されたパスワード形式を取得します。
md5fd9c9714184c4ae189ca83f1c21aeeb8
次に、実行するデータベース コマンドを含むスタンドアロン テンプレート ファイルを追加します。
data "template_file" "db_roles" {
vars {
username_bob = "bob"
password_bob = "md5fd9c9714184c4ae189ca83f1c21aeeb8"
}
template = <<EOF
create user $${username_bob};
alter user $${username_bob} WITH ENCRYPTED PASSWORD '$${password_bob}';
EOF
}
最後に、サーバー作成の一部として、リモート実行プロビジョナーを追加します。
provisioner "remote-exec" {
inline = [
"set -x",
"cat > db_roles.sql <<EOL\n${data.template_file.db_roles.rendered}\nEOL",
"psql -U myuser < db_roles.sql",
]
}
答え4
Terraform ファイル プロビジョナーを使用して SQL をデプロイし、次に remote-exec プロビジョナーを使用して SQL Server にロードします。