官方 postgresql 模块来自木偶实验室允许授予特定数据库的权限。
postgresql::database_grant{'grant to myuser':
privilege => 'CREATE',
db => 'app_production',
role => 'myuser',
}
这将执行:
GRANT ${privilege} ON database ${db} TO ${role};
不过我想对给定用户的全局权限执行查询:
ALTER role myuser login createdb;
有办法做到这一点吗?或者我应该为 PostgreSQL 使用不同的 puppet 模块?
答案1
对我有用的解决方案是使用'postgresql::服务器::角色' 和createdb => true而不是“postgresql::database_grant”。这是有道理的,因为您想要改变用户的全局行为,而不是与特定数据库相关的行为。
这是一个添加用户以及 createdb 权限的示例指令:
postgresql::server::role { 'username':
password_hash => postgresql_password('username', 'password'),
createdb => true
}
给定“vagrant”作为用户名,这是预期的输出:
Role[vagrant]/Postgresql_psql[ALTER ROLE "vagrant" CREATEDB]/command: command changed '' to 'ALTER ROLE "vagrant" CREATEDB'
重要提示:如果您使用模块的版本 2,则可以使用 postgresql::role 代替 postgresql::server::role。请参阅https://forge.puppetlabs.com/puppetlabs/postgresql#upgrading