Я создал SQL-сервер и базу данных с помощью Terraform, теперь мне нужно создать пользователя базы данных и назначить ему роль.
Как мне это сделать? Пожалуйста, подскажите.
решение1
Я начал работать над поставщиком Terraform, который будет делать это наhttps://github.com/jayway/terraform-provider-mssql. Это все еще очень ранняя работа, но мне удалось сделать так, чтобы она предоставляла логины и пользователей для этих логинов в локальном экземпляре SQL Server (который уже работал, поэтому я вообще не тестировал его в сочетании, например, с поставщиком AzureRM). Тестирование и вклад очень приветствуются (но пока не используйте его для производственных сценариев)!
решение2
Создание пользователей и ролей — это функция SQL-сервера, а не платформы Azure. Таким образом, поставщик 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
}
Наконец, добавьте remote-exec provisioner как часть создания сервера:
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.