web-dev-qa-db-fra.com

Comment accorder le privilège d'utilisation sur tous types?

Comment puis-je accorder le privilège d'utilisation sur tous les types d'un schéma? Pour les tables et les fonctions, nous pouvons utiliser ALL TABLES IN SCHEMA schema_name, mais ceci n'est pas pris en charge pour les types :

GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE type_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]

Je sais que je peux définir un privilège par défaut, mais dans ce cas, j'avais déjà installé une extension avec de nombreux types avant de le faire.

3
arjan

Nous pouvons le faire avec SQL et PSQL dynamiques, Sub Out user1 et user2 avec le nom de l'utilisateur. N'hésitez pas à supprimer non plus. Vous pouvez également vouloir seulement DOMAIN ou USER-DEFINED TYPE Adapter cela devrait être assez simple.

SELECT format(
  $$GRANT USAGE ON TYPE %s TO %s;$$,
  format('%I.%I.%I', object_catalog, object_schema, object_name ),
  grantUser
)
FROM information_schema.element_types
CROSS JOIN (VALUES ('user1'),('user2')) AS t(grantUser)
WHERE object_type IN ('USER-DEFINED TYPE', 'DOMAIN');

Puis courir

\gexec

Vous pouvez également exécuter ceci dans un bloc do avec PERFORM

2
Evan Carroll