Existe-t-il une ligne unique qui accorde le SELECTIONNER les permissions à un nouvel utilisateur postgresql ?
Quelque chose qui mettrait en œuvre le pseudo-code suivant :
GRANT SELECT ON TABLE * TO my_new_user;
Existe-t-il une ligne unique qui accorde le SELECTIONNER les permissions à un nouvel utilisateur postgresql ?
Quelque chose qui mettrait en œuvre le pseudo-code suivant :
GRANT SELECT ON TABLE * TO my_new_user;
J'ai pensé qu'il serait utile de mentionner que, depuis la version 9.0, postgres dispose de la syntaxe permettant d'accorder des privilèges sur toutes les tables (ainsi que sur d'autres objets) d'un schéma :
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user;
Voici le lien .
Ma solution (sans commentaire) :
#!/bin/bash
for table in `echo "SELECT schemaname || '.' || relname FROM pg_stat_user_tables;" | psql -A -t my_database_name`;
do
echo "GRANT SELECT ON TABLE $table to my_new_user;"
echo "GRANT SELECT ON TABLE $table to my_new_user;" | psql my_database_name
done
Exécuté depuis l'utilisateur privilégié, il a fonctionné comme un charme.
Cela peut se faire par un processus en deux étapes.
Exécutez cette requête :
select 'grant all on '||schemaname||'.'||tablename||' to $foo;'
from pg_tables where schemaname in ('$bar', '$baz')
order by schemaname, tablename;
Remplacements :
$foo
= nom d'utilisateur pour lequel vous voulez accorder des permissions$bar
, $baz
= schémas dans lesquels vous voulez accorder des permissions (peut être simplement "public")
Cela va vous donner une liste de requêtes qui vont générer les autorisations requises. Copiez la sortie, collez-la dans une autre requête, et exécutez.
Je me suis retrouvé ici parce que l'utilisateur de ma base de données n'a vu que quelques tables et pas les plus récentes. Si c'est votre cas, ceci m'a aidé.
Accorder des privilèges à tous existant tables :
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
Accorder des privilèges à tous nouveau les tables à créer à l'avenir (via les privilèges par défaut) :
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO user;
Vous pouvez également vérifier que toutes les tables sont accordées correctement.
Comptez toutes les tables existantes :
SELECT COUNT(*)
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog' AND
schemaname != 'information_schema';
Comptez toutes les tables auxquelles l'utilisateur a accès :
SELECT COUNT(*)
FROM information_schema.role_table_grants
WHERE grantee = 'user';
Le compte des deux dernières requêtes doit être le même.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.