Saltar al contenido

¿Cuál es el tipo de datos para una contraseña en PostgreSQL?

Luego de de esta larga búsqueda de información resolvimos este atasco que suelen tener ciertos los lectores. Te regalamos la respuesta y esperamos resultarte de mucha ayuda.

Solución:

Jeff tiene un buen artículo titulado Probablemente estés almacenando contraseñas incorrectamente. Este artículo analiza varias formas de almacenar contraseñas en bases de datos y algunas de las trampas comunes con las que puede encontrarse. En particular, analiza el uso de algoritmos hash, tablas arcoíris y el uso de “sal” para reducir el riesgo de un archivo de contraseña comprometido.

el uso de la varchar El tipo de datos es perfectamente adecuado para almacenar una contraseña correctamente cifrada. Por ejemplo, aquí hay parte de mi registro de cuenta real de una base de datos de producción:

=> select account_id, email, salt, passhash from account where email = '[email protected]';
 account_id |      email       |       salt       |                 passhash                 
------------+------------------+------------------+------------------------------------------
          1 | [email protected] | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043
(1 row)

En este caso, passhash es la representación hexadecimal del SHA-1 de la sal concatenada con mi contraseña.

Instalar “módulo chkpass”

Este módulo implementa un tipo de datos chkpass que está diseñado para almacenar contraseñas cifradas. Debe instalar el paquete de contribución postgresql y ejecutar el comando CREAR EXTENSIÓN para instalarlo.

En Ubuntu 12.04 sería así:

sudo apt-get install postgresql-contrib

Reinicie el servidor postgresql:

sudo /etc/init.d/postgresql restart

Todas las extensiones disponibles están en:

/opt/PostgreSQL/9.5/share/postgresql/extension/

Ahora puede ejecutar el comando CREAR EXTENSIÓN.

Ejemplo:

CREATE EXTENSION chkpass;

CREATE TABLE accounts (username varchar(100), password chkpass);
INSERT INTO accounts(username, "password") VALUES ('user1', 'pass1');
INSERT INTO accounts(username, "password") VALUES ('user2', 'pass2');

select * from accounts where password='pass2';

Devoluciones

username | password
---------------------------
"user2"  | ":Sy8pO3795PW/k"

Postgres versión 9.4+ puede hacer esto de una manera más inteligente y segura usando la extensión pgcrypto como se explica en: http://www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html

Si te ha resultado de utilidad nuestro artículo, te agradeceríamos que lo compartas con el resto programadores de esta manera contrubuyes a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *