none
Uso de máscaras de contraseña en SQL Server 2012 RRS feed

  • Pregunta

  • Hola a todos.

    Tengo un cliente que me ha solicitado que una serie de campos, dependiendo de quien se conecte al servidor, aparezcan con una máscara de asteriscos ¡ojo! no encriptado, solo mostrado.

    Esto sería a través de odbc, creo que desde SAP. 

    A mi me da que esto no es posible, que tendría que hacerse en la aplicación cliente y de forma más copleja, que no es posible hacerlo desde SQL Server 2012 enterprise.

    ¿Alguien me podría confirmar esto?

    Gracias

    Saludos,


    José Mª Fueyo

    viernes, 4 de agosto de 2017 9:19

Respuestas

Todas las respuestas

  • Buenos dias Jose,

    No acabo de entender la pregunta. Estamos hablando de que desde algun stored procedure,supongo, en funcion del usuario envíes un dato u otro no? La aplicación donde se muestran esos datos no es tuya entiendo.

    Eso habría que hacerlo en la aplicación (la cual ya debería haber identificado a la persona).

    por ejemplo (C#)->

    //Si no tiene permiso
    txtPassowrd.PasswordChar = '*'; //oculta
    //Si tiene
    txtPassowrd.PasswordChar = ''; //muestra

    Si los datos los esta obteniendo desde un stored procedure, puedes mandarle asteriscos en vez de el valor, pero eso no lo enmascara, REALMENTE LE MANDAS ASTERISCOS, si luego updateas algo con ese valor que te devuelve, van a ser asteriscos.

    No soy un experto en SQL Server, pero yo diría que la opción más practica, es hacerlo en el cliente. Ademas, si todos los usuarios de la aplicación se conectan con el mismo usuario de la DB, no hay manera de identificar que conexión pertenece a que usuario, y hace imposible poder hacerlo desde la DB.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!


    viernes, 4 de agosto de 2017 11:20
  • Hola Jorge

    Tampoco te creas que tengo mucha idea de lo que se solicitan, como comenté es una solicitud que me han hecho y en un principio pensaba que era a través del SQL Server Management Studio. Luego me dijeron que sería a través de SAP con odbc.

    Puede ser una interesante opción lo que propones. Veré su viabilidad. Gracias

    Salu2,


    José Mª Fueyo

    viernes, 4 de agosto de 2017 11:47
  • Buenas Jose,

    El ejemplo que te he puesto es en c#, no se en que estará programado SAP, pero seguramente el concepto lo puedas aplicar sin problema.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    viernes, 4 de agosto de 2017 11:53
  • Hola

    Lo que pienso es usar un procedimiento almacenado para recuperar los datos, pasando como parámetro entre otros, el usuario. 

    Se podría generar una select con sql dinámico, verificando con CASE sí el usuario tiene permisos o no.

    Como te digo, es una posibilidad. Tendría que ver sí es viable o no

    Gracias

    Salu2,


    José Mª Fueyo

    viernes, 4 de agosto de 2017 12:08
  • Buenas, 

    Pero para eso,  necesitas modificar la aplicación cliente para mandar el usuario como parámetro no?  Si es así,  sería más fácil simplemente modificar la visualización en la aplicación cliente. 

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    viernes, 4 de agosto de 2017 13:09
  • Saludos. En C# has click en los eventos del txtbox donde pondras la contraseña y dale donde dice press key y pon lo siguiente: 

                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }

    Si te funciono  marcala como respuesta.


    Carlos Terrero


    viernes, 4 de agosto de 2017 13:17
  • Hola

    No me sirve. El usuario accede a través de tablas vinculadas por odbc en SAP, no puedo modificar nada en cliente.

    Se me ha ocurrido la posibilidad de usar vistas con los campos críticos puestos como asterisco, quitar los permisos de acceso a las tablas y dárselos a la vista para los usuarios en cuestión.

    El problema que se me presenta ahora es de rendimiento: son tablas de más de 30 millones de registros. Estas tablas están particionadas. ¿Alguien tiene experiencia en esto?

    ¡Gracias!

    Saludos,


    José Mª Fueyo

    lunes, 7 de agosto de 2017 8:12
  • A mi me da que esto no es posible, que tendría que hacerse en la aplicación cliente y de forma más copleja, que no es posible hacerlo desde SQL Server 2012 enterprise.

    Hola.

    Esto que solicitas está disponible en la versión 2016 de SQL Server.

    Y, en efecto, como bien indicas, no es posible hacerlo, de manera nativa al menos, desde SQL Server 2012.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    martes, 8 de agosto de 2017 22:57
  • Gracias Guillermo

    Solo por curiosidad, ¿tienes algún link con información al respecto?

    Gracias

    Salu2,


    José Mª Fueyo

    jueves, 10 de agosto de 2017 6:51
  • Hola.

    La documentación oficial: Dynamic Data Masking.

    Y un par de buenos artículos sobre el tema. El primero en Simple Talk, aunque el título puede ser "misleading" en cuanto a que DDM no tiene absolutamente nada que ver con cifrado, más si con ofuscar: Encrypting SQL Server: Dynamic Data Masking. De hecho, el mismo autor lo escribe de entrada.

    El segundo en SQLShack, Using Dynamic Data Masking in SQL Server 2016 to protect sensitive data, con muy buenos ejemplos.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    • Marcado como respuesta José Mª Fueyo jueves, 10 de agosto de 2017 10:26
    jueves, 10 de agosto de 2017 10:10
  • ¡Muchas gracias por la info!

    Salu2,


    José Mª Fueyo

    jueves, 10 de agosto de 2017 10:30