Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-05-2019
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Constraint Unique con Columna encriptada

Hola Amigos,


Tengo una tabla con una columna que almacena los datos encriptados utilizando la funcion ENCRYPTBYPASSPHRASE de sql server 2014, el inconveniente que tengo es que a esa columna le aplique una restricción unique para que no se repita el dato, pero no funciona ya que si introduzco varios registros con una cadena 'Juan' ejemplo convert(varchar(800), ENCRYPTBYPASSPHRASE('1111', 'Juan')) varias veces lo permite, la columna esta declarada como varchar(800) .

Saludos Cordiales,
Responder Con Cita
  #2  
Antiguo 28-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Se supone que entonces guardas la cadena "Juan" de forma cifrada, y cada vez es distinta, por lo que ese campo no puede ser "único".
Responder Con Cita
  #3  
Antiguo 28-05-2019
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Cita:
Se supone que entonces guardas la cadena "Juan" de forma cifrada, y cada vez es distinta, por lo que ese campo no puede ser "único".
Entonces el valor que devuelve ENCRYPTBYPASSPHRASE que es de tipo Varbinary convertido a cadena generado por convert(varchar(800), ENCRYPTBYPASSPHRASE('1111', 'Juan')) es diferente de convert(varchar(800), ENCRYPTBYPASSPHRASE('1111', 'Juan'))

Tendré que buscar otra alternativa para validar que no se repitan. entendía que devolverían el mismo valor, debo hacer algo que sin mostrar la info impida duplicados.

Gracias por la repuesta,
Responder Con Cita
  #4  
Antiguo 28-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que entonces será fácil de descifrar. Por ejemplo, usando code64 o algún otro método reversible.
De todas formas, ignoro cómo trabaja ENCRYPTBYPASSPHRASE.
Responder Con Cita
  #5  
Antiguo 28-05-2019
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Cita:
Es que entonces será fácil de descifrar. Por ejemplo, usando code64 o algún otro método reversible.
De todas formas, ignoro cómo trabaja ENCRYPTBYPASSPHRASE.

Lo que sucede es que si una tabla tiene cientos, miles o millones de registros es cuesta arriba descifrarlos todos para comparar si se repiten. Para descifrarlo se utiliza otra función de sql server DECRYPTBYPASSPHRASE pero habría que aplicarlo a todos los registros, podría ser en un trigger
pero sospecho que podría ralentizar el proceso y también tendría otro inconveniente habría que seder la clave para descifrar al trigger, podría validarlo en el cliente pero no me gusta la idea por si se requiere hacer otros módulos, aunque es una opción ya que en esta tabla no tiene millones de registros.
Responder Con Cita
  #6  
Antiguo 28-05-2019
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Al parecer es un viejo tema de sql server Enforcing a unique constraint
Responder Con Cita
  #7  
Antiguo 28-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
De todas formas, hay personas que se llaman igual, no puede ser un campo "único".
Responder Con Cita
  #8  
Antiguo 28-05-2019
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Cita:
De todas formas, hay personas que se llaman igual, no puede ser un campo "único".
a menos que sea una tabla de usuarios y el campo sea el nick de usuario que se desea que sea único. De todas formas la solución más fácil será verificar con un select, desencriptando el campo y comparando con el que se introducirá.

Última edición por juniorSoft fecha: 28-05-2019 a las 18:29:19.
Responder Con Cita
  #9  
Antiguo 28-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No conocemos los requisitos que se exigen para ese dato. Si te sirve eso, pues adelante.
Responder Con Cita
  #10  
Antiguo 28-05-2019
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Base de Datos LOCAL / ENCRIPTADA yapt Conexión con bases de datos 17 10-07-2010 13:59:11
conectar con base de datos sqlite encriptada anubis Conexión con bases de datos 2 12-01-2010 22:41:47
OnReconcileError y Constraint pablonill Conexión con bases de datos 1 09-03-2009 08:04:58
Index Unique o Unique Contraint???? maxid Firebird e Interbase 3 24-04-2006 18:03:06
crear constraint Johnny Q SQL 4 23-06-2005 23:55:50


La franja horaria es GMT +2. Ahora son las 16:09:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi