SlideShare una empresa de Scribd logo
Ing. Lennin Caro
Comunidad Python Venezuela
Comunidad PostgreSQL Venezuela
www.indesoft.org.ve
lennin.caro@yahoo.com
lcaro@indesoft.org.ve
PL/PgSQL
CREATE FUNCTION sumar(n1 numeric ,n2 numeric) RETURNS numeric AS
$$
DECLARE
  numero numeric;
BEGIN
  numero = n1+n2;
  return numero;
END;
$$
language plpgsql
PL/PgSQL
CREATE FUNCTION buscar1(id_buscar integer) RETURNS record AS
$$
 DECLARE
  registro record;
 BEGIN
  select texto1,texto2 into registro from tabla1 where id=id_buscar;
  return registro;
 END;
$$
language plpgsql
PL/PgSQL


CREATE FUNCTION buscar2(text_buscar varchar) RETURNS setof record AS
$$
 DECLARE
  registros record;
 BEGIN
  for registros in(
    select id,texto1,texto2
    from tabla1 where texto1 like text_buscar
  ) loop
  return next registros;
  end loop;
 END;
$$
language plpgsql
PL/PgSQL
PL/PgSQL
CREATE OR REPLACE FUNCTION buscar3(text_buscar varchar)
RETURNS setof record AS
$$
DECLARE
  registros record;
BEGIN
  for registros in(
    select id,texto1,texto2 from tabla1 where texto1 like text_buscar
  ) loop
  return next registros;
  end loop;
 IF NOT FOUND THEN
   RAISE EXCEPTION 'texto % no se consigue', text_buscar;
 END IF;
END;
$$
language plpgsql
PL/PgSQL
CREATE OR REPLACE FUNCTION verificar(numero integer) returns boolean AS
$$
 DECLARE
  respuesta boolean;
 BEGIN
  IF ((numero>=0) AND (numero<=9)) THEN
   respuesta=TRUE;
  ELSE
   respuesta=FALSE;
  END IF;
  RETURN respuesta;
 END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION disparador2()returns trigger AS
$$
 DECLARE
  valor boolean;
 BEGIN
  valor=verificar(NEW.numero);
  IF (valor=FALSE) THEN
   RAISE EXCEPTION 'Valor incompatible--> %',NEW.numero;
  END IF;
  RETURN NEW;
 END;
$$
LANGUAGE plpgsql;
PL/PgSQL
CREATE OR REPLACE TRIGGER disparador BEFORE INSERT
ON tabla2 FOR EACH ROW EXECUTE PROCEDURE disparador2();
Seguridad
postgres=# 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
Seguridad
ponencia=# CREATE USER usuario1 UNENCRYPTED PASSWORD '123456';
CREATE ROLE
ponencia=# CREATE SCHEMA usuario1 CREATE TABLE tab1(x integer);
CREATE SCHEMA
ponencia=# INSERT INTO usuario1.tab1 VALUES (1);
INSERT 0 1
ponencia=# GRANT USAGE ON SCHEMA usuario1 to usuario1;
GRANT
ponencia=# SELECT x from usuario1.tab1;
 x
---
 1
(1 fila)
ponencia=# SET SESSION AUTHORIZATION usuario1;
SET
ponencia=> SELECT x from usuario1.tab1;
ERROR: permiso denegado a la relación tab1
ponencia=# SET SESSION AUTHORIZATION usuario1;
SET
ponencia=> SELECT x from usuario1.tab1;
 x
---
 1
(1 fila)
Seguridad

ponencia=> SET SESSION AUTHORIZATION postgres;
SET
ponencia=# REVOKE ALL PRIVILEGES ON SCHEMA PUBLIC FROM usuario1;
REVOKE
ponencia=> CREATE TABLE x();
ERROR: permiso denegado al esquema usuario1
ponencia=> CREATE TABLE usuario1.x();
ERROR: permiso denegado al esquema usuario1
ponencia=> d
            Listado de relaciones
 Esquema |           Nombre        | Tipo          | Dueño
--------------+------------------+-----------------+----------
 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 |
Seguridad




ponencia=> SET SESSION AUTHORIZATION postgres;
SET
ponencia=# REVOKE SELECT ON pg_user FROM public;
REVOKE
ponencia=# SET SESSION AUTHORIZATION usuario1;
SET
ponencia=> SELECT * FROM pg_user;
ERROR: permiso denegado a la relación pg_user
ponencia=> SET SESSION AUTHORIZATION postgres;
SET
Seguridad

CREATE OR REPLACE FUNCTION usuarios() RETURNS SETOF RECORD AS
$$
 DECLARE
  rep RECORD;
 BEGIN
  FOR rep in (
    SELECT * FROM pg_user
  ) loop
 RETURN NEXT rep;
 end loop;
 END;
$$
LANGUAGE plpgsql SECURITY DEFINER;

postgres=# SET SESSION AUTHORIZATION usuario1;
SET
Seguridad
¿PREGUNTAS?
                  Muchas Gracias...

Contacto:
lennin.caro@yahoo.com
@lennincaro
+58 412-5826767

Más contenido relacionado

DOCX
Programas en netbeans
DOCX
Instrucciones basicas de mySQL
PDF
Procesamiento de datos
DOCX
Sesion10 - Funciones y procedimientos (Oracle)
DOCX
Sesion05 - Manipulacion de datos (Oracle)
DOCX
Sesión11 - Paquetes (Oracle)
DOCX
Sesión12 - Trigger (Oracle)
DOCX
Sesion06a - Manipulacion de datos (Oracle)
Programas en netbeans
Instrucciones basicas de mySQL
Procesamiento de datos
Sesion10 - Funciones y procedimientos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)
Sesión11 - Paquetes (Oracle)
Sesión12 - Trigger (Oracle)
Sesion06a - Manipulacion de datos (Oracle)

La actualidad más candente (20)

PDF
Programación MySQL-Ejercicios
PDF
Resumen scripts unix
DOCX
Practicas programacion 1 10
DOCX
Sesion06c - Sentencias SQL en PL-SQL (Oracle)
PPT
Disparadores
TXT
Código - Apuntadores
PPTX
Tarea 2 y_3
PDF
Manejo de archivos y carpetas :)
PPT
Script en msdos
PPT
ergonomia
PDF
Triggers o disparadores en MySQL
DOCX
Programa de arbol
PDF
Quasi - Practicas de Programacion en C
DOCX
Postgres trigger
PPTX
Trabajo digital.
DOC
Procedimientos Almacenados
PDF
Práctica no 9
TXT
About aliases.help
Programación MySQL-Ejercicios
Resumen scripts unix
Practicas programacion 1 10
Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Disparadores
Código - Apuntadores
Tarea 2 y_3
Manejo de archivos y carpetas :)
Script en msdos
ergonomia
Triggers o disparadores en MySQL
Programa de arbol
Quasi - Practicas de Programacion en C
Postgres trigger
Trabajo digital.
Procedimientos Almacenados
Práctica no 9
About aliases.help
Publicidad

Similar a Plpgsql seguridad bd_postgresql_2011 (20)

PDF
Creación de funciones postgre sql
PDF
PostgreSQL: Un motor Impulsado por una comunidad
PDF
Introducción a PostgreSql
PDF
Estado del Desarrollo de PostgreSQL-9.0
PPTX
DOC
Sql Procedural
PDF
Evolución y avances del Gestor PostgreSQL
PDF
LSWC PostgreSQL 9.1 (2011)
PDF
Postgres programmer josue
PDF
Presentación de Postgresql 9.1
PDF
Taller de base de datos postgre sql
PDF
Migrando de MSSQL a PostgreSQL
PPTX
SGBD Postgresql
PDF
Evolucion de PostgreSQL hasta 9.4
PDF
Potsgrade emerson
PPTX
Base de datos sql
PDF
Postgresql
PDF
Postgresql
PDF
Postgresql
Creación de funciones postgre sql
PostgreSQL: Un motor Impulsado por una comunidad
Introducción a PostgreSql
Estado del Desarrollo de PostgreSQL-9.0
Sql Procedural
Evolución y avances del Gestor PostgreSQL
LSWC PostgreSQL 9.1 (2011)
Postgres programmer josue
Presentación de Postgresql 9.1
Taller de base de datos postgre sql
Migrando de MSSQL a PostgreSQL
SGBD Postgresql
Evolucion de PostgreSQL hasta 9.4
Potsgrade emerson
Base de datos sql
Postgresql
Postgresql
Postgresql
Publicidad

Plpgsql seguridad bd_postgresql_2011

  • 2. PL/PgSQL CREATE FUNCTION sumar(n1 numeric ,n2 numeric) RETURNS numeric AS $$ DECLARE numero numeric; BEGIN numero = n1+n2; return numero; END; $$ language plpgsql
  • 3. PL/PgSQL CREATE FUNCTION buscar1(id_buscar integer) RETURNS record AS $$ DECLARE registro record; BEGIN select texto1,texto2 into registro from tabla1 where id=id_buscar; return registro; END; $$ language plpgsql
  • 4. PL/PgSQL CREATE FUNCTION buscar2(text_buscar varchar) RETURNS setof record AS $$ DECLARE registros record; BEGIN for registros in( select id,texto1,texto2 from tabla1 where texto1 like text_buscar ) loop return next registros; end loop; END; $$ language plpgsql
  • 6. PL/PgSQL CREATE OR REPLACE FUNCTION buscar3(text_buscar varchar) RETURNS setof record AS $$ DECLARE registros record; BEGIN for registros in( select id,texto1,texto2 from tabla1 where texto1 like text_buscar ) loop return next registros; end loop; IF NOT FOUND THEN RAISE EXCEPTION 'texto % no se consigue', text_buscar; END IF; END; $$ language plpgsql
  • 7. PL/PgSQL CREATE OR REPLACE FUNCTION verificar(numero integer) returns boolean AS $$ DECLARE respuesta boolean; BEGIN IF ((numero>=0) AND (numero<=9)) THEN respuesta=TRUE; ELSE respuesta=FALSE; END IF; RETURN respuesta; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION disparador2()returns trigger AS $$ DECLARE valor boolean; BEGIN valor=verificar(NEW.numero); IF (valor=FALSE) THEN RAISE EXCEPTION 'Valor incompatible--> %',NEW.numero; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql;
  • 8. PL/PgSQL CREATE OR REPLACE TRIGGER disparador BEFORE INSERT ON tabla2 FOR EACH ROW EXECUTE PROCEDURE disparador2();
  • 9. Seguridad postgres=# 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. Seguridad ponencia=# CREATE USER usuario1 UNENCRYPTED PASSWORD '123456'; CREATE ROLE ponencia=# CREATE SCHEMA usuario1 CREATE TABLE tab1(x integer); CREATE SCHEMA ponencia=# INSERT INTO usuario1.tab1 VALUES (1); INSERT 0 1 ponencia=# GRANT USAGE ON SCHEMA usuario1 to usuario1; GRANT ponencia=# SELECT x from usuario1.tab1; x --- 1 (1 fila) ponencia=# SET SESSION AUTHORIZATION usuario1; SET ponencia=> SELECT x from usuario1.tab1; ERROR: permiso denegado a la relación tab1 ponencia=# SET SESSION AUTHORIZATION usuario1; SET ponencia=> SELECT x from usuario1.tab1; x --- 1 (1 fila)
  • 11. Seguridad ponencia=> SET SESSION AUTHORIZATION postgres; SET ponencia=# REVOKE ALL PRIVILEGES ON SCHEMA PUBLIC FROM usuario1; REVOKE ponencia=> CREATE TABLE x(); ERROR: permiso denegado al esquema usuario1 ponencia=> CREATE TABLE usuario1.x(); ERROR: permiso denegado al esquema usuario1 ponencia=> d Listado de relaciones Esquema | Nombre | Tipo | Dueño --------------+------------------+-----------------+---------- 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. Seguridad ponencia=> SET SESSION AUTHORIZATION postgres; SET ponencia=# REVOKE SELECT ON pg_user FROM public; REVOKE ponencia=# SET SESSION AUTHORIZATION usuario1; SET ponencia=> SELECT * FROM pg_user; ERROR: permiso denegado a la relación pg_user ponencia=> SET SESSION AUTHORIZATION postgres; SET
  • 13. Seguridad CREATE OR REPLACE FUNCTION usuarios() RETURNS SETOF RECORD AS $$ DECLARE rep RECORD; BEGIN FOR rep in ( SELECT * FROM pg_user ) loop RETURN NEXT rep; end loop; END; $$ LANGUAGE plpgsql SECURITY DEFINER; postgres=# SET SESSION AUTHORIZATION usuario1; SET
  • 15. ¿PREGUNTAS? Muchas Gracias... Contacto: lennin.caro@yahoo.com @lennincaro +58 412-5826767