Subventions minimales pour un accès à une seule table en lecture seule sur PostgreSQL

10

Voici une liste de commandes qui semblent fonctionner pour créer un nouvel utilisateur (connexion) et accorder un accès en lecture seule à une table spécifiée sur PostgreSQL.

Supposons que ces commandes soient exécutées lors de la connexion avec des privilèges suffisants (c'est-à-dire la postgresconnexion dans l'installation par défaut).

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

Maintenant, je veux accorder selectsur la table tab_abcsur la base de données db_xyz, alors voilà (la base de données db_xyzest sélectionnée comme actuelle via PgAdmin ou quelque chose comme ça):

grant select on tab_abc to user_name;

La question est: est-ce suffisant ou devrait-il y avoir plus de subventions (base de données connect, usagepeut - être)?

Ces commandes semblent fonctionner pour moi, mais mon installation par défaut a des paramètres de sécurité par défaut. Quelles autorisations supplémentaires dois-je ajouter si l'administrateur du serveur a configuré une sécurité renforcée?

Il semble que je ne ai pas besoin d'accorder , connectni usage- sont que Implicite tout en accordant select? En est-il toujours ainsi?

WildWezyr
la source

Réponses:

12

La question est: est-ce suffisant ou devrait-il y avoir plus de subventions (connexion à la base de données, utilisation peut-être)?

La sécurité peut être renforcée par rapport à la valeur par défaut principalement sur ces points:

  • Le pg_hba.confdossier. Il filtre les connexions avant de considérer tout privilège de base de données. La valeur par défaut est relativement ouverte pour les connexions locales, mais elle peut être limitée à une liste explicite de bases de données, noms d'utilisateur et origines du réseau.

  • Les autorisations pour le public , le pseudo-rôle que n'importe qui a. Un utilisateur ne peut se connecter implicitement que si le privilège de connexion est accordé àPUBLIC . Voir L' utilisateur créé peut accéder à toutes les bases de données dans PostgreSQL sans aucune autorisation . Une base de données peut avoir tous ses privilèges révoqués du public. Voir REVOKE dans le doc pour la version principale de PostgreSQL que vous utilisez.

  • L'existence du publicschéma. Il est créé avec la base de données par défaut pour plus de commodité mais ce n'est pas obligatoire. Au lieu de supprimer les autorisations publiques du publicschéma, il peut être judicieux pour les administrateurs de base de données de simplement supprimer le publicschéma lorsque les nouveaux utilisateurs ne devraient pas avoir d'autorisation implicite du tout.

Dans le cas où ces valeurs par défaut ont été supprimées, pour lire une table, un nouvel utilisateur doit être accordé:

GRANT CONNECT ON DATABASE dbname TO username;

Au niveau de la base de données:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
Daniel Vérité
la source