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

La actualidad más candente

Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejerciciostestgrupocomex
 
Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Sesion06c - Sentencias SQL en PL-SQL (Oracle)Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Sesion06c - Sentencias SQL en PL-SQL (Oracle)
José Toro
 
Código - Apuntadores
Código - ApuntadoresCódigo - Apuntadores
Código - Apuntadores
felix lira
 
Tarea 2 y_3
Tarea 2 y_3Tarea 2 y_3
Tarea 2 y_3
Diana Cobos
 
Manejo de archivos y carpetas :)
Manejo de archivos y carpetas :)Manejo de archivos y carpetas :)
Manejo de archivos y carpetas :)
IGNACIO301299
 
Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL
Jair Ospino Ardila
 
Programa de arbol
Programa  de arbol Programa  de arbol
Programa de arbol zxxsasukexxz
 
Quasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en CQuasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en Cdegarden
 
Trabajo digital.
Trabajo digital.Trabajo digital.
Trabajo digital.
edwin-c
 
Insert
InsertInsert
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenadosguesta403644
 
About aliases.help
About aliases.helpAbout aliases.help
About aliases.help
tiopocho
 

La actualidad más candente (20)

Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Resumen scripts unix
Resumen scripts unixResumen scripts unix
Resumen scripts unix
 
Practicas programacion 1 10
Practicas programacion 1 10Practicas programacion 1 10
Practicas programacion 1 10
 
Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Sesion06c - Sentencias SQL en PL-SQL (Oracle)Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Sesion06c - Sentencias SQL en PL-SQL (Oracle)
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Código - Apuntadores
Código - ApuntadoresCódigo - Apuntadores
Código - Apuntadores
 
Tarea 2 y_3
Tarea 2 y_3Tarea 2 y_3
Tarea 2 y_3
 
Manejo de archivos y carpetas :)
Manejo de archivos y carpetas :)Manejo de archivos y carpetas :)
Manejo de archivos y carpetas :)
 
Script en msdos
Script en msdosScript en msdos
Script en msdos
 
ergonomia
ergonomiaergonomia
ergonomia
 
Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL
 
Programa de arbol
Programa  de arbol Programa  de arbol
Programa de arbol
 
Quasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en CQuasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en C
 
Triggers
TriggersTriggers
Triggers
 
Postgres trigger
Postgres triggerPostgres trigger
Postgres trigger
 
Trabajo digital.
Trabajo digital.Trabajo digital.
Trabajo digital.
 
Insert
InsertInsert
Insert
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Práctica no 9
Práctica no 9Práctica no 9
Práctica no 9
 
About aliases.help
About aliases.helpAbout aliases.help
About aliases.help
 

Similar a Plpgsql seguridad bd_postgresql_2011

Punteros con calculos
Punteros con calculosPunteros con calculos
Punteros con calculos
David Leon Sicilia
 
03 funciones
03 funciones03 funciones
03 funciones
Brayan Melendez Leon
 
Percona University 2023 - Herramientas Utiles Percona Toolkit.pdf
Percona University 2023 - Herramientas Utiles Percona Toolkit.pdfPercona University 2023 - Herramientas Utiles Percona Toolkit.pdf
Percona University 2023 - Herramientas Utiles Percona Toolkit.pdf
FernandoMattera
 
Slony i
Slony iSlony i
Slony imao87t
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggersLuis Jherry
 
Instalacion Postgres
Instalacion PostgresInstalacion Postgres
Instalacion Postgresragmyl
 
Curso Básico de Pl Sql Oracle
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracle
luisguil
 
Creación de funciones postgre sql
Creación de funciones postgre sqlCreación de funciones postgre sql
Creación de funciones postgre sql
Eddie Malca
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggersLuis Jherry
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
Paradigma Digital
 
Comandos de Raptor,C# y Java
Comandos de Raptor,C# y JavaComandos de Raptor,C# y Java
Comandos de Raptor,C# y Java
Ana Ruth G H
 
Introducción a PostgreSql
Introducción a PostgreSqlIntroducción a PostgreSql
Introducción a PostgreSql
RicardoMartinGomez
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidad
Santiago Zarate
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datosjubacalo
 
Estado del Desarrollo de PostgreSQL-9.0
Estado del Desarrollo de PostgreSQL-9.0Estado del Desarrollo de PostgreSQL-9.0
Estado del Desarrollo de PostgreSQL-9.0Marcos Ortiz Valmaseda
 

Similar a Plpgsql seguridad bd_postgresql_2011 (20)

Punteros con calculos
Punteros con calculosPunteros con calculos
Punteros con calculos
 
03 funciones
03 funciones03 funciones
03 funciones
 
Percona University 2023 - Herramientas Utiles Percona Toolkit.pdf
Percona University 2023 - Herramientas Utiles Percona Toolkit.pdfPercona University 2023 - Herramientas Utiles Percona Toolkit.pdf
Percona University 2023 - Herramientas Utiles Percona Toolkit.pdf
 
Slony i
Slony iSlony i
Slony i
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 
Instalacion Postgres
Instalacion PostgresInstalacion Postgres
Instalacion Postgres
 
Ejemplos u4
Ejemplos u4Ejemplos u4
Ejemplos u4
 
Curso Básico de Pl Sql Oracle
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracle
 
Creación de funciones postgre sql
Creación de funciones postgre sqlCreación de funciones postgre sql
Creación de funciones postgre sql
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
 
Comandos de Raptor,C# y Java
Comandos de Raptor,C# y JavaComandos de Raptor,C# y Java
Comandos de Raptor,C# y Java
 
Introducción a PostgreSql
Introducción a PostgreSqlIntroducción a PostgreSql
Introducción a PostgreSql
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidad
 
Replica
ReplicaReplica
Replica
 
Bash Tips Tricks Campus
Bash Tips Tricks CampusBash Tips Tricks Campus
Bash Tips Tricks Campus
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
Estado del Desarrollo de PostgreSQL-9.0
Estado del Desarrollo de PostgreSQL-9.0Estado del Desarrollo de PostgreSQL-9.0
Estado del Desarrollo de PostgreSQL-9.0
 
Disparadores 1213820550525607-9
Disparadores 1213820550525607-9Disparadores 1213820550525607-9
Disparadores 1213820550525607-9
 

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