web-dev-qa-db-fra.com

Accorder l'accès à toutes les tables d'une base de données

J'ai récemment voulu partager des droits d'accès réguliers avec un utilisateur d'un serveur et j'ai réalisé qu'un simple CREATE USER et GRANT ALL ON DATABASE les commandes ne lui ont pas permis d'exécuter un simple SELECT sur les données.

Je voudrais accorder des droits sur toutes les tables d'une base de données donnée à un utilisateur spécifié, mais je ne sais pas si c'est la meilleure idée de lui accorder l'accès à l'ensemble du schéma public car je ne sais pas si c'est permettrait une sorte d'escalade de privilèges. Est-ce qu'il y a un autre moyen?

13
d33tah

Le privilège sur DATABASE accorde uniquement des droits de connexion généraux à la base de données et pas plus. Un utilisateur disposant uniquement de ce privilège ne peut voir que ce que le grand public est autorisé à voir.

Pour accorder un accès en lecture à toutes les tables, vous avez également besoin de privilèges sur tous les schémas et tables:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

Vous pouvez également définir des privilèges par défaut pour les futurs schémas et tables . Exécutez pour chaque rôle qui crée des objets dans votre base de données

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

Mais vous devez vraiment comprendre tout le concept d'abord.
Et il est presque toujours préférable de regrouper les privilèges dans les rôles de groupe, puis d'accorder/révoquer le rôle de groupe vers/depuis les rôles d'utilisateur. En relation:

20
Erwin Brandstetter