DBA PostgreSQL

Embed Size (px)

Citation preview

Academia De Software Libre__________________________________________________________

www.codigolibre.org

PostgreSql

________________________________________ 2010 Manual De Administracin de PostgreSql 1

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Clase de Administracin PostgreSql

Documentacin Realizada Por: Ing. Jose Paredes DBA-Senior Meidy Alvarez DBA-Junior

________________________________________ 2010 Manual De Administracin de PostgreSql 2

Academia De Software Libre__________________________________________________________

www.codigolibre.org

NDICE

Dedicatoria..........................................................................................................5 Copyright.............................................................................................................6 Prefacio.................................................................................................................6 Qu se espera de un SGBD?...............................................................................7 Qu exigiremos a un SGBD?..............................................................................7 Gestin de los Recursos del kernel.......................................................................7 psql.......................................................................................................................8 Aplicaciones servidor...........................................................................................8 Arquitectura .........................................................................................................8 El proceso Postmaster..........................................................................................9 La memoria compartida.......................................................................................9 Almacenamiento fsico.........................................................................................9 Ficheros................................................................................................................9 Otros ficheros.......................................................................................................9 Directorios..........................................................................................................10 Creacin del cluster de bases de datos: initdb....................................................10 Creacin del cluster............................................................................................11 Modificacin de template1 + aadir extensiones-contrib..................................12 Puesta en marcha y parada del servidor.............................................................12 Internacionalizacin y localizacin....................................................................13 Ventajas..................................................................................................13 Para ver cmo est configurado en el SO ejecutar.............................................13 Procesamiento de instrucciones.........................................................................14 Gestin de transacciones....................................................................................15 Atomicidad (atomicity)...........................................................................15 Consistencia (consistency)......................................................................15 Aislamiento (isolation)............................................................................16 Persistencia (durability)..........................................................................16 Seguridad en PostgreSQL..................................................................................17 Seguridad en la manipulacin de los ficheros....................................................17 Respecto a las conexiones locales va sockets...................................................17 Seguridad en el acceso de los clientes................................................................18 Conexin local: usando los sockets del dominio Unix......................................18 Conexin remota sin encriptar usando TCP/IP (SSL y no SSL)........................19 Conexin remota encriptada SSL usando TCP/IP (solo SSL)...........................19 Esquema lgico..................................................................................................23 Creacin de roles (usuarios)...............................................................................24 Listando Usuarios..............................................................................................27 Modificando Usuarios.......................................................................................27 Permitir Usuario crear BD.................................................................................29 Cambiando Nombre a un Usuario......................................................................29 Cambiar contrasea...........................................................................................29 Eliminando Usuario............................................................................................29 Creando Grupo...................................................................................................29 Agregando o eliminando un Usuario de Grupo..................................................30 Viendo los Grupos..............................................................................................30________________________________________ 2010 Manual De Administracin de PostgreSql

3

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Re-Nombrando Grupo........................................................................................30 Eliminando Grupo..............................................................................................31 Creacin de tablespaces.....................................................................................31 Creacin de bases de datos.................................................................................32 Esquemas............................................................................................................33 Permisos.............................................................................................................34 Asignando Privilegios........................................................................................35 Quitando Privilegios...........................................................................................35 Cambiando EL propietario de una tabla.............................................................43 Listar los Objetos en Schema Public..................................................................44 Permisos y Seguridad en Schema.......................................................................45 Eliminando Schema............................................................................................45 Funciones de Schema.........................................................................................45 Esquemas especiales...........................................................................................46 Limitaciones.......................................................................................................46 Administrar privilegios de copia de seguridad...................................................46 Administrando desde GNU/Linux......................................................................48 Iniciando postmaster...........................................................................................49 Autentificacin de Usuarios...............................................................................50 Creacin de una base de datos............................................................................50 Acceso a la base de datos...................................................................................51 Bases de datos grandes.......................................................................................52 Tratamiento de problemas..................................................................................53 Tareas administrativas: Copias de seguridad y recuperacin.............................53 Copy...................................................................................................................53 Mantenimiento del fichero de seguimiento........................................................55 Copias de seguridad............................................................................................55 Copias de seguridad de ficheros del SO.............................................................56 Desventajas de este mtodo................................................................................56 Volcado SQL......................................................................................................56 Recuperacin con psql........................................................................................58 Recuperacin con pg_restore.............................................................................58 Scripts Basico de hacer Backup.........................................................................62 Crontab...............................................................................................................62 Qu es cron?..........................................................................................62 Iniciar cron..............................................................................................62 Usando cron.............................................................................................63 Ejecutando Cron con mltiples usuarios, comando crontab...................64 Controlando el acceso a cron...................................................................65 COMANDO chkconfig.....................................................................................66 Fallos en memoria secundaria (disco)................................................................67 Volcado en lnea y recuperacin PITR...............................................................67 Tareas administrativas: Vacuum ...................................................................69 AUTOVACUUM...............................................................................................70 Reindex...............................................................................................................70 Monitorizacion...................................................................................................71

________________________________________ 2010 Manual De Administracin de PostgreSql 4

Academia De Software Libre__________________________________________________________

www.codigolibre.org

DedicatoriaUna mencin de forma especial para Antonio Perpin, Fundador del Movimiento de Software Libre en Repblica Dominicana y en Amrica Latina, persona de grandes principios y vastos conocimientos. No todo hombre tiene el valor de aprender y mucho menos de ensear, por eso sea siempre bendecido por su calidez y gran visin. El objeto ms noble que puede ocupar el hombre es ilustrar a sus semejantes.Meidy E. Alvarez Guerrero

________________________________________ 2010 Manual De Administracin de PostgreSql 5

Academia De Software Libre__________________________________________________________

www.codigolibre.org

CopyrightEsta documentacin es regida por los reglamentos de la GNU Free Documentation License y la GNU General Public License v3, sintase libre de copiar, modificar, aprender, distribuir y redistribuir esta documentacin; haga uso de su derecho como si fuere su deber.

PrefacioEn estas paginas se plasma de manera Teorico/Practico los conocimientos necesarios para convertirse en un Administrador de Base de Datos, usando Postgresql; la finalidad es instruir de manera interactiva todo lo que se debe saber para un manejo eficiente de Postgresql, y aplicarlos a este y otros motores libres. Esta es una etapa de varias en este camino hacia la carrera profesional de la administracin de base de datos y anlisis de estructuras de almacenamiento de registros de datos.

________________________________________ 2010 Manual De Administracin de PostgreSql 6

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Qu se espera de un SGBD?De un Sistema de Gestin de Bases de Datos esperamos: Permita a los usuarios crear otras bases de datos y especificar su esquema por medio de algn lenguaje de definicin. Ofrezca a los usuarios la capacidad de consultar los datos y modificarlos, usando para ello un lenguaje de consulta y manipulacin. Brinde soporte al almacenamiento de cantidades voluminosas de datos durante un largo perodo, protegindolo contra accidentes o utilizacin no autorizada. Controle el acceso concurrente.

Qu exigiremos a un SGBD?Para optar por un buen SGBD debe estudiar su: Escalabilidad: Capacidad de mejorar con el incremento de los recursos invertidos. Portabilidad: Exportacin e importacin de datos de una plataforma a otra. Rendimiento: Recuperacin, actualizacin, concurrencia, etc. de una manera eficiente. Universalidad: Mltiples tipos de datos (multimedia). Disponibilidad: 7x24. Aplicaciones clientes.

Gestion de los Recursos del kernel:La instalacin de PostgreSQL requiere la comprobacin de que el servidor ser capaz de soportarlo. Normalmente, los valores por defecto son ms que suficientes. Estos recusos afectan a la memoria compartida y a los semforos. Ser tarea del administrador de sistemas cambiar los valores de los parmetros si es necesario. Si el sistema no puede proporcionar los recursos que requiere el servidor, ste no se puede poner en marcha y devuelve un error. Para una instalacin normal, los valores por defecto son suficientes. Parmetros de PostgreSQL que afectan a la memoria compartida: Corresponden con una rden de SQL ejecutadas dentro de la base de datos, para saber ms detalles, consultar el manual de cada programa tal como se hace en Linux / Unix: clusterdb: equivalente al comando CLUSTER de SQL, reorganiza cluster de tablas. createdb:crea una base de datos. createlang: define un nuevo lenguaje procedural en una base de datos. createuser: creacin de usuarios.________________________________________ 2010 Manual De Administracin de PostgreSql 7

Academia De Software Libre__________________________________________________________

www.codigolibre.org

dropdb: borrar una base de datos. droplang: borrar un lenguaje procedural. dropuser: borrar un usuario. ecpg: SQL C preprocesador embebido. pg_config: recupera informacin sobre la versin instalada de PostgreSQL. pg_dump: extrae una base de datos en un fichero script o en otros formatos. pg_dumpall: extrae un cluster de base de datos en un fichero script. pg_restore: restaura una base de datos desde un fichero creado con pg_dump.

psql:Terminal interactivo de PostgreSQL. Es la herramienta cannica para la ejecucin de sentencias SQL a travs del shell del SO. Es una herramienta de tipo frontend que permite describir sentencias SQL, ejecutarlas y visualizar sus resultados. El mtodo de ingreso puede ser mediante la insercin directa del cdigo en la consola, o la ejecucin de sentencias dentro de un archivo de texto. Provee de diversos meta-comandos para la ejecucin de las sentencias, as como diversas opciones tipo shell propias de la herramienta. reindexdb: reindexa una base de datos. vacuumdb: reorganiza y analiza una base de datos.

Aplicaciones servidor: initdb: crea un cluster de base de datos.

ipcclean: libera la memoria compartida y los semforos de un servidor PostgreSQL. pg_controldata: muestra informacin de control de un cluster de base de datos. pg_ctl: inicia, para o reinicia un servidor PostgreSQL. pg_resetxlog: reinicia el write-ahead log y otras informaciones de control de un cluster de base de datos. postgres: corre un servidor PostgreSQL en modo "single-user". postmaster: servidor de base de datos PostgreSQL multiusuario.

ArquitecturaPostgreSQL funciona con una arquitectura Cliente/Servidor, un proceso servidor (postmaster) y una serie de aplicaciones cliente que realizan solicitudes de acciones contra la base de datos a su proceso servidor. Por cada una de estas aplicaciones cliente, el proceso postmaster crea un proceso postgres.

El proceso Postmaster:Es el proceso inicial. Gestiona los accesos multiusuario y multiconexion. Levanta la memoria compartida. Esta al tanto de solicitudes de nuevas conexiones. Lanza procesos de atencion de demanda, realizando las operaciones sobre la base de datos a solicitud de los clientes. Realiza el enlazado con los archivos de datos, gestionando estos ficheros, donde los ficheros pueden pertenecer a varias bases de datos. La comunicacion entre BackEnd/FrontEnd se realiza mediante TCP/IP, normalmente por el puerto 5432, creando un socket (/tmp/.s.PGSQL.5432).

________________________________________ 2010 Manual De Administracin de PostgreSql 8

Academia De Software Libre__________________________________________________________

www.codigolibre.org

La memoria compartida:Gestiona los recursos entre procesos backend. Gestiona la cache del disco, maneja otras estructuras internas. De esta manera podemos definir el concepto de CLUSTER DE BASE DE DATOS, como una instancia de PostgreSQL, donde se lanza un proceso postmaster, que puede gestionar varias bases de datos. En un servidor, pueden haber varios cluster, cada uno tendra su postmaster, y cada postmaster escuchara por un puerto diferente. Nota: no confundir este concepto de cluster con los tipicos que se manejan en bases de datos de base de datos en cluster o tablas en cluster.

Almacenamiento fisico:En un servidor se crean uno o varios clusters de bases de datos. La estructura fisica del cluster se crea con el programa initdb, con este programa se determina la ubicacion fisica y el juego de caracteres. En las instalaciones automticas a partir de paquetes (rpm, apt-get, etc) o en Windows, se crea un cluster automticamente con tres bases de datos, template0, template1 y postgres. El cluster se crea en un directorio data dentro del directorio donde se ha instalado postgres. Normalmente, se define una variable de entorno, PGDATA que apunte al directorio donde se crea el cluster.

Ficheros: postgresql.conf: fichero de configuracion principal, contiene la asignacion a los parametros que configuran el funcionamiento del servidor. pg_hba.conf: fichero de configuracion de la autenticacion de los clientes y usuarios y del acceso a las bases de datos del cluster. pg_ident.conf: fichero accesorio al anterior, determina como se realiza la autenticacion ident que contiene la correspondencia entre usuarios del Sistema Operativo y de PostgreSQL. PG_VERSION: fichero de texto con la version de software Postgres que crea el cluster .

Otros ficheros: postmaster.pid: se crea cuando el postmaster arranca, contiene el PID del proceso postmaster. postmaster.opts: contiene las opciones con las que se ha iniciado el postmaster. recovery.conf, recovery.done: si se quiere o se ha hecho una recuperacion.

________________________________________ 2010 Manual De Administracin de PostgreSql 9

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Directorios: base: las plantillas y las bases de datos. contiene un directorio por cada base de datos, dentro hay un fichero por cada tabla o indice de una base de datos, los numeros corresponden a los OIDs de las tablas o indices. template0 (1): contiene las definiciones de las tablas del sistema, vistas, funciones y tipos estandar. Nunca se debe modificar ni intentar conectarse a ella, ya que esta por si template1 se corrompe. template1 (N): base de datos plantilla para crear nuevas bases de datos, se puede modificar su estructura, anadiendo tablas, indices, funciones, etc. Es la que se usara como plantilla para crear otras bases de datos. global: tablas e indices del catlogo comunes a todas las bases de datos. catalogo compartido: pg_shadow (usuarios), pg_database, etc. pgstat.stat: fichero usado por el monitor de estadsticas. pg_control: fichero con parmetros del cluster, algunos inmutables (establecidos en la creacin del cluster) y otros variables (establecidos en la puesta en marcha). pg_log: ficheros de seguimiento del servidor. Se crea en la versin de Windows, en la de Linux, se debe indicar al arrancar el postmaster en qu fichero se hace el seguimiento. pg_xlog: ficheros de diario del servidor (WAL). Contiene los diarios de escritura adelantada, para usarlos en las recuperaciones. Se implementan como un conjunto de segmentos (ficheros) de un tamao de 16Mb y divididos en pginas de 8Kb. pg_clog: ficheros de diario para las transacciones (estado de cada transaccin). Contiene los ficheros de confirmacion. Un diario de confirmacin refleja el estado de cada transaccin: confirmada, en progreso o abortada. pg_multixact: contiene datos sobre el estado multi-transaccional, usado para los bloqueos compartidos de filas. pg_twophase: ficheros de estado para las transacciones preparadas. pg_subtrans: para realizar los savepoints en medio de transacciones. pg_tblspc: informacin sobre los tablespaces. Cuidado porque en linux/unix contiene enlaces a los directorios donde se crean los tablespaces y hay que controlar, en caso de cambios de ficheros, que estn correctos.

Creacin del cluster de bases de datos: initdbDespus de instalar PostgreSQL, lo primero que hay que realizar es la creacin de un cluster, teniendo en cuenta que en un servidor, se pueden crear todos los cluster que se quieran.________________________________________ 2010 Manual De Administracin de PostgreSql 10

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Creacion del cluster:Ya vimos en un punto anterior cmo se crea un cluster de base de datos, por ejemplo, en este curso, vamos a crear el siguiente cluster: initdb --pgdata=$PGDATA --encoding=LATIN1 --locale=es_ES Con este proceso se han creado tres bases de datos: template0 (que ya se ha dicho que no se debe modificar ni debemos conectarnos a ella), template1 y postgres. Al terminar de crear el cluster nos responde que ya podemos iniciar el postmaster de este cluster de dos modos: $ postmaster -D $PGDATA o pg_ctl -D $PGDATA -l $PGLOG start Lo hacemos del segundo modo, ahora, una vez arrancada la instancia, podemos conectarnos desde nuestro servidor a la base de datos usando el psql: Si queremos parar el servidor: $ pg_ctl stop --Siqueremos ver la informacion inicializada por initdb: [postgres@jp ~]$pg_controldata data/ pg_control version number: Catalog version number: Database system identifier: Database cluster state: pg_control last modified: Latest checkpoint location: Prior checkpoint location: Latest checkpoint's REDO location: Latest checkpoint's TimeLineID: Latest checkpoint's NextXID: Latest checkpoint's NextOID: Latest checkpoint's NextMultiXactId: Latest checkpoint's NextMultiOffset: Time of latest checkpoint: Minimum recovery ending location: Maximum data alignment: Database block size: Blocks per segment of large relation: WAL block size: Bytes per WAL segment: Maximum length of identifiers: Maximum columns in an index: Maximum size of a TOAST chunk: Date/time type storage: 843 200904091 5470533823675219895 in production Sat 05 Jun 2010 10:59:44 AM AST 0/2E23574 0/2BBB43C 0/2E23574 1 0/3448 35751 1 0 Sat 05 Jun 2010 10:57:32 AM AST 0/0 4 8192 131072 8192 16777216 64 32 2000 64-bit integers________________________________________ 2010 Manual De Administracin de PostgreSql 11

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Float4 argument passing: Float8 argument passing:

by value by reference

Modificacion de template1 + aadir extensiones-contrib: Hay que tener en cuenta ciertos aspectos antes de empezar a trabajar con nuestras bases de datos. template1 es una plantilla para crear otras bases de datos, conviene que, antes de crear nuevas bases de datos, la completemos con todos aquellos elementos que consideremos que deben estar en todas las bases de datos que creemos, lenguajes, mdulos opcionales (tsearch2, lo, dblink, etc), tablas comunes, etc. Ms adelante veremos cmo se instalan estas opciones. va a ser postgres nuestra base de datos o la reservamos para pruebas o como plantilla y no usamos template1?, vamos a crear ms bases de datos? Para modificar template1 no hay ms que conectarse a ella y ejecutar los scripts de base de datos que hagan falta. Por ejemplo, las bases de datos se suelen crear sin lenguajes, no existe el plpgsql, para instalarlo, ejecutamos desde el sistema operativo: $ createlang plpgsql template1 $ createlang plpgsql postgres Lo ejecutamos tambin en postgres para que tenga las mismas opciones. Pero adems, en el mundo del software libre se crea cdigo para aadir nuevas funcionalidades. Estos mdulos los hemos aadido, por ejemplo, en la instalacin de PostgreSQL en Windows, pero no en la de Linux, para poder instalarlos hay que ir al directorio $PGSRC/contrib. En $PGSRC/contrib hay un fichero README que indica el uso de cada una de estas opciones. Ejemplos de opciones que se tienen que instalar segn los requerimientos de las aplicaciones: tsearch2: soporte para indexacin usando GiST lo: mantenimiento de tipos de datos LOB vacuumlo: vacuum para objetos LOB dblink: poder ejecutar sentencias en otras bases de datos Puesta en marcha y parada del servidor: La puesta en marcha del servidor se puede hacer de forma manual con dos comandos: pg_ctl: facilidad para la puesta en marcha, parada y reconfiguracin del servidor. Hace uso________________________________________ 2010 Manual De Administracin de PostgreSql 12

Academia De Software Libre__________________________________________________________

www.codigolibre.org

de la instruccin que acta sobre el servidor postgres. postmaster: proceso servidor de base de datos. El comando pg_ctl es el que se usa normalmente, porque permite controlar ms aspectos que el comando postmaster. Operaciones: start: puesta en marcha del servidor. stop: parada del servidor. restart: parada del servidor seguida de puesta en marcha. reload: envia al postmaster una senal SIGHUP, que provoca que recargue toda

la informacion de configuracion. Algunas opciones de configuracion requieren parar el servidor. status: comprueba si hay un postmaster en marcha y muestra el PID y sus

opciones de puesta en marcha. kill, register, unregister: opciones para la version de Windows para matar,

registrar como servicio o eliminar el servicio.

Internacionalizacin y localizacin:Internacionalizacin: proceso de desarrollo de software de forma que pueda ser usado en distintas ubicaciones. Localizacin: proceso de adaptacin de una aplicacin para que sea usada en una ubicacin especfica. Ventajas: 1 2 3 4 5 Mensajes en varios idiomas. Mensajes en varios juegos de caracteres. Visualizacion de datos de usuario en diversos juegos de caracteres. Diversos tipos de ordenaciones. Clasificacion de caracteres: mayusculas, puntuacion, acentos, etc.

Para ver cmo est configurado en el SO ejecutar: $ locale Que nos mostrar la configuracin activa, podemos cambiar la configuracin entre cualquiera de las que estn instaladas en el sistema operativo, para ver cules estn disponibles: $ locale -a En cuanto a los juegos de caracteres: Soporta distintos tipos: byte simple o multibyte.

________________________________________ 2010 Manual De Administracin de PostgreSql 13

Academia De Software Libre__________________________________________________________

www.codigolibre.org

el cluster puede estar en un conjunto de caracteres y la base de datos en otro: $ initdb -E unicode $ createdb -E latin1 base1 SQL# create database base2 with encoding win ; Se produce una conversin automtica entre servidor / cliente (en la tabla pg_conversion estn las conversiones por defecto.

Procesamiento de instrucciones:Se produce un dilogo bsico entre el proceso front-end (aplicacin) y el proceso back-end (postgres), que consta bsicamente de los siguientes pasos: 1. La aplicacin enva una instruccin al proceso postgres. 2. El servidor realiza en anlisis y el proceso postgres responde OK o devuelve error. 3. La aplicacin solicita la ejecucin y el servidor la realiza, devolviendo Ok o error. 4. Por ltimo la aplicacin solicita la recuperacin de los datos y el servidor responde con los resultados de la instruccin. Para el procesamiento de instrucciones PostgreSQL usa la cach de la base de datos (shared buffers), coleccin de buffers de 8Kb en la memoria compartida y que sirven como cach de las pginas de los ficheros y sentencias que se han usado recientemente. Esta memoria se reserva cuando se pone en marcha el servidor. Los bloques de buffers modificados se llaman "sucios" y se colocan en una lista sucia. La lista sucia controla todas las modificaciones de datos que se hacen en la cach y que no se han vaciado al disco. La lista sucia se vaca, por ejemplo, cuando se produce un punto de control (checkpoint) o simplemente se llena la lista. Si la instruccin es una consulta, el servidor siempre lee primero si tiene estos bloques de datos en la cach, en caso contrario, los lee del disco y los copia a la cache, realizando esta operacin tantas veces como sea necesario para ejecutar una instruccin. Si la instruccin es una actualizacin de datos entran en juego tambin los ficheros de diario (WAL) y los buffers de diario (buffers WAL). Por ejemplo, al ejecutar un Update de una fila: 1. Mirar si los datos estn en los buffers compartidos y recuperar el valor antiguo. 2.Si no estn recuperalos de los ficheros de datos y ponerlos en los shared buffers. 3.Se escribe el valor nuevo en el buffer WAL. 4.Se realiza la modiciacin y se escribe en los shared buffers. todava no se han escrito los datos en disco!________________________________________ 2010 Manual De Administracin de PostgreSql 14

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Gestin de transacciones:PostgreSQL cumple las reglas ACID: 1 2 3 4 Atomicidad (atomicity). Consistencia (consistency). Aislamiento (isolation). Persistencia (durability).

Atomicidad: La palabra se deriva de tomo, que significa indivisible; como indivisibles son cada una de las operaciones contenidas dentro de una transaccin. Una transaccin es un bloque de operaciones o instrucciones dirigido a modificar una base de datos en una determinada direccin. En realidad, lo importante aqu, es que se cumpla la regla de todo o nada. Si todas las operaciones se realizan con xito, los resultados producidos por la transaccin se guardan en la base de datos. Si alguna operacin falla, todas las operaciones son deshechas (rollback), incluso aunque alguna operacin haya sido realizada con xito. Solucin En PostgreSQL podemos hacer que un grupo de sentencias SQL se ejecuten dentro de una transaccin, encerrndolas entre las sentencias BEGIN y COMMIT. De esta forma aseguramos que se ejecutan todas o ninguna. Si llegados a algn punto dentro de la transaccin necesitamos deshacerla completamente, utilizamos ROLLBACK, en lugar de COMMIT, y todos los cambios son deshechos. Durante las transacciones, existen restricciones diferidas (ser verifican al final de la transaccin) o inmediatas (se verifican en cada operacin), en este caso, si alguna condicin no se cumple, la transaccin queda en estado latente, algunas consultas no se pueden realizar y las actualizaciones no tendrn efecto, con lo que solo se puede resolver deshaciendo la transaccin. Por otro lado, PostgreSQL trata cualquier sentencia aislada como si sta se ejecutara dentro de una pequea transaccin; aunque no usemos BEGIN, cada sentencia incorpora implcitamente un BEGIN y, si culmina con xito, un COMMIT, a este modo se le conoce como "modo autoconfirmacin". Consistencia: Una base de datos es una herramienta para modelar y registrar una realidad cambiante. Sin embargo, debe hacerlo consistentemente de acuerdo con unas reglas determinadas o restricciones de integridad definidas. La realidad modelada as, puede ir cambiando al pasar de un estado en el que cumple las reglas, a otro en el que tambin las cumple. Si al ejecutar una transaccin, por el motivo que sea, se incumpliera alguna de estas reglas, la transaccin no se llegara a completar. Esto garantiza que una base de datos siempre permanezca en un estado vlido, es decir, consistente con las reglas.

________________________________________ 2010 Manual De Administracin de PostgreSql 15

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Solucion: A partir de la version 7.0 se anadio gestion de integridad en PostgreSQL, las restricciones soportadas son: not null check unique primary key foreign key, con dos tipos match full (completa) y match partial (si en alguna columna no hay valores no se comprueba la integridad, aunque esta opcion no esta implementada) Solo las instrucciones de clave ajena son diferibles, el resto son inmediatas. Aislamiento: Los resultados de una transaccin que est siendo ejecutada, son invisibles a cualquier otra transaccin hasta que la primera no haya sido completada con xito. La ejecucin no perturba a otras transacciones que se ejecuten concurrentemente. Solucin: Frente a otro modelos tradicionales que controlan el acceso concurrente a los datos a travs de bloqueos, PostgreSQL utiliza un modelo denominado Multiversion Concurrency Control (MVCC), segn el cual, al consultar la BD, cada transaccin ve una instantnea de la BD tal como era hace un cierto tiempo (una versin de la BD) y no el estado actual de la BD. Este mecanismo evita que una transaccin pueda ver datos inconsistentes modificados por otra. Aislando las transacciones que operan concurrentemente en distintas sesiones, un lector no necesita esperar a un escritor; y un escritor no necesita esperar a un lector. Persistencia o Durabilidad: La durabilidad garantiza que los efectos resultantes de una transaccin, una vez ha sido completada con xito, permanecen en la base de datos para siempre, incluso cuando se puedan producir posteriormente fallos de cualquier clase. Por ejemplo, si durante una transaccin se produce un apagado del servidor, una vez reiniciado el servidor, un sistema que lleve un registro de transacciones realizadas, advertira rpidamente que existe una sin completar, finalizndola correctamente. Solucin: PostgreSQL utiliza una tcnica estndar denominada WAL (Write-ahead logging, o escritura anticipada de registros) para controlar tanto la consistencia como la durabilidad de las transacciones. Brevemente explicada, consiste en que los cambios en los ficheros de datos (tablas e ndices) slo se materializan cuando existe previamente en el disco un registro en el que estn anotados dichos cambios. Siguiendo este procedimiento, no es necesario enviar pginas al disco cada vez que una transaccin se completa. Esta tcnica no slo mejora el rendimiento del servidor, sino que ante un fallo de la mquina, ser posible recuperar la BD a partir de ese registro: cualquier cambio no aplicado a las pginas de datos en el disco ser________________________________________ 2010 Manual De Administracin de PostgreSql 16

Academia De Software Libre__________________________________________________________

www.codigolibre.org

nuevamente hecho desde el log (roll-forward recovery, o REDO) mientras que los posibles cambios realizados en pginas de disco por transacciones incompletas, podrn ser deshechos manteniendo la integridad y la consistencia de los datos (roll-backward recovery, o UNDO). Estos ficheros de diario estn en $PGDATA/pg_xlog, son ficheros de 16Mb, divididos en pginas de 8Kb, el sistema crea uno inicialmente y va creando ms segn las necesidades, rotando de manera cclica segn marquen los parmetros de sistema que gestionan este funcionamiento (checkpoint_segments y archive_command). Siguiendo con la instruccin (update de una fila), al ejecutar un COMMIT se produce: 1. Se escriben los datos del buffer WAL en los ficheros de diario WAL. 2. Se pueden refrescar las copias multiversin en los shared buffers. 3. Se retorna el control a la aplicacin. Entonces, los datos de los buffers no se han escrito en disco todava, pero los del diario si, as los datos de la transaccin nunca se pierden. Seguridad en PostgreSQL: La seguridad en PostgreSQL se materializa en tres aspectos: Seguridad en la manipulacin de los ficheros de PostgreSQL. Seguridad en los accesos de los clientes. Definicin de los privilegios para acceder a los objetos de la base de datos a los usuarios PostgreSQL. Seguridad en la manipulacin de los ficheros: La informacin ms crtica est en $PGDATA. Todos los ficheros deben pertenecer al usuario postgres. El usuario postgres debe ser el nico que pueda: Leer, escribir y ejecutar sobre los directorios en los ficheros leer y escribir en los ficheros Respecto a las conexiones locales va sockets: Todos los usuarios usan la misma. Se puede restringir el uso para algunos usuarios del SO. Ver el directorio /tmp, donde existe un fichero .s.PGSQL.5432 que se crea cuando arranca el postmaster, los permisos de este fichero son 777, cualquier usuario del SO se puede conectar. Adems hay un .s.PGSQL.5432.lock que slo puede leer postgres.________________________________________ 2010 Manual De Administracin de PostgreSql 17

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Los permisos de este socket se pueden configurar en postgresql.conf con los parmetros unix_socket_directory, unix_socket_group y unix_socket_permission. Seguridad en el acceso de los clientes: Es importante poder definir desde qu equipos se pueden conectar a nuestra base de datos, as como poder definir qu usuarios y a qu bases de datos se pueden conectar. La configuracin de este nivel de seguridad se realiza en los ficheros pg_hba.conf (hba = host based authentication) y pg_ident.conf. Se trata de editar una serie de reglas que se irn procesando de arriba abajo, cuando se encuentre una regla que cumpla la conexin, se ejecutar lo que ponga en el mtodo. Conexin local: usando los sockets del dominio Unix: base_datos: ALL: se permite la conexin a cualquier base de datos. SAMEUSER: solo a bases de datos que su nombre sea el mismo que el usuario que se conecta. SAMEROLE: solo a bases de datos que su nombre sea el mismo que el role que se conecta. nombd1, nombd2, : se permite la conexin a cualquiera de las bases de datos de la lista. @fichero: se permite la conexin a las bases de datos incluidas en el fichero, que debe estar en el mismo directorio que pg_hba.conf. usuario: ALL: se permite la conexin de cualquier role. role1, [+]role2, : se permite la conexin de los roles de la lista y adems se permite la conexin de cualquier role que sea miembro de role2. @fichero: se permite la conexin de los roles incluidos en el fichero, que debe estar en el mismo directorio que pg_hba.conf. Mtodo-Autenticacin: TRUST: conexin aceptada sin condiciones. REJECT: conexin rechazada sin condiciones. PASSWORD: se solicita palabra de paso sin encriptar, las palabras de paso se almacenan en la tabla pg_authid y pueden estar cifradas o no segn como se creara el role. CRYPT: palabra de paso encriptada (versiones previas a la 7.2).

________________________________________ 2010 Manual De Administracin de PostgreSql 18

Academia De Software Libre__________________________________________________________

www.codigolibre.org

MD5: palabra de paso con el mtodo de encriptacin md5, y se almacena tambin con este mtodo. Es el mtodo recomendado por PostgreSQL. Se obtiene un cifrado a partir de la ID de usuario y la palabra de paso, el cliente solicita una semilla al servidor y as se obtiene un segundo cifrado que es envado al servidor, en el servidor se utiliza la palabra de paso almacenada, el ID del usuario (la obtiene de la conexin) y la semilla para obtener un cifrado similar y los compara. KRB5: se usa Kerberos v5 para autenticar el cliente, se ha de habilitar en la instalacin del servidor. IDENT correspondencia: a partir del usuario de la conexin cliente (se fa de la autenticacin del cliente) y de la correspondencia indicada en la opcin, se obtiene un role de PostgreSQL para realizar la conexin. Las correspondencias se obtienen del fichero pg_ident.conf. SAMEUSER: el usuario del sistema operativo es el mismo que se conecta a la BD. Cambio-usuario: el sistema mira el fichero pg_ident.conf, y busca una fila donde est la correspondencia llamada cambio-usuario y se corresponda con el usuario conectado al SO, haciendo la conexin a la BD con el usuario con el usuario de la columna usuario-pg. PAM servicio-pam: autenticacin usando Pluggable Authentication Method proporcionado por el servicio PAM indicado en opcin. Este mtodo es proporcionado por el SO. Se debe compilar el servidor con esta opcin. El PAM por defecto es postgresql. Se deben configurar los mtodos PAM del SO, generalmente basta con incluir la definicin del un nuevo mtodo en el directorio /etc/pam.d.

Conexin remota sin encriptar usando TCP/IP (SSL y no SSL):Permite conexiones SSL y no SSL. La palabra de paso se transmite en texto plano si es no SSL. direccionCIDR direcccionIP mscara IP: especifica un rango de direcciones IP 192.168.200.0/24 192.168.200.0 255.255.255.0: se pueden conectar todas las IPs de la red 192.168.200 192.168.0.0/16 192.168.0.0 255.255.0.0: todos las IPs de la red 192.168 192.168.200.85/32: solo esa IP 0.0.0.0/0 0.0.0.0 0.0.0.0.: cualquier IP

Conexin remota encriptada SSL usando TCP/IP (solo SSL):La transmisin cliente-servidor es encriptada. Los registros HOST se utilizarn para conexiones remotas no-SSL y SSL. Los registros HOSTSSL slo se utilizarn para conexiones remotas SSL. Requiere instalar PostgreSQL con la opcin SSL, crear los ficheros de firmas y claves y________________________________________ 2010 Manual De Administracin de PostgreSql 19

Academia De Software Libre__________________________________________________________

www.codigolibre.org

ubicarlos en el lugar correspondiente. Para configurar el servidor para estas opciones: SSL tiene que estar instalado en el servidor y en los clientes que se conecten. PostgreSQL debe estar compilado con la opcin SSL. El servidor busca en $PGDATA los ficheros server.key (clave privada del servidor, que si est protegida en el arranque. Hay otro fichero server.crt. Se usa el comando OpenSSL. /*****Ejemplos de conexiones remotas*****/(18:25:48)][postgres:data]$ vim postgresql.conf --Para poder aceptar conecciones de otras direcciones debemos descomentar listen_address y cambiar su IP address(localhost) a que sea igual a '*, para que acepte todas las direcciones y tambien descomentaremos el puerto(port) #-----------------------------------------------------------------------------# CONNECTIONS AND AUTHENTICATION #-----------------------------------------------------------------------------# - Connection Settings listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost', '*' = all # (change requires restart) port = 5432 max_connections = 100 # (change requires restart) # (change requires restart)

--Luego de realizar los cambios se debe de reiniciar el sistema -bash-4.0$ pg_ctl restart /****AHORA CON EL pg_hba.conf (hba = host based authentication)****/ (19:00:20)][postgres:data]$ vim pg_hba.conf --Ahora configuraremos el archivo pg_hba.conf la especificacion ya sea de: base de datos, usuario, IP-address y/o metodo de autenticacion de la cual se le va a permitir conectarce al servidor. PostgreSQL Client Authentication Configuration File # =================================================== # # Refer to the "Client Authentication" section in the # PostgreSQL documentation for a complete description ________________________________________ 2010 Manual De Administracin de PostgreSql 20

Academia De Software Libre__________________________________________________________

www.codigolibre.org

# of this file. A short synopsis follows. # # This file controls: which hosts are allowed to connect, how clients # are authenticated, which PostgreSQL user names they can use, which # databases they can access. Records take one of these forms: # # local DATABASE USER METHOD [OPTIONS] # host DATABASE USER CIDR-ADDRESS METHOD [OPTIONS] # hostssl DATABASE USER CIDR-ADDRESS METHOD [OPTIONS] # hostnossl DATABASE USER CIDR-ADDRESS METHOD [OPTIONS] # # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust --Configuraremos la conexion local IPv4 --Nota: siempre que se realice algun cambio en este archivo hay que ejecutar pg_ctl restart. /***Queremos que acepte coneccion desde cualquier IP y cualquier usuario pero solo para la DB sacademico***/ # TYPE DATABASE USER CIDR-ADDRESS METHOD all 0.0.0.0/0 password # IPv4 local connections: host sacademico

--Comprobemos la coneccion -bash-4.0$ psql -U mexy -h 168.100.0.2 sacademico Password for user mexy: Timing is on. psql (8.4.3) Type "help" for help. [168:5432/mexy@sacademico][]# --Otra prueba con diferente IP y usuario -bash-4.0$ psql -U jparedes -h 192.168.100.2 sacademico Password for user jparedes: Timing is on. psql (8.4.3) Type "help" for help. [192:5432/jparedes@sacademico][]> --Si no cumplimos los parametros nos dira lo siguiente: -bash-4.0$ psql -U jparedes -h 192.168.100.2 HR psql: FATAL: no pg_hba.conf entry for host "192.168.100.2", user "jparedes", database "HR", SSL off

________________________________________ 2010 Manual De Administracin de PostgreSql 21

Academia De Software Libre__________________________________________________________

www.codigolibre.org

/***Aqui especificamos que aceptara coneccion a cualquier DB y de cualquier ip pero siempre con el usuario mexy'.***/ # TYPE DATABASE USER CIDR-ADDRESS METHOD # IPv4 local connections: host all mexy 0.0.0.0/0 md5 --Hagamos la coneccion -bash-4.0$ psql -U mexy -h 192.168.100.2 sacademico Password for user mexy: Timing is on. psql (8.4.3) Type "help" for help. [192:5432/mexy@sacademico][]# --Chevere --Lo mismo pero con diferente IP y DB. -bash-4.0$ psql -U mexy -h 168.100.0.2 HR Password for user mexy: Timing is on. psql (8.4.3) Type "help" for help. [168:5432/mexy@HR][]# --Pero siempre con el usuario mexy porque si no nos dara el siguiente: -bash-4.0$ psql -U jparedes -h 168.100.0.2 HR psql: FATAL: no pg_hba.conf entry for host "168.100.0.2", user "jparedes", database "HR", SSL off /***Ahora especificaremos una sola IP(en este caso cualquier IP) con cualquier DB y/o usuario pero con metodo password.***/ # TYPE DATABASE USER CIDR-ADDRESS METHOD # IPv4 local connections: host all all 0.0.0.0/0 password --Probemos -bash-4.0$ psql -U mexy -h 10.0.0.1 sacademico Password for user mexy: Timing is on. psql (8.4.3) Type "help" for help. [10:5432/mexy@sacademico][]> --Nitido! /*** Practica***/ --Realiza una conexion remota desde tu maquina, con un usuario, IP especifico y el metodo password. ________________________________________ 2010 Manual De Administracin de PostgreSql 22

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Esquema lgico:Concepto de Cluster de bases de datos en PostgreSQL: Repositorio que engloba un conjunto de bases de datos, que contienen objetos que se pueden guardar en distintos tablespaces y un conjunto de usuarios que se conectan al cluster. Una base de datos engloba un conjunto de esquemas, los cuales tienen un usuario propietario. En los esquemas es donde se crean los objetos (tablas, ndices, procedimientos, vistas, etc.). Una sesin se abre contra una base de datos. Con lo que tenemos aqu los tres elementos principales a nivel lgico en un cluster: Bases de datos: agrupaciones de esquemas. Por defecto, siempre hay tres bases de datos creadas, template0, template1 y postgres. Tablespaces: ubicaciones alternativas a la que por defecto tiene el cluster. Por defecto no se crea ninguno. Roles: engloba el concepto de usuarios (roles de login) y grupos de permisos (roles de grupo), estos ltimos son lo mismo que los roles de Oracle. Hasta la versin 8 de Postgres no se podan anidar roles, ahora si. Por defecto, si al crear el cluster no se ha indicado otro usuario, se crea el usuario postgres como superusuario. Todos los usuarios son comunes a las bases de datos del cluster, se pueden conectar con cualquiera de las bases de datos. En este punto, las bases de datos se comportan como esquemas de Oracle. Las bases de datos son independientes entre ellas, no se pueden ver objetos de una base de datos desde otra base de datos, excepto si se usan dblinks. Esto marca cmo se deben crear las bases de datos: Si es un servidor que acoge proyectos separados y no se han de interrelacionar: separacin en bases de datos distintas. Si es un servidor de proyectos con recursos comunes: una nica base de datos y distintos esquemas para cada proyecto. /****Ejemplo****/ --Viendo los Logs: --Si queremos ver el history de todos los comandos ejecutados en el plsql: [[local]:5432/jparedes@HR] [] # \s o [postgres@jp ~]$cat .psql_history

________________________________________ 2010 Manual De Administracin de PostgreSql 23

Academia De Software Libre__________________________________________________________

www.codigolibre.org

--Si queremos modificar el numero de comando en el History: [[local]:5432/acolon@HR] [] > \set HISTSIZE 50000 --Para ponerlo permanente la colocamos en el archivo oculto .psqlrc: [postgres@jp ~]$echo "\set HISTSIZE 7000" >> .psqlrc --Verificamos el mismo: [postgres@jp ~]$cat .psqlrc \set PROMPT1 '[%m:%>/%n@%/] [%x] %# ': \set HISTSIZE 5000 --Siqueremos agregar que cada consulta nos revuelva el tiempo en ejecucion en una session: [[local]:5432/postgres@sacademico] [] # \timing --Si queremos que sea permanente: [postgres@jp ~]$echo "\timing on" >> .psqlrc --Desactivar el AUTOCOMMIT: [postgres@jp ~]$echo "\set AUTOCOMMIT off" >> .psqlrc --Verificar: [[local]:5432/postgres@sacademico] [] # \set AUTOCOMMIT = 'off' PROMPT1 = '[%m:%>/%n@%/] [%x] %# ' PROMPT2 = '%/%R%# ' PROMPT3 = '>> ' VERBOSITY = 'default' VERSION = 'PostgreSQL 8.4.4 on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 32-bit' DBNAME = 'sacademico' USER = 'postgres' PORT = '5432' ENCODING = 'UTF8' HISTSIZE = '5000' --Ya podemos hacer uso de COMMIT Y ROLLBACK.

Creacin de roles (usuarios):En PostgreSQL los usuarios son tipos de roles, el role es el concepto general. Los roles son globales al cluster, se almacenan en la tabla del catlogo pg_authid y se pueden consultar en las vistas pg_user y pg_roles.________________________________________ 2010 Manual De Administracin de PostgreSql 24

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Desde el sistema operativo: createuser [OPCIN]... [ROL] Opciones: -s, --superuser el rol ser un superusuario -S, --no-superuser el rol no ser un superusuario -d, --createdb el rol podr crear bases de datos -D, --no-createdb el rol no podr crear bases de datos -r, --createrole el rol podr crear otros roles -R, --no-createrole el rol no podr crear otros roles -l, --login el rol podr conectarse (predeterminado) -L, --no-login el rol no podr conectarse -i, --inherit el rol heredar los privilegios de los roles de los cuales es miembro (predeterminado) -I, --no-inherit rol no heredar privilegios -c, --connection-limit=N lmite de conexiones para el rol (predeterminado: sin lmite) -P, --pwprompt asignar una contrasea al nuevo rol -E, --encrypted almacenar la constrasea cifrada -N, --unencrypted almacenar la contrasea sin cifrar -e, --echo mostrar los comandos a medida que se ejecutan -q, --quiet no escribir ningn mensaje --help desplegar esta ayuda y salir --version desplegar informacin de versin y salir Opciones de conexin: -h, --host=ANFITRIN nombre del servidor o directorio del socket -p, --port=PUERTO puerto del servidor -U, --username=NOMBRE nombre de usuario con el cual conectarse (no el usuario a crear) -W, --password pedir contrasea para conectarse Si no se especifican -s, -S, -d, -D, -r, -R o el ROL, se preguntar interactivamente. El comando CREATE USER es ahora un alias de CREATE ROLE, pero con la opcin LOGIN por defecto. /****Ejemplo****/ --Primero creamos un usuario: --Creando Usuario Primero desde el Shell: [postgres@jp ~]$createuser -W -S -d -r -e pomavid Password: CREATE ROLE pomavid NOSUPERUSER CREATEDB CREATEROLE INHERIT LOGIN; /***Practica***/ --Explique las opciones utilizadas anteriores y luego cree un usuario que no pueda --crear usuario, y que tenga un limite de 5 conexiones ?________________________________________ 2010 Manual De Administracin de PostgreSql 25

Academia De Software Libre__________________________________________________________

www.codigolibre.org

--Creando usuario desde otro usuario con su -: [postgres@jp ~]$su - postgres -c "createuser --no-superuser --createrole --no-createdb nitido2 --echo" Password: CREATE ROLE nitido2 NOSUPERUSER NOCREATEDB CREATEROLE INHERIT LOGIN; /***Practica***/ --Explique la opcion -c y --echo? CREATE USER: Tambien puede utilizar el comando CREATE USER SQL, que tiene varias opciones disponibles con el comando createuser. CREATE USER username [ [ WITH ] SYSID uid | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | CREATEDB | NOCREATEDB | CREATEUSER | NOCREATEUSER | IN GROUP groupname [, ...] | VALID UNTIL 'abstime' ] Forma Simple: CREATE USER user; Creara un usuario con ninguna contrasea ni privilegios adicionales. Tambien puede agregar un usuario a un grupo ya existente y especificar una fecha en la que la contrasea del usuario expirara. El sysid es como el numero uid de UNIX y postgres tomara un valor predeterminado adecuado. template1=# CREATE USER alice WITH PASSWORD 'pAssw0rd'; CREATE USER template1=# CREATE USER bob VALID UNTIL 'Jan 31 2030'; CREATE USER Desde el Shell: CREATEUSER jp /****Ejemplo****/ --Creado Usuario desde el PSQL: [[local]:5432/postgres@postgres] [] # CREATE USER pomavid WITH PASSWORD 'plsql' CREATEDB NOCREATEUSER; CREATE ROLE

________________________________________ 2010 Manual De Administracin de PostgreSql 26

Academia De Software Libre__________________________________________________________

www.codigolibre.org

/***Practica***/ --Crear un usuario que expire en 3 dia y que su password este encriptado?

Listando Usuarios:Puedes ver los usuarios en el servidor mediante la seleccion de la tabla de sistema pg_shadow. Si usted no es un super usuario, no tendra permiso para acceder a esta tabla y tendra que acceder a la vista pg_user lugar, que es identico, pero muestra la contrasea como estrellas. --Vista donde tenemos todos los usuarios almacenados: [[local]:5432/postgres@postgres] [] # SELECT * from pg_user; --Vamos a mostrar donde se almancenan las contraseas: [[local]:5432/postgres@postgres] [] # SELECT * from pg_shadow ;

Modificando Usuarios:Si desea cambiar un usuario puede utilizar el comando SQL ALTER USER, que es similar al comando CREATE USER excepto que usted no puede cambiar el sysid. ALTER USER name [ [ WITH ] [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | CREATEDB | NOCREATEDB | CREATEUSER | NOCREATEUSER | VALID UNTIL 'abstime' ] /****Ejemplo****/--Cambiando contrasea de un usuario: [[local]:5432/postgres@postgres] [] # ALTER USER pepe WITH PASSWORD 'pomavid';

--Creacion de Roles: CREATE ROLE General ; CREATE ROLE Coronel ; CREATE ROLE Cabo ; CREATE ROLE Henry ; --Agregamos un comentario a un ROLE, igual para otro Objeto COMMENT ON ROLE henry IS 'Este Role es el pela papa'; --Ahora vamos a crear los Usuarios a logins en sus respectivos Roles: --Usuario de Jose Paredes CREATE ROLE jparedes WITH LOGIN ENCRYPTED PASSWORD 'kikla' IN ROLE General;________________________________________ 2010 Manual De Administracin de PostgreSql 27

Academia De Software Libre__________________________________________________________

www.codigolibre.org

--Usuario de Orange CREATE ROLE orange WITH LOGIN PASSWORD 'orange' IN ROLE General; --Usuario de Deivi Bolges CREATE ROLE dbolges WITH LOGIN PASSWORD 'venaito' IN ROLE General; --Usuario de Felipe Mateo CREATE ROLE fmateo WITH LOGIN PASSWORD 'gentoo' IN ROLE General; --Usuario de Amaurys Rodriguez CREATE ROLE arodriguez WITH LOGIN PASSWORD 'centos' IN ROLE Coronel VALID UNTIL '2010-05-30'; --Usuario de Felipe Cristhian Nuez CREATE ROLE cnunez WITH LOGIN PASSWORD 'salsa' IN ROLE Coronel; --Usuario de Felipe Franky Almonte CREATE ROLE falmonte WITH LOGIN PASSWORD 'bacula' IN ROLE Coronel; --Usuario de Elvyn Bolges CREATE ROLE ebolges WITH LOGIN PASSWORD 'bolsa' IN ROLE Cabo VALID UNTIL '2010-06-01'; --Usuario de Lus Merlin CREATE ROLE lmerlin WITH LOGIN PASSWORD 'quimica' IN ROLE Cabo VALID UNTIL '2010-05-31'; --Usuario de Henry Terrero CREATE ROLE hterrero WITH LOGIN PASSWORD 'java' IN ROLE henry; --Usuario de Anyelina Colon CREATE ROLE acolon WITH LOGIN PASSWORD 'secre' IN ROLE henry;

________________________________________ 2010 Manual De Administracin de PostgreSql 28

Academia De Software Libre__________________________________________________________

www.codigolibre.org

--Validamos los objetos creados: [[local]:5432/postgres@postgres] [] # SELECT * from pg_roles ; [[local]:5432/postgres@postgres] [] # SELECT * from pg_user ; [[local]:5432/postgres@postgres] [] # SELECT * from pg_group ; [[local]:5432/postgres@postgres] [] # \du [[local]:5432/postgres@postgres] [] # \dg

Permitir Usuario crear BD:template1=# ALTER USER alice CREATEDB; ALTER USER

Cambiando Nombre a un Usuario:ALTER USER name RENAME TO newname; template1=# ALTER USER bob RENAME TO colin; ALTER USER

Cambiar contrasea:template1=# ALTER USER colin WITH PASSWORD 'letmein'; ALTER USER Comprobamos los Cambios y vemos los cambios: En la tabla pg_user

Eliminando Usuario:Al igual que la creacion de usuarios, existen dos formas de eliminar los usuarios, utilizando la lnea de comandos o SQL. En la lnea de comandos usariamos: Desde el Shell $ dropuser alice DROP USER Desde SQL template1=# DROP USER colin; DROP USER

Creando Grupo:Los grupos son totalmente opcionales en postgresql. Solo se usan para simplificar la concesion y revocacion de privilegios para el administrador db, y los usuarios no tienen que ser un miembro de ningun grupo. A diferencia de la creacion de usuarios, solo se pueden crear grupos utilizando SQL. El comando es:________________________________________ 2010 Manual De Administracin de PostgreSql 29

Academia De Software Libre__________________________________________________________

www.codigolibre.org

CREATE GROUP name [ [ WITH ] SYSID gid | USER username [, ...]] Si quisieramos crear un grupo con alice como miembro inicial, se puede utilizar: template1=# CREATE GROUP sales WITH USER alice; CREATE GROUP /****Ejemplo****/ --Creando Grupos: [[local]:5432/postgres@postgres] [] # CREATE GROUP contabilidad; --Creando grupo incluyendo un usuario: [[local]:5432/postgres@postgres] [] # CREATE GROUP contabilidad user pepe;

Agregando o eliminando un Usuario de Grupo:ALTER GROUP groupname [ADD|DROP] USER username [, ... ] template1=# ALTER GROUP sales ADD USER bob; ALTER GROUP template1=# ALTER GROUP sales DROP USER alice; ALTER GROUP /****Ejemplo****/ --Agregando usuario al grupo creado: [[local]:5432/postgres@postgres] [] # ALTER GROUP contabilidad ADD USER pomavid ; --Eliminando usuario de un grupo: [[local]:5432/postgres@postgres] [] # ALTER GROUP contabilidad DROP USER pepe ;

Viendo los Grupos:Podemos ver la pertenencia al grupo al ver la tabla de sistema pg_group. En este ejemplo he aadido alice nuevamente en el grupo de ventas. template1=# select * from pg_group ; La columna grolist muestra una lista de identificadores de usuario que estan en el grupo. Si desea ver los nombres de usuario en un grupo en particular se puede utilizar: template1=# select usename from pg_user, (select grolist from pg_group w

Re-Nombrando Grupo:ALTER GROUP groupname RENAME TO newname template1=# ALTER GROUP sales RENAME TO presales;________________________________________ 2010 Manual De Administracin de PostgreSql 30

Academia De Software Libre__________________________________________________________

www.codigolibre.org

/****Ejemplo****/ --Vamos a renombrar un grupo: [[local]:5432/postgres@postgres] [] # ALTER GROUP contabilidad RENAME TO dba;

Eliminando Grupo:template1=# DROP GROUP presales; /****Ejemplo****/ --Eliminando Grupo: [[local]:5432/postgres@postgres] [] # DROP GROUP dba ; /***Practica***/ --Crear un grupo llamado fcld y agregar tres usuario al mismo:

Creacion de tablespaces:Si queremos especificar ubicaciones alternativas para determinadas bases de datos o tablas, por ejemplo, queremos que ciertas tablas estn en otros discos distintos a los que se encuentran por defecto, debemos crear tablespaces. CREATE TABLESPACE tablespacename [ OWNER username ] LOCATION 'directory' Tablespacename: no puede empezar en pg_ porque est reservado a los tablespaces de sistema. Username: debe ser un superusuario del cluster. Directory: se deben indicar trayectorias absolutas y el propietario del directorio debe ser el usuario con el que se ha instalado PostgreSQL. En versiones anteriores de PostgreSQL, exista el comando initlocation, que serva para indicar ubicaciones alternativas para las bases de datos, y que exiga que se definiese una variable de entorno similar a PGDATA para cada base de datos. Nota: cuando se crean tablespaces, en $PGDATA/pg_tblspc se crean enlaces simblicos a los directorios fsicos donde se encuentran, esto es importante tenerlo en cuenta en procesos como el cambio de ubicaciones o en la restauracin de ficheros desde una copia de seguridad. /****Ejemplo****/ --Trabajando con TableSpace: --Auntomaticamente creamos el directorio tablespace en data y creamos los Los directorios donde se alojaran los TableSpace: [postgres@jp ~]$mkdir -p data/tablespace/tbe_{2008_{1,2},2009_{1,2},2010_1,0000_0}________________________________________ 2010 Manual De Administracin de PostgreSql 31

Academia De Software Libre__________________________________________________________

www.codigolibre.org

... --Queremos dos simplemente, uno para los datos y otro para los indices: [postgres@jp ~]$mkdir -p data/tablespace/tablespace_datos [postgres@jp ~]$mkdir -p data/tablespace/tablespace_index --Aqui creamos nuestros TableSpaces: [[local]:5432/postgres@postgres] [] # CREATE TABLESPACE TS_Pomavid_Datos OWNER pepe LOCATION '/var/lib/pgsql/data/tablespace/tablespace_datos'; [[local]:5432/postgres@postgres] [] # CREATE TABLESPACE TS_Pomavid_Indices OWNER pepe LOCATION '/var/lib/pgsql/data/tablespace/tablespace_index'; --Si queremos poner unos de los TableSpace por defecto: SET default_tablespace=TS_Pomavid_Datos; --Para saber el tamao de que ocupa los TableSpace: [[local]:5432/postgres@postgres] [] # SELECT spcname,spclocation,pg_tablespace_size(spcname)/1024 "Tamao MB" FROM pg_tablespace WHERE spclocation LIKE '/var/lib/pgsql/data/tablespace/tablespaces_datos%'; spcname | spclocation | Tamao MB ---------+-------------+----------(0 rows)

Creacin de bases de datos:Una base de datos se puede crear desde la lnea de comandos del sistema operativo (con el usuario de sistema) o desde una conexin a una base de datos.(con un usuario que tenga privilegios para crear bases de datos). Desde el sistema operativo: $ createdb Opciones: -D, -E, -O, -T, -e, -q, --help --version [OPCIN]... [NOMBRE] [DESCRIPCIN] --tablespace=TBLSPC tablespace por omisin de la base de datos --encoding=CODIFICACIN codificacin para la base de datos --owner=DUEO usuario que ser dueo de la base de datos --template=PATRN base de datos patrn a copiar --echo m ostrar los comandos enviados al servidor --quiet no desplegar mensajes mostrar esta ayuda y salir mostrar el numero de versin y salir

________________________________________ 2010 Manual De Administracin de PostgreSql 32

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Opciones de conexin: -h, --host=ANFITRIN nombre del servidor o directorio del socket -p, --port=PUERTO puerto del servidor -U, --username=USUARIO nombre de usuario para la conexin -W, --password preguntar la contrasea Si no se especifica, se crear una base de datos con el mismo nombre que el usuario actual. Desde un cliente SQL: CREATE DATABASE name [ [ WITH ] [ OWNER [=] dbowner ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ] /****Ejemplo****/ --Ahora con el TableSpace creado ya podemos crear nuestra Bases Datos --La misma alojara todos los objeto en el TableSpace ya creado: --Desde el Shell: [postgres@jp ~]$createdb poma -O pepe -D ts_pomavid_datos -e CREATE DATABASE poma OWNER pepe TABLESPACE ts_pomavid_datos; --Desde PsqL: [[local]:5432/postgres@postgres] [] # CREATE DATABASE poma OWNER pepe tablespace ts_pomavid_datos; CREATE DATABASE --Si queremos pasar una Base Datos ya creada a un TableSapce: [[local]:5432/postgres@postgres] [] # ALTER DATABASE poma SET tablespace ts_pomavid_datos ;

Esquemas:Las bases de datos se organizan mediante esquemas, contenedores lgicos de objetos de base de datos (tablas, vistas, procedimientos, etc.), bsicamente son un espacio de nombres. Es caracterstico de los esquemas: Tienen un propietario. Permiten el uso de la base de datos por multiples usuarios sin interferencias. Permiten que se puedan instalar aplicaciones realizadas por terceros si que existan colisiones en los nombres de los objetos. Para poder ver objetos de un esquema, debe usarse la notacin esquema.objeto ya que en PostgreSQL no existe el concepto de sinnimos como en Oracle. Mas delante seguiremos hablando de Schema.!!!

________________________________________ 2010 Manual De Administracin de PostgreSql 33

Academia De Software Libre__________________________________________________________

www.codigolibre.org

/****Ejemplo****/ --Una vez creada la Base Datos procedemos a crear el Schema: [[local]:5432/postgres@postgres] [] # CREATE SCHEMA cole authorization pepe; CREATE SCHEMA --Para crear un Objeto dentro del Schema creado es y en el TableSpace : [[local]:5432/postgres@postgres] [] # CREATE TABLE cole.Bbella (Nombre Varchar(30)) tablespace ts_pomavid_datos; --Podemos setear el search_path a nivel de base de datos y Schema, Por defecto : [[local]:5432/postgres@postgres] [] # SET search_path TO cole; SET [[local]:5432/postgres@postgres] [] # SHOW search_path ; search_path ------------cole (1 row) --Una vez creado el Schema todo objeto debe ser creado asi: --**************Schema.Objeto************** [[local]:5432/postgres@postgres] [] # SELECT * from cole.TAB TAB ; --Listar los Schema: [[local]:5432/postgres@pomavid] [] # \dn+

PermisosTodos los objetos (tablas, vistas y secuencias) tienen un propietario, que es la persona que lo creo. El propietario o un superusuario, puede establecer permisos en el objeto. Los permisos se compone de un nombre de usuario o grupo y un conjunto de derechos. Estos derechos descritos en la tabla de abajo. Privilege short name SELECT r INSERT a UPDATE w DELETE d RULE R REFERENCES x TRIGGER TEMPORARY EXECUTE USAGE ALL t T X U All Description Puede leer los datos del objeto. Puede insertar datos en el objeto. Puede cambiar los datos en el objeto. Puede eliminar los datos del objeto. Puede crear una regla sobre la tablas. Se puede crear una clave externa a una tabla.Necesita esto en ambos lados de la llave. Se puede crear un desencadenador en la tabla. Se puede crear una tabla temporal. Se puede ejecutar la funcion. Puede usar la lengua del procedimiento. privilegios adecuados. Para las tablas, esto equivale a arwdRxt

________________________________________ 2010 Manual De Administracin de PostgreSql 34

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Viendo los privilegios: sales=# \dp

Asignando Privilegios:GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTI GRANT INSERT, UPDATE, DELETE ON TABLE suppliers TO bob;

Quitando Privilegios:REVOKE INSERT UPDATE DELETE ON TABLE suppliers FROM bob CASCASE /****Ejemplo****/ --Ahora vamos Asignacion de Derechos sobre Objetos: --Utilizaremos el Scripts de hr mas otros objetos creados por los usuarios: [postgres@jp ~]$psql < hr_Postgreql.sql --Vemos los objetos insertados desde el Scripts hr: [[local]:5432/postgres@HR] [] # \d List of relations Schema | Name | Type | Owner --------+-----------------------+----------+---------public | countries | table | postgres public | departments | table | postgres public | employees | table | postgres public | job_history | table | postgres public | jobs | table | postgres public | locations | table | postgres public | regions | table | postgres public | regions_region_id_seq | sequence | postgres (8 rows) --Para cambiar el dueo de una tabla, de esta manera usted puede tener todos los privilegios sobre un objeto: [[local]:5432/postgres@HR] [] # ALTER TABLE countries owner to jparedes ; ALTER TABLE [[local]:5432/postgres@HR] [] # \d List of relations Schema | Name | Type | Owner --------+-----------------------+----------+---------public | countries | table | jparedes

________________________________________ 2010 Manual De Administracin de PostgreSql 35

Academia De Software Libre__________________________________________________________

www.codigolibre.org

--Ahora nos logueamos con el usuario jparedes en la Bases Datos HR: [postgres@jp ~]$psql -U jparedes HR psql (8.4.4) Type "help" for help. [[local]:5432/jparedes@HR] [] > --Ahora tratamos de consultar una de las tablas de la Base Datos HR: [[local]:5432/jparedes@HR] [] > SELECT * from employees ; ERROR: permission denied for relation employees --Vamos otorgar privilegios al usuario jparedes para hacer SELECT sobre la tabla employees; --como hicimos login con jparedes que no es el dueo ni tiene privilegios sobre la Bases Datos HR, --Tenemos que hacer login con el dueo del objeto o el DBA: [postgres@jp ~]$psql -U postgres HR --Ortogamos privilegios de SELECT al usuario jparedes: [[local]:5432/postgres@HR] [] # GRANT SELECT ON employees TO jparedes; GRANT --Listo ya el usuario jparedes puede hacer SELECT sobre la tabla employees: [[local]:5432/jparedes@HR] [] > SELECT first_name, salary from employees limit 1; first_name | salary ------------+-------John | 14000 (1 row) --Le revocamos los privilegios de SELECT al usuario jparedes: [[local]:5432/postgres@HR] [] # REVOKE SELECT ON employees FROM jparedes; REVOKE --Hacer pruebas: [[local]:5432/jparedes@HR] [] > SELECT * from employees ; ERROR: permission denied for relation employees --Tenenos un ROLE llamado General y el mismo estan agregados varios usuarios --Vamos darle privilegios de SELECT a ese ROLE completo: [[local]:5432/postgres@HR] [] # GRANT SELECT ON employees TO general ; --Ahora cualquira de los usuarios que estan en ese ROLE puede hacer SELECT sobre las tablas del Schema HR:________________________________________ 2010 Manual De Administracin de PostgreSql 36

Academia De Software Libre__________________________________________________________

www.codigolibre.org

--Hacer pruebas: [postgres@jp ~]$psql -U orange HR psql (8.4.4) Type "help" for help. [[local]:5432/orange@HR] [] > SELECT first_name, salary from employees limit 1; first_name | salary -------------+-------John | 14000 (1 row) --Vamos REVOCAR los privilegios al ROlE General: [[local]:5432/postgres@HR] [] # REVOKE SELECT ON employees FROM general ; REVOKE --Hacer pruebas: [[local]:5432/fmateo@HR] [] > SELECT first_name, salary from employees limit 1; ERROR: permission denied for relation employees --Vamos a darle todos los priviegio al ROLE General sobre un Schema:? --Primero hacemos logion con el usuario hterrero el General de los pela papa: [postgres@jp ~]$psql -U hterrero sacademico psql (8.4.4) Type "help" for help. --Hacemos una consulta a la tabla cursos del Schema sacademicoschema: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos; ERROR: relation "sacademicoschema.curso" does not exist LINE 1: SELECT * from sacademicoschema.cursos; ^ sacademico --Otorga los permisos en el Schema SacademicoSchema: [[local]:5432/postgres@sacademico] [] # GRANT ALL ON SCHEMA sacademicoschema to hterrero; GRANT --Prueba: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos; ERROR: permission denied for relation cursos --Otorgamos privilegios al objeto dentro del Schema: [[local]:5432/postgres@sacademico] [] # GRANT ALL ON sacademicoschema.cursos to hterrero;________________________________________ 2010 Manual De Administracin de PostgreSql 37

Academia De Software Libre__________________________________________________________

www.codigolibre.org

GRANT --Prueba: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos limit 2; id_curso | curso | costo | fecha_registro | quien_registro -----------+---------------------------------+--------+--------------------------+----------1 | Diplomado GNU/Linux | 3500 | 2009-08-05 21:57:24 | admin 2 | Unixs(Solaris*Aix*Hp-Ux) | 3500 | 2009-08-05 21:57:31 | admin (2 rows) --Revocando los privilegios de de un ROLE sobre un Schema: [[local]:5432/postgres@sacademico] [] # REVOKE ALL ON SCHEMA sacademicoschema from hterrero; --Prueba: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos limit 1; ERROR: permission denied for schema sacademicoschema LINE 1: SELECT * from sacademicoschema.cursos limit 1; --Acceso a los requerimientos previamente solicitados: [[local]:5432/postgres@sacademico] [] # GRANT USAGE ON SCHEMA sacademicoschema to hterrero; GRANT --Prueba: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos limit 3; id_curso | curso | costo | fecha_registro | quien_registro -----------+-----------------------------------+---------+---------------------------+----------1 | Diplomado GNU/Linux | 3500 | 2009-08-05 21:57:24 | admin 2 | Unixs(Solaris*Aix*Hp-Ux) | 3500 | 2009-08-05 21:57:31 | admin 3 | Asterisk-I | 12500 | 2009-08-16 15:57:14 | root@local host (3 rows) --El usuario puede cambiar la misma session: --Primero vemos nuestra session y usuario: [[local]:5432/orange@sacademico] [] # SELECT session_user, current_user; session_user | current_user ---------------+-------------orange | orange (1 row) --Cambiamos de session: [[local]:5432/jparedes@sacademico] [] # SET session AUTHORIZATION hterrero ; SET --Resultado:________________________________________ 2010 Manual De Administracin de PostgreSql 38

Academia De Software Libre__________________________________________________________

www.codigolibre.org

[[local]:5432/hterrero@sacademico] [] > SELECT session_user, current_user; session_user | current_user ----------------+-------------hterrero | hterrero (1 row) --Para cambiar solo de usuario en una session: --Primero vemos nuestra session y usuario: [[local]:5432/jparedes@sacademico] [] # SELECT session_user, current_user; session_user | current_user ----------------+-------------jparedes | jparedes (1 row) --Cambio de ROLE: [[local]:5432/jparedes@sacademico] [] # SET role hterrero ; SET --Resultado: [[local]:5432/jparedes@sacademico] [] > SELECT session_user, current_user; session_user | current_user ----------------+-------------jparedes | lmerlin (1 row) --Para resetiar la session: [[local]:5432/jparedes@sacademico] [] > RESET session AUTHORIZATION ; RESET --Verifico: [[local]:5432/jparedes@sacademico] [] # SELECT session_user, current_user; session_user | current_user ----------------+-------------jparedes | jparedes (1 row) --Ver los permisos de los objetos existentes: --Hacemos login en la Bases Datos HR: [postgres@jp ~]$psql -U falmonte HR psql (8.4.4) Type "help" for help. --Luego vemos informacion sobre los permisos de los objetos exists, no tenemos: [[local]:5432/falmonte@HR] [] > \z

________________________________________ 2010 Manual De Administracin de PostgreSql 39

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+----------------------------+---------------+----------------------+-------------------------public | countries | table | | public | departments | table | | public | employees | table | | public | job_history | table | | public | jobs | table | | public | locations | table | | public | pepe | sequence | | public | regions | table | | public | regions_region_id_seq | sequence | | (9 rows) --Verificamos si pordemos consultas algunos de esos objetos: [[local]:5432/hterrero@HR] [] > SELECT * from countries ; ERROR: permission denied for relation countries --No tenemos ningunos vamos a otorgar algunos privilegios al ROLE coronel, en el cual se encuentra el usuario falmonte: [[local]:5432/postgres@HR] [] # GRANT SELECT ON countries TO coronel ; GRANT [[local]:5432/postgres@HR] [] # GRANT UPDATE ON countries TO cnunez ; GRANT [[local]:5432/postgres@HR] [] # GRANT DELETE ON countries TO arodriguez ; GRANT [[local]:5432/postgres@HR] [] # GRANT ALL ON countries TO general ; GRANT --Prueba: [[local]:5432/falmonte@HR] [] > SELECT * from countries limit 3; country_id | region_id | name -------------+-------------+----------AR | 2 | Argentina AU | 3 | Australia BE | 1 | Belgium (3 rows) --Luego vemos informacion sobre los permisos de los objetos exists ya aplicados: [[local]:5432/falmonte@HR] [] > \z Access privileges Schema | Name | Type | Access privileges

| Column access privileges ----------+--------------------------+---------+-------------------------------+-------------------public | countries | table | postgres=arwdDxt/postgres |________________________________________ 2010 Manual De Administracin de PostgreSql 40

Academia De Software Libre__________________________________________________________

www.codigolibre.org

: coronel=r/postgres : cnunez=w/postgres : arodriguez=d/postgres : general=arwdDxt/postgres public | departments | table public | employees | table public | job_history | table public | jobs | table public | locations | table public | pepe | sequence public | regions | table public | regions_region_id_seq | sequence (9 rows) | | | | | | | | | | | | | | | |

-- Si queremos Permitir conceder el mismo privilegios a otro: [[local]:5432/postgres@HR] [] # GRANT ALL ON locations TO coronel with grant option; --Verificamos: [[local]:5432/falmonte@HR] [] > \z Access privileges Schema | Name | Type |

| Column access privileges ----------+---------------------------+------------+-------------------------------------+---------------public | countries | table | postgres=arwdDxt/postgres | : coronel=r/postgres : cnunez=w/postgres : arodriguez=d/postgres : general=arwdDxt/postgres public | departments | table | | public | employees | table | | public | job_history | table | | public | jobs | table | | public | locations | table | postgres=arwdDxt/postgres | : coronel=a*r*w*d*D*x*t*/postgres public | pepe | sequence | | public | regions | table | | public | regions_region_id_seq | sequence | | (9 rows) /***Practica***/ --Explique en detalle los permisos reflejados:--Revoque el permiso de lectura a general.

Access privileges

--Otorgue el permiso de escritura y actualizacion a falmonte --*****Restableciendo y Eliminando Obejtos--*****: --Nota: Si queremos eliminar algunos objetos o Bases Datos no debe existir ningun ROLE asociado al mismo:

________________________________________ 2010 Manual De Administracin de PostgreSql 41

Academia De Software Libre__________________________________________________________

www.codigolibre.org

--Regresamos a la sesin principal por defecto. RESET SESSION AUTHORIZATION; --Ahora vamos a otorgar y rebocar privilegios a nivel de columnas: --Revocamos todos los privilegios al usuario acolon sobre la tabla countries de la Bases Datos HR: [[local]:5432/postgres@HR] [] # REVOKE ALL ON countries FROM acolon ; --Prueba: [[local]:5432/acolon@HR] [] > SELECT region_id from countries ; ERROR: permission denied for relation countries [[local]:5432/acolon@HR] [] > SELECT country_id from countries ; ERROR: permission denied for relation countries [[local]:5432/acolon@HR] [] > SELECT name from countries ; ERROR: permission denied for relation countries [[local]:5432/acolon@HR] [] > SELECT * from countries ; ERROR: permission denied for relation countries --Actualmente no tenemos privilegios sobre ninguna columna de la tabla countries. --Procedemos a Otorgar privilegios a una columna de la tabla countries: [[local]:5432/postgres@HR] [] # GRANT SELECT (name) on countries to acolon; GRANT --Prueba: [[local]:5432/acolon@HR] [] > SELECT name from countries limit 3; name ----------Argentina Australia Belgium (3 rows) --Intentamos hacer SELECT a otra columna de la misma tabla: [[local]:5432/acolon@HR] [] > SELECT country_id from countries ; ERROR: permission denied for relation countries --De igualmenare solo tenemos privilegios de hacer consulta sobre esa columna --si tratamos de actualizar nos dira: [[local]:5432/acolon@HR] [] > UPDATE countries SET name = 'R.D' where name='Belgium'; ERROR: permission denied for relation countries________________________________________ 2010 Manual De Administracin de PostgreSql 42

Academia De Software Libre__________________________________________________________

www.codigolibre.org

--Vamos Otorgar privilegios de Actualizacin sobre la columna name de la tabla countries: [[local]:5432/postgres@HR] [] # GRANT UPDATE (name) on countries to acolon; --Prueba: [[local]:5432/acolon@HR] [] > UPDATE countries SET name = 'San Juam' where name='Argentina'; UPDATE 1 --Si queremos ver los privilegios de la columna name de la tabla countries: [[local]:5432/postgres@HR] [] # \dp Access privileges Schema | Name | Type |

| Column access privileges ----------+----------------------------+-----------+----------------------------------+----------------public | countries | table | postgres=arwdDxt/postgres | name: : acolon=rw/postgres public | departments | table | | public | employees | table | | public | job_history | table | | public | jobs | table | | public | locations | table | | public | regions | table | | public | regions_region_id_seq | sequence | | (8 rows) --Para Revocar privilegios de una columna: [[local]:5432/jparedes@HR] [] # REVOKE SELECT (name) on countries from acolon; REVOKE --Prueba: [[local]:5432/acolon@HR] [] > SELECT name from countries limit 3; ERROR: permission denied for relation countries --Verificamos los privilegios: [[local]:5432/acolon@HR] [] > \dp countries Access privileges Schema | Name | Type | Access privileges | Column access privileges ----------+-------------+-------+----------------------------------+----------------------public | countries | table | postgres=arwdDxt/postgres | name: acolon=w/postgres (1 row) Cambiando EL propietario de una tabla: ALTER TABLE suppliers OWNER TO bob; Trabajando con Schema: test=# CREATE SCHEMA foo; CREATE SCHEMA________________________________________ 2010 Manual De Administracin de PostgreSql 43

Access privileges

Academia De Software Libre__________________________________________________________

www.codigolibre.org

test=# CREATE TABLE foo.info (id INT, txt TEXT); CREATE TABLE test=# INSERT INTO foo.info VALUES(1, 'This is schema foo'); INSERT 23062 1 test=# CREATE SCHEMA bar; CREATE SCHEMA test=# CREATE TABLE bar.info (id INT, txt TEXT); CREATE TABLE test=# INSERT INTO bar.info VALUES(1, 'This is schema bar'); INSERT 23069 1 test=# SELECT foo.info.txt, bar.info.txt FROM foo.info, bar.info WHERE foo.info.id=bar.info.id; Listar los Objetos en Schema Public: test=# \dv Cuando el nombre de esquema no esta previsto en un objeto de base de datos, PostgreSQL se refiere a la ruta de busqueda ", que define el orden en el que buscar a traves de esquemas de un nombre de objeto no calificados. En el ejemplo anterior, info_view fue creado en el esquema publico porque el publico es siempre por defecto que figuran en la ruta de busqueda. La configuracion actual de la ruta de busqueda se puede ver con SHOW search_path: test=# SHOW search_path; Una ruta de busqueda se mantiene para cada conexion de base de datos, para cambiar la ruta de busqueda uso search_path SET ...: test=# SET search_path TO foo; test=# \dt Para alterar permanentemente la ruta de busqueda establecidos en cada conexion, el uso: ALTER USER test SET search_path TO bar,foo; Este cambio solo tendra efecto despues de volver a conectarse a la base de datos. Para continuar con los ejemplos anteriores, el establecimiento de la ruta de busqueda a la barra, foo significa ahora info bar mesa seran seleccionados por defecto: test=# SET search_path TO bar, foo; test=# SELECT txt FROM info; test=# \d info________________________________________ 2010 Manual De Administracin de PostgreSql 44

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Permisos y Seguridad en Schema: CREATE SCHEMA tarzan AUTHORIZATION tarzan; or CREATE SCHEMA AUTHORIZATION tarzan; El permiso USAGE determina si un usuario puede realizar ninguna operacion sobre el esquema de otro usuario: GRANT USAGE ON SCHEMA tarzan TO jane; REVOKE USAGE ON SCHEMA tarzan TO jane; Una vez que el permiso USAGE ha sido concedida, privilegios en tanto existentes como de nueva creacion, los objetos de esquema se debe conceder de forma explicita: GRANT SELECT ON tarzan.banana_inventory TO jane; REVOKE SELECT ON tarzan.banana_inventory FROM jane; Si el uso es revocado, ni objetos personales, incluidos los que el usuario tiene privilegios en adelante, se puede acceder. Si el uso se concede de nuevo, cualquier privilegios anteriores se reactiva automaticamente sobre el objeto. El gran privilegio CREATE en un esquema permite a un usuario para crear objetos en el esquema de otro usuario: GRANT CREATE ON SCHEMA tarzan TO jane; REVOKE CREATE ON SCHEMA tarzan TO jane; Utilice el nombre de usuario reservado PUBLIC la hora de conceder o revocar privilegios de todos los usuarios: GRANT ALL ON SCHEMA tarzan TO PUBLIC; Eliminando Schema: Forma Simple: DROP SCHEMA tarzan; DROP SCHEMA tarzan CASCADE; Funciones de Schema: * Current_schema () Devuelve el nombre del esquema actual (esquema por primera vez en la ruta de busqueda), segun lo establecido por search_path SET... Tenga en cuenta que se resolveran en el primer esquema existente en la ruta de busqueda, no necesariamente el primero. Si no hay un esquema se encuentra, se devuelve NULL. * Current_schemas (boolean) Devuelve todos los esquemas en la ruta de busqueda como una matriz, si se llama con TRUE, esquemas implicitos (esquemas especiales como pg_catalog que se aaden a la ruta de busqueda de forma automatica si no se especifica explicitamente) se devuelven.________________________________________ 2010 Manual De Administracin de PostgreSql 45

Academia De Software Libre__________________________________________________________

www.codigolibre.org

Esquemas especialesCada base de datos PostgreSQL contiene una serie de esquemas especiales requeridas por el servidor y que no puede ser suprimida o alterada. Todos comienzan con pg_. Tenga en cuenta que los nombres de esquema a partir de pg_ no estan permitidos. Los esquemas especiales son: * Pg_catalog: Contiene las tablas del sistema, las funciones y puntos de vista explotacion de meta-informacion sobre la base de datos. * Pg_temp_x: Contiene las tablas temporales que solo son visibles para una conexion de base de datos concreta * Pg_toast: Contiene manteca y dulces surtidos. Desde PostgreSQL 7.4, tambien habra un INFORMATION_SCHEMA compuesto de puntos de vista predefinidos que contienen informacion descriptiva sobre la base de datos actual. Esta informacion se presenta en un formato definido en el estandar SQL y proporciona informacion consistente y estandarizada sobre la base de datos y en cierta medida las capacidades de la base de datos. El INFORMATION_SCHEMA es para propositos de compatibilidad y probables, no seran relevantes para la mayoria de las aplicaciones.

LimitacionesActualmente no es posible la "transferencia" objeto