我已经用 terraform 创建了 sql 服务器和数据库,现在我必须创建数据库用户并为其分配角色。
我该怎么做?请给我建议。
答案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 "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 中。