如何使用 Terraform 创建数据库用户并为其分配角色

如何使用 Terraform 创建数据库用户并为其分配角色

我已经用 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 中。

相关内容