[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