Postgresql

如何在 Puppet 中授予 PostgreSQL 的全域權限?

  • April 15, 2014

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 模組?

對我有用的解決方案是使用’ postgresql::server::role ‘和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

引用自:https://serverfault.com/questions/488614