Plpgsql seguridad bd_postgresql_2011

download Plpgsql seguridad bd_postgresql_2011

If you can't read please download the document

Transcript of Plpgsql seguridad bd_postgresql_2011

1. Ing.LenninCaroComunidadPythonVenezuelaComunidadPostgreSQLVenezuelawww.indesoft.org.velennin.caro@[email protected] 2. PL/PgSQLCREATE FUNCTION sumar(n1 numeric ,n2 numeric) RETURNS numeric AS$$DECLAREnumero numeric;BEGINnumero = n1+n2;return numero;END;$$language plpgsql 3. PL/PgSQLCREATE FUNCTION buscar1(id_buscar integer) RETURNS record AS$$ DECLAREregistro record; BEGINselect texto1,texto2 into registro from tabla1 where id=id_buscar;return registro; END;$$language plpgsql 4. PL/PgSQLCREATE FUNCTION buscar2(text_buscar varchar) RETURNS setof record AS$$ DECLAREregistros record; BEGINfor registros in(select id,texto1,texto2from tabla1 where texto1 like text_buscar) loopreturn next registros;end loop; END;$$language plpgsql 5. PL/PgSQL 6. PL/PgSQLCREATE OR REPLACE FUNCTION buscar3(text_buscar varchar)RETURNS setof record AS$$DECLAREregistros record;BEGINfor registros in(select id,texto1,texto2 from tabla1 where texto1 like text_buscar) loopreturn next registros;end loop; IF NOT FOUND THEN RAISE EXCEPTION texto % no se consigue, text_buscar; END IF;END;$$language plpgsql 7. PL/PgSQLCREATE OR REPLACE FUNCTION verificar(numero integer) returns boolean AS$$ DECLARErespuesta boolean; BEGINIF ((numero>=0) AND (numero %,NEW.numero;END IF;RETURN NEW; END;$$LANGUAGE plpgsql; 8. PL/PgSQLCREATE OR REPLACE TRIGGER disparador BEFORE INSERTON tabla2 FOR EACH ROW EXECUTE PROCEDURE disparador2(); 9. Seguridadpostgres=# SHOW hba_file; hba_file-------------------------------------- /etc/postgresql/8.4/main/pg_hba.conf(1 fila)postgres=# ! cat /etc/postgresql/8.4/main/pg_hba.conf 10. Seguridadponencia=# CREATE USER usuario1 UNENCRYPTED PASSWORD 123456;CREATE ROLEponencia=# CREATE SCHEMA usuario1 CREATE TABLE tab1(x integer);CREATE SCHEMAponencia=# INSERT INTO usuario1.tab1 VALUES (1);INSERT 0 1ponencia=# GRANT USAGE ON SCHEMA usuario1 to usuario1;GRANTponencia=# SELECT x from usuario1.tab1; x--- 1(1 fila)ponencia=# SET SESSION AUTHORIZATION usuario1;SETponencia=> SELECT x from usuario1.tab1;ERROR: permiso denegado a la relacin tab1ponencia=# SET SESSION AUTHORIZATION usuario1;SETponencia=> SELECT x from usuario1.tab1; x--- 1(1 fila) 11. Seguridadponencia=> SET SESSION AUTHORIZATION postgres;SETponencia=# REVOKE ALL PRIVILEGES ON SCHEMA PUBLIC FROM usuario1;REVOKEponencia=> CREATE TABLE x();ERROR: permiso denegado al esquema usuario1ponencia=> CREATE TABLE usuario1.x();ERROR: permiso denegado al esquema usuario1ponencia=> dListado de relaciones Esquema | Nombre| Tipo| Dueo--------------+------------------+-----------------+---------- public|tabala2_id_seq | secuencia | postgres public| tabla1| tabla | postgres public| tabla1_id_seq | secuencia | postgres public| tabla2| tabla | postgres usuario1 | tab1 | tabla| postgres(5 filas)ponencia=> d tab?Tabla usuario1.tab1 Columna | Tipo| Modificadores-------------+-----------+--------------- x | integer | 12. Seguridadponencia=> SET SESSION AUTHORIZATION postgres;SETponencia=# REVOKE SELECT ON pg_user FROM public;REVOKEponencia=# SET SESSION AUTHORIZATION usuario1;SETponencia=> SELECT * FROM pg_user;ERROR: permiso denegado a la relacin pg_userponencia=> SET SESSION AUTHORIZATION postgres;SET 13. SeguridadCREATE OR REPLACE FUNCTION usuarios() RETURNS SETOF RECORD AS$$ DECLARErep RECORD; BEGINFOR rep in (SELECT * FROM pg_user) loop RETURN NEXT rep; end loop; END;$$LANGUAGE plpgsql SECURITY DEFINER;postgres=# SET SESSION AUTHORIZATION usuario1;SET 14. Seguridad 15. PREGUNTAS?Muchas Gracias...Contacto:[email protected]@lennincaro+58 412-5826767