Comment créer un utilisateur avec des privilèges readonly pour toutes les bases de données dans Postgresql?
Je veux créer un utilisateur avec seulement sélectionner privilège pour toutes les tables de toutes les bases de données. J'ai pensé que je pourrais obtenir une liste de bases de données et appliquer la commande suivante pour chaque base de données:
GRANT select ON DATABASE dbname to user1;
Mais j'ai eu l'erreur suivante:
ERROR: invalid privilege type SELECT for database
Quand j'ai googlé les gens conseillé de faire le grant select
opération pour toutes les tables. Mais de nouvelles tables sont ajoutées toujours. Donc ce n'est pas une solution acceptable pour moi. Quelqu'un sait-il aucune solution de contournement?
source d'informationauteur Alptugay
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas faire sur la base de données, seulement sur le schéma.
En supposant que vous êtes seulement en utilisant le
public
schéma dans chaque base de données, vous pouvez le faire:Vous avez besoin de faire 2 choses: d'abord, permettre l'accès aux objets existants; et d'autre part, de définir les accès par défaut pour les nouveaux objets créés à partir de maintenant.
Noter que l'octroi de l'accès à des "TABLES" comprend les points de vue, mais ne comprennent pas les séquences (comme l'auto-incrémentation de la fonction pour une "SÉRIE" de colonnes), de sorte que vous aurez probablement souhaitez accorder l'accès à ceux aussi bien.
Ci-dessous suppose que vous voulez faire tout en le
public
schéma. LeALTER DEFAULT PRIVILEGES
déclaration peut agir sur l'ensemble de la base de données par l'omission de laIN SCHEMA ...
clause; laGRANT
doit être exécuté une fois pour chaque schéma.Manuel PostgreSQL
Je me rends compte que vous avez déjà dit ce n'est pas une réponse acceptable, mais c'est le droit de réponse de toute façon.
La spécification de la sécurité (GRANT et REVOKE) est la partie de tableau de conception et de test.
Ne pas déplacer des tableaux à la production avant le tableau des définitions, de la sécurité, les tests et les données de test sont sous contrôle de version.
Après avoir dit que, PostgreSQL n'ont pas de SÉLECTIONNER les autorisations sur les bases de données. Vous pouvez accorder seulement de CRÉER, CONNECTER, ou TEMP autorisations sur les bases de données.
Vous pouvez grant SELECT sur toutes les tables dans un schéma donné. Je ne sais pas comment cela se répercute sur les tables créées après l'exécution de l'instruction GRANT, mais il est assez facile à tester.
PostgreSQL Subvention de syntaxe
Pour Postgres les versions inférieures 9.0: