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: