puppetlabs的官方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模块?
我的解决scheme是使用' postgresql :: server :: role '与createdb => true而不是'postgresql :: database_grant'。 这是有道理的,因为你想改变用户的全局行为,而不是与特定数据库相关的行为。
这是一个示例指令,它将createb特权与用户一起添加:
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