Est-il vrai qu'il est IMPOSSIBLE de créer un utilisateur de sauvegarde en lecture seule dans PostgreSQL?
J'ai été informé sur un canal IRC que vous ne pouvez tout simplement pas avoir un utilisateur de sauvegarde uniquement sans privilèges de propriété. Je trouve cela très étrange, donc je veux m'assurer de ne rien manquer.
Voici ce que j'ai essayé mais cela ne me donne pas les résultats que je recherche. Quand je fais pg_dump
sur une table donnée, je reçois Permission denied for relation...
:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup;
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO backup;
Toute aide serait grandement appréciée!
backup
postgresql-9.1
permissions
milosgajdos
la source
la source
Réponses:
Non, c'est facile (maintenant de toute façon).
Accorder l'autorisation de connexion sur un nouvel utilisateur
Accordez les autorisations sur tous les objets de base de données actuels . Ceci est spécifique au schéma et vous devrez exécuter une copie pour chaque schéma que vous souhaitez que votre utilisateur utilise,
À partir des documents ,
ALL TABLES
comprend tout ce que vous souhaitez.Ensuite,
ALTER DEFAULT PRIVLEGES
pour accorder desSELECT
privilèges futurs aux objets non encore créés.la source
ALTER DEFAULT PRIVILEGES ... myReadonlyUser
, 2 lignes supplémentaires sont ajoutées à la décharge:ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM root;
. Des sons comme celui-ci signifieront que root ne pourra rien faire sur les nouvelles tables. Est-ce vrai?bigint
votre utilisateur en lecture seule, il faudra probablement aussiGRANT SELECT ON ALL SEQUENCES
Le moyen simple et agréable est de créer un superutilisateur avec une autorisation en lecture seule.
psql
tant que postgres ou autre superutilisateur.Créez le nouveau rôle de superutilisateur et définissez-le en lecture seule:
<PASS>
par votre mot de passe choisi.backadm
par le nom d'utilisateur choisi. (Je metsbackadm
pourBackup Administrator
).Vous pouvez maintenant utiliser ce rôle pour sauvegarder.
la source
SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE
ouALTER USER backadm set default_transaction_read_only = off;
loin d'avoir un accès illimité à la base de données.Notez que le blog référencé dans la réponse donnée par @Gyre ne fonctionnera pas pour créer un utilisateur en lecture seule "application" (c'est-à-dire pour créer un rôle en lecture seule pour une application Web pour se connecter à la base de données), et pourrait ouvrir un grave vulnérabilité de sécurité, car elle est facilement évitable, comme expliqué dans cette réponse de liste postgresql . Pour référence, par le client remplaçant les paramètres de session:
Reportez-vous à la présentation «Gestion des droits dans postgresql» liée dans le wiki postgres pour une méthode plus détaillée, similaire à celle publiée dans la question.
la source
Après avoir testé la solution d'Evan Caroll, j'ai rencontré cette erreur:
il manque une autre autorisation:
L'ajout de cette autorisation m'a permis de sauvegarder avec mon utilisateur en lecture seule.
la source
J'ai fait des recherches appropriées et il semble y avoir une solution à cela. Je suis tombé sur ce blog qui explique parfaitement ce qui doit être fait. J'espère que cela aide les gens qui recherchent la même réponse que moi. Évidemment - la restauration des sauvegardes effectuées de cette façon est une question différente.
la source
ALTER USER set default_transaction_read_only = on;
, ce qui n'empêche pas l'utilisateur de le changer.