Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Mais je suis obligé d'activer l'option lo_compat_privileges pour qu'un utilisateur "limité" puise lire les données des "Large Objects". Malheureusement l'activation de cette option ignore les restrictions d'accès en lecture ET en écriture...
L'utilisateur a pourtant le droit de lire colonnes oid correspondantes mais cela ne suffit pas.
J'imagine qu'il faut lui donner le droit de lire les colonnes correspondantes aux données des "Large Objects" dans les tables système.
Cela me permettrais de ne pas devoir activer cette option et autoriser la lecture seule des "Large Objects" des mais je ne vois pas comment faire...
Merci d'avance.
Hors ligne
L'alternative, c'est de donner des droits de lecture à chaque large object créé, avec
GRANT SELECT ON LARGE OBJECT loid TO role;
C'est le possesseur de l'objet ou un superutilisateur qui doit donner ces droits.
L'oid est juste le numéro de l'objet. Le fait de pouvoir lire le numéro ou pas est complètement déconnecté du fait de pouvoir lire/écrire l'objet ou pas avec les fonctions dédiées lo*
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Parfait ça fonctionne.
Merci.
Mais il faut GRANT individuellement pour chaque oid
J'essaie de faire une petite fonction pour le faire sur tous les oid d'un coup mais j'ai une erreur de syntaxe bizarre
--------------- SQL ---------------
CREATE OR REPLACE FUNCTION public.grant_select_oid (
user_for_grant text
)
RETURNS void AS
$body$
DECLARE
oid_data RECORD;
BEGIN
FOR oid_data IN
SELECT fichier_data AS "id"
FROM articles_fichiers
WHERE fichier_data IS NOT NULL
UNION
SELECT fichier_data_mini AS "id"
FROM articles_fichiers
WHERE fichier_data_mini IS NOT NULL
LIMIT 10
LOOP
GRANT SELECT ON LARGE OBJECT oid_data.id TO user_for_grant;
-- RAISE NOTICE 'user = %, oid = %', user_for_grant, oid_data.id;
END LOOP;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
PARALLEL UNSAFE
COST 100;
---------- MESSAGE D'ERREUR --------
ERREUR: erreur de syntaxe sur ou près de « oid_data »
LINE 15: GRANT SELECT ON LARGE OBJECT oid_data.id TO user_for_grant...
^
Une idée ?
Merci d'avance.
Dernière modification par genamiga (13/01/2022 21:53:57)
Hors ligne
J'ai trouvé...
Voici la ligne GRANT correcte.
EXECUTE 'GRANT SELECT ON LARGE OBJECT ' || oid_data.id || ' TO ' || user_for_grant;
Dernière modification par genamiga (13/01/2022 18:35:45)
Hors ligne
Pages : 1