PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 13/01/2022 10:12:16

genamiga
Membre

lo_compat_privileges

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

#2 13/01/2022 13:54:32

dverite
Membre

Re : lo_compat_privileges

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*

Hors ligne

#3 13/01/2022 14:28:16

genamiga
Membre

Re : lo_compat_privileges

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

#4 13/01/2022 18:35:21

genamiga
Membre

Re : lo_compat_privileges

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

Pied de page des forums