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 postgres
connexion dans l'installation par défaut).
CREATE ROLE user_name NOSUPERUSER NOCREATEDB
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';
Maintenant, je veux accorder select
sur la table tab_abc
sur la base de données db_xyz
, alors voilà (base de données db_xyz
est sélectionné comme courant 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
, usage
peut-ê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 n'ai pas besoin d'accorder connect
ni usage
- est-ce implicite lors de l'octroi de select
? En est-il toujours ainsi?
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 défaut principalement sur ces points:
Le pg_hba.conf
fichier. 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, de noms d'utilisateurs et d'origines de réseau.
Les autorisations pour 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 subvention . Une base de données peut avoir tous ses privilèges révoqués du public. Voir RÉVOQUER dans le document pour la version principale de PostgreSQL que vous utilisez.
L'existence du schéma public
. 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 schéma public
, il peut être judicieux pour les administrateurs de base de données de supprimer simplement le schéma public
lorsque les nouveaux utilisateurs ne doivent 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;