[Spanish] Triggers en Postgresql
Javier Diaz
javidiaz1977 at gmail.com
Wed Dec 10 06:28:32 PST 2014
Finalmente despues de darle vueltas al asunto (muchas vueltas) pude
resolverlo. Agrego los pasos que segui por si a alguien le sirve.
cree el procedimiento almacenado (funcion) como usuario administrador.
CREATE OR REPLACE FUNCTION parcelas_insert()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO geosiuc.parcelas_history
(gid, id, part, cir, sec, frac, fr_mza, parc, sup_terren, zonif,
zonif2, nom, geom, tipo, mza_letra, created, created_by)
VALUES
(NEW.gid, NEW.id, NEW.part, NEW.cir, NEW.sec, NEW.frac,
NEW.fr_mza, NEW.parc, NEW.sup_terren, NEW.zonif, NEW.zonif2, NEW.nom,
NEW.geom, NEW.tipo, NEW.mza_letra,
current_timestamp, current_user);
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION parcelas_insert()
OWNER TO admin;
Nota: security invoker es el valor por default.
Luego en la tabla sobre la que quiero auditar defino el Trigger (disparador)
CREATE TRIGGER parcelas_insert_trigger
AFTER INSERT
ON ssicc.parcelas
FOR EACH ROW
EXECUTE PROCEDURE parcelas_insert();
Desde psql (accediendo como administrador)
GRANT EXECUTE ON FUNCTION parcelas_insert() TO ssicc_admin;
Pense que con esto era suficiente. Pero me daba un error de permiso
denegado para insertar registros. Se soluciono con esto:
GRANT INSERT,DELETE,UPDATE ON geosiuc.parcelas_history TO ssicc_admin;
(Esto por que despues resta crear los triggers para el Update y el
Delete)
Ahora si, el usuario ssicc_admin ingresa registros en ssicc.parcelas y
se guarda el respaldo en la tabla geosiuc.parcelas_history.
Si alguien tiene alguna observacion, es bienvenida.
Saludos
Javier
El día 9 de diciembre de 2014, 16:50, Javier Diaz
<javidiaz1977 en gmail.com> escribió:
> dale, ahora lo miro. Gracias
>
> Abrazo Mauri
>
> El día 9 de diciembre de 2014, 16:36, Mauricio Miranda
> <mmiranda en osgeo.org> escribió:
>> Javi, pegale una mirada a pgaudit [1], creo que tiene lo que estás buscando
>> ya solucionado.
>>
>> [1] https://github.com/2ndQuadrant/pgaudit
>>
>> 2014-12-09 15:50 GMT-03:00 martinmaximilianoflores
>> <martinmaximilianoflores en yahoo.com.ar>:
>>
>>> Si vos solo queres que el usuario pueda insertar en el historial solo pone
>>> :
>>>
>>> GRANT INSERT ON TABLE geosiuc.parcela_history TO usuarioxxx;
>>>
>>> es decir no va a poder leer los datos, si insertar, tampoco lo va a
>>> actualizar etc.
>>>
>>> Igual con que el owner del trigger tenga permisos de inserción en la tabla
>>> historial y le revocas todos los permisos al usuario que inserta en la
>>> tabla
>>> que posteriormente dispara el trigger,deberia funcionar.
>>>
>>> Me explique?
>>>
>>> Saludos.
>>>
>>>
>>>
>>> --
>>> View this message in context:
>>> http://osgeo-org.1560.x6.nabble.com/Triggers-en-Postgresql-tp5177074p5177090.html
>>> Sent from the OSGeo Spanish Local Chapter mailing list archive at
>>> Nabble.com.
>>> _______________________________________________
>>> Spanish mailing list
>>> http://lists.osgeo.org/mailman/listinfo/spanish
>>> http://es.osgeo.org
>>> http://twitter.com/osgeoes
>>
>>
>>
>> _______________________________________________
>> Spanish mailing list
>> http://lists.osgeo.org/mailman/listinfo/spanish
>> http://es.osgeo.org
>> http://twitter.com/osgeoes
More information about the Spanish
mailing list