So erstellen Sie einen Datenbankbenutzer und weisen ihm mit Terraform eine Rolle zu

So erstellen Sie einen Datenbankbenutzer und weisen ihm mit Terraform eine Rolle zu

Ich habe mit Terraform einen SQL-Server und eine Datenbank erstellt. Jetzt muss ich einen Datenbankbenutzer erstellen und ihm eine Rolle zuweisen.

Wie kann ich das machen? Bitte machen Sie mir Vorschläge.

Antwort1

Ich habe angefangen, an einem Terraform-Anbieter zu arbeiten, der dies tun wird beihttps://github.com/jayway/terraform-provider-mssql. Es ist noch ein sehr frühes Projekt, aber ich habe es geschafft, dass es Anmeldungen und Benutzer für diese Anmeldungen in einer lokalen SQL Server-Instanz bereitstellt (die bereits lief, daher habe ich es noch nicht in Verbindung mit dem AzureRM-Anbieter getestet). Tests und Beiträge sind sehr willkommen (aber verwenden Sie es noch nicht für Produktionsszenarien)!

Antwort2

Das Erstellen von Benutzern und Rollen ist eine Funktion des SQL-Servers, nicht der Azure-Plattform. Der ARM-Anbieter von Terraform kümmert sich daher nicht darum, und soweit ich sehe, verfügt Terraform für diese Aufgabe auch nicht über einen MSSQL-Anbieter (es verfügt über MYSQL und Postgres). Sie müssten diese Aufgabe mithilfe von SQL-Skripten erledigen.

Antwort3

So habe ich das mit Postgres/PSQL gemacht.

Generieren Sie zunächst den MD5-Passwort-Hash, indem Sie den Benutzernamen an das Passwort anhängen:

$ echo -n mypasswordbob|md5sum
fd9c9714184c4ae189ca83f1c21aeeb8

Stellen Sie dem resultierenden Hash die Zeichenfolge „md5“ voran, um die verschlüsselte Kennwortform zu erhalten, die von Postgres akzeptiert wird: md5fd9c9714184c4ae189ca83f1c21aeeb8

Fügen Sie dann eine eigenständige Vorlagendatei mit den Datenbankbefehlen hinzu, die Sie ausführen möchten:

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
}

Fügen Sie abschließend im Rahmen Ihrer Servererstellung einen Remote-Exec-Provisioner hinzu:

  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",
    ]
  }

Antwort4

Verwenden Sie den Terraform-Dateibereitsteller, um SQL bereitzustellen, und verwenden Sie dann den Remote-Exec-Beauftragten, um es in SQL Server zu laden.

verwandte Informationen