Hola
Estoy administrando una base de datos que requiere que algunos datos se
almacenen encriptados. Todo funciona correctamente excepto cuando debo
encriptar alguna cadena que contiene acentos o eñes. A continuación les muestro
la configuración de mi sistema y un ejemplo de lo que está ocurriendo.
Saludos
[root@crypto ~]# locale
LANG=es_ES.UTF-8
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"
LC_ALL=
[root@crypto ~]# yum install postgresql-server postgresql-contrib
Setting up Install Process...
[root@crypto ~]# su -l postgres -c "/usr/bin/initdb
--pgdata='/var/lib/pgsql/data' --auth='ident' --locale='es_ES.ISO-8859-1'"
...
El cluster será inicializado con configuración local es_ES.ISO-8859-1.
La codificación por omisión ha sido por lo tanto definida a LATIN1.
La configuración de búsqueda en texto ha sido definida a «spanish».
...
[root@crypto ~]# service postgresql start
Iniciando servicios postgresql: [ OK ]
[root@crypto ~]# su - postgres -c "createdb -E LATIN1 db_prueba"
[root@crypto ~]# su - postgres -c "psql db_prueba"
psql (8.4.8)
Digite «help» para obtener ayuda.
db_prueba=# \l
Listado de base de datos
Nombre | Dueño | Codificación | Collation | Ctype |
Privilegios
-----------+----------+---------------+------------------+------------------+-----------------------
db_prueba | postgres | LATIN1 | es_ES.ISO-8859-1 | es_ES.ISO-8859-1 |
postgres | postgres | LATIN1 | es_ES.ISO-8859-1 | es_ES.ISO-8859-1 |
template0 | postgres | LATIN1 | es_ES.ISO-8859-1 | es_ES.ISO-8859-1 |
=c/postgres
:
postgres=CTc/postgres
template1 | postgres | LATIN1 | es_ES.ISO-8859-1 | es_ES.ISO-8859-1 |
=c/postgres
:
postgres=CTc/postgres
(4 filas)
db_prueba=# SHOW server_encoding ;
server_encoding
-----------------
LATIN1
(1 fila)
db_prueba=# SHOW client_encoding ;
client_encoding
-----------------
LATIN1
(1 fila)
db_prueba=# CREATE TABLE tb_prueba (id serial, cadena text);
NOTICE: CREATE TABLE crear¦ una secuencia impl¦cita ¦tb_prueba_id_seq¦ para la
columna serial ¦tb_prueba.id¦
CREATE TABLE
db_prueba=# INSERT INTO tb_prueba (cadena) VALUES ('Adrián');
INSERT 0 1
db_prueba=# SELECT * FROM tb_prueba;
id | cadena
----+---------
1 | Adrián
(1 fila)
db_prueba=# \i /usr/share/pgsql/contrib/pgcrypto.sql
...
db_prueba=# CREATE TABLE tb_prueba_crypto (id serial, crypto bytea);
NOTICE: CREATE TABLE crear¦ una secuencia impl¦cita ¦tb_prueba_crypto_id_seq¦
para la columna serial ¦tb_prueba_crypto.id¦
CREATE TABLE
db_prueba=# INSERT INTO tb_prueba_crypto (crypto) VALUES
(encrypt('Adrian'::bytea,'password'::bytea,'bf-ecb/pad:pkcs'));
INSERT 0 1
db_prueba=# INSERT INTO tb_prueba_crypto (crypto) VALUES
(encrypt('Adrián'::bytea,'password'::bytea,'bf-ecb/pad:pkcs'));
INSERT 0 1
db_prueba=# SELECT id, decrypt(crypto,'password'::bytea,'bf-ecb/pad:pkcs') FROM
tb_prueba_crypto;
id | decrypt
----+---------------
1 | Adrian
2 | Adri\303\241n
(2 filas)
-
Enviado a la lista de correo pgsql-es-ayuda ([email protected])
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda