Назад | Перейти на главную страницу

Как создать пользователя базы данных и назначить ему роль с помощью terraform

Я создал сервер sql и базу данных с помощью terraform, теперь мне нужно создать пользователя базы данных и назначить ему роль.

Как я могу это сделать. Пожалуйста, предложите мне.

Я начал работать над провайдером Terraform, который сделает это в https://github.com/jayway/terraform-provider-mssql. Это все еще очень ранняя работа, но мне удалось настроить учетные записи и пользователей для этих учетных записей в локальном экземпляре SQL Server (который уже работал, поэтому я вообще не тестировал его вместе, например, с поставщиком AzureRM) . Мы очень приветствуем тестирование и участие (но пока не используйте его для производственных сценариев)!

Создание пользователей и ролей - это функция SQL-сервера, а не платформы Azure. Таким образом, провайдер ARM Terraforms этим не занимается, и, насколько я могу судить, у Terraform нет поставщика MSSQL для этой работы (у него есть MYSQL и Postgres). Вам нужно будет выполнить эту работу с помощью сценариев SQL.

Используйте средство подготовки файлов Terraform для развертывания SQL, затем используйте средство удаленного выполнения, чтобы загрузить его в SQL Server.

Вот как я это сделал с помощью 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",
    ]
  }