Re: [Postgresql-it] Grant su singolo campo

  • From: "Fabio Lovato" <flovato@xxxxxxxxx>
  • To: <postgresql-it@xxxxxxxxxxxxxxxxx>
  • Date: Mon, 5 Sep 2005 11:54:21 +0200

Valentina Marzari wrote:

Ciao a tutti!
Avrei bisogno di dare privilegi di scrittura solo ad un campo di una tabella
mentre tutti gli altri in sola lettura. Utilizzo già i GRANT per le tabelle
e volevo sapere se era possibile utilizzarlo anche nel singolo campo.

Non mi risulta. Però è possibile revocare all'utente il permesso di
scrittura sulal tabella e usare una stored procedure per permettergli di
modificare solo alcune cose. La stored procedure deve essere creata da
un utente con i corretti permessi sulla tabella e deve essere definita
con SECURITY DEFINER:

Scusate ma cerco alcune conferme.
Significa ad esempio se ho una tabella

CREATE TABLE pippo(
   campoA integer,
   campoB integer);

'REVOKE ALL ON pippo' FROM PUBLIC'

E poi qui devo fare un trigger ???
Non ho capito come abilitare ad esempio la possibilita'
di modificare solo campoB e come agganciarla alla mia operazione di insert/update

in internet ho trovato solo un esempio del tipo:

CREATE OR REPLACE FUNCTION create_matview(NAME, NAME)
RETURNS VOID
SECURITY DEFINER
LANGUAGE plpgsql AS '
DECLARE
   matview ALIAS FOR $1;
   view_name ALIAS FOR $2;
   entry matviews%ROWTYPE;
BEGIN
   SELECT * INTO entry FROM matviews WHERE mv_name = matview;

   IF FOUND THEN
       RAISE EXCEPTION ''Materialized view ''''%'''' already exists.'',
         matview;
   END IF;

   EXECUTE ''REVOKE ALL ON '' || view_name || '' FROM PUBLIC'';

   EXECUTE ''GRANT SELECT ON '' || view_name || '' TO PUBLIC'';

EXECUTE ''CREATE TABLE '' || matview || '' AS SELECT * FROM '' || view_name;

   EXECUTE ''REVOKE ALL ON '' || matview || '' FROM PUBLIC'';

   EXECUTE ''GRANT SELECT ON '' || matview || '' TO PUBLIC'';

   INSERT INTO matviews (mv_name, mv_view, last_refresh)
     VALUES (matview, view_name, CURRENT_TIMESTAMP);

   RETURN;
END
';

ma non mi sembra calzante.

Grazie
Fabio Lovato

--
Il messaggio e' stato analizzato alla ricerca di virus o
contenuti pericolosi da MailScanner, ed e'
risultato non infetto.


Other related posts: