Terraform を使用してデータベース ユーザーを作成し、ロールを割り当てる方法

Terraform を使用してデータベース ユーザーを作成し、ロールを割り当てる方法

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 にロードします。

関連情報