SQL

Bases de Datos y Administración.

Cliente Oracle 10g en FreeBSD

Tiempo atras, hice un paper con respecto a este proceso que voy a transcribir y revisar su utilizacion en FreeBSD 7.1-RELEASE-p3, espero ayude.

El port de oracle client se instala de la siguiente forma:

  1. # cd /usr/ports/databases/linux-oracle-instantclient-sqlplus
  2. make build install clean

Este proceso requiere de la descarga manual de 2 archivos desde www.Oracle.com que deben ser almacenados en la carpeta /usr/ports/distfiles/oracle y que corresponden a:

  1. instantclient-sqlplus-linux32-10.2.0.3-20061115.zip
  2. instantclient-basic-linux32-10.2.0.3-20061115.zip

Y una vez finalizado el proceso completo quedan los siguientes ports instalados en el sistema:

  1. linux_base-fc-4_14
  2. linux-oracle-instantclient-basic-10.2.0.3.20061115_2
  3. linux-oracle-instantclient-sqlplus-10.2.0.3.20061115_1

Ahora, solo nos queda configurar el acceso al listener, proceso para el cual necesitamos algunas variables de entorno de nuestra shell:

  • Configurar la .cshrc (para quienes usamos la shell de C):

if (! $?ORACLE_HOME) then
if (-d /compat/linux/usr/lib/oracle) then
setenv ORACLE_HOME /compat/linux/usr/lib/oracle
else
echo “Warning – ORACLE_HOME not defined”
echo “To use Oracle Client, define ORACLE_HOME and rerun your .cshrc”
endif
endif

if ($?ORACLE_HOME) then
set path=($path $ORACLE_HOME/10.2.0.3/client/bin)
end

Así la configuración queda completa cuando “sqlplus” busque el tnsnames.ora que por estructura busca en $ORACLE_HOME/network/admin y cuya estructura es la siguiente:

ORADB = (
DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP) (HOST = 10.0.0.5) (PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ServiceName))
)

Con un resultado final como este:

[ kuarzo@kuarzo:~ ]% sqlplus usuario/clave@ORADB as sysdba

SQL*Plus: Release 10.2.0.3.0 – Production on Thu Feb 26 10:31:45 2009
Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

SQL>

PostgreSQL Select a formato XML

Existen en la actualidad diversas formas de graficar reportes de datos, pero aquellas que son las mejores visualmente requieren de una lectura de datos de XML, por lo que aquí les va el como poder generar uno a travez de un “Select” a una tabla de datos, y obviamente en PostgreSQL las funciones son:

  • XMLParse
  • XMLSerialize
  • XMLElement
  • XMLForest
  • XMLAgg
  • XMLAttributes
  • XMLComment
  • XMLConcat

De las cuales mostrare ejemplos claros en su uso y funcionamiento, ah partir de aqui escribiré algunos como:

SELECT XMLElement(name root, nombre_campo) from tabla;

Y su resultado es mas menos algo parecido a esto:

         xmlelement
—————————–
 <root>Cuprum</root>
 <root>Habitat</root>
 <root>Magister</root>
 <root>Planvital</root>
 <root>Provida</root>
 <root>ING Capital</root>
 <root>Bansander</root>
 <root>Aporta Fomenta</root>

(8 rows)

Recuperación de clave root en MySQL

Por lo general un procedimiento de administración para un DBA es tomar control completo de un motor de bases de datos en este caso en particular, es MySQL:

  1. Detener el motor de base de datos
  2. Iniciar nuevamente agregando la opción “–skip-grant-tables
  3. Ingresar al motor “mysql –u root
  4. Ejecutar “UPDATE mysql.user SET Password=PASSWORD(‘password’) WHERE User=’root’;
  5. Y por ultimo “FLUSH PRIVILEGES;

Reiniciar el motor de base de datos y con eso finaliza. Una muy buena práctica de seguridad es cambiar el usuario root que viene asignado por defecto, por cualquier usuario ejemplo “dba”.

PostgreSQL cifrado con pgcrypto

Una de las grandes, problemáticas de la administración de bases de datos es la forma de almacenar información, cifrar de tal forma que ni el dba a cargo del motor de datos sea capaz de ver los datos sensibles, como números de tarjetas de crédito, claves de acceso, etc.

Los prerrequisitos para esto son:

  • postgresql-client => Cliente PostgreSQL
  • postgresql-server => Bases de Datos Open-Source
  • postgresql-contrib => Utilidades de PostgreSQL

Luego, se debe de instalar en la base de datos a utilizar las funciones del “postgresql-contrib”, en el caso de FreeBSD:

cd /usr/local/share/postgresql/contrib
psql -U usuario -d database -f pgcrypto.sql

pgcrypto ayuda a este proceso cifrando los datos almacenados de varias formas, por ahora solo voy a mostrarles el cómo hacerlo con campos específicos. Ejemplo:

Creemos una tabla:

CREATE TABLE accesos
(
  id serial NOT NULL, — Incrementador Automático.
  usuario character varying(15) NOT NULL, — Nombre de Usuario.
  clave bytea — Clave de Usuario Cifrada.
)
WITH (OIDS=FALSE);
ALTER TABLE accesos OWNER TO dba;
COMMENT ON TABLE accesos IS ‘Datos de Acceso.’;
COMMENT ON COLUMN accesos.id IS ‘Incrementador Automático.’;
COMMENT ON COLUMN accesos.usuario IS ‘Nombre de Usuario.’;
COMMENT ON COLUMN accesos.clave IS ‘Clave de Usuario Cifrada.’;

Agreguemos un dato a la tabla pero démosle el grado de complejidad a la columna clave cifrando su contenido:

insert into accesos (usuario, clave) values (‘alex’, encrypt (‘dato_a_encryptar’, ‘clave_de_cifrado’,'aes’))

Por ende ahora si queremos corroborar que los datos ingresados sean correctos, solo tenemos que modificar la pregunta:

select usuario, clave from accesos

Retornando los datos cifrados:

Usuario   Clave
 ”alex”     “\016`\356\361\247H\260\202\200:^\306\364>\311\206″

Pero con la consulta correcta, es decir:

select usuario, decrypt(clave, ‘clave_de_cifrado’,'aes’) as clave from accesos

 Con un resultado:

Usuario   Clave
 ”alex”     “dato_a_encryptar”