Suplantar identidad

Inglés impersonal

–Jeff no tiene privilegios de DBA, pero en cambio tiene derecho a hacerse pasar por un DBA técnico para realizar cualquier tarea de DBA.– Entra como usuario JeffIMPERSONATE TECHNICAL_DBA; –usuario con permisos de DBA–Ahora Jeff está actuando como DBA y puede realizar tareas de DBA. Cuando haya terminado, puede volver a su usuario habitualIMPERSONATE JEFF;

— Su servidor de Tableau está configurado para utilizar un único usuario técnico para iniciar sesión en la base de datos– En el SQL inicial para la fuente de datos, Tableau envía un comando de suplantación para obtener los privilegios del usuario localIMPERSONATE [TableauServerUser];– Ahora las consultas se ejecutan con los permisos del usuario, no del usuario técnico.

Impersonator deutsch

El siguiente ejemplo demuestra cómo obtener un token de cuenta de Windows llamando a la función no administrada Win32 LogonUser, y cómo utilizar ese token para suplantar a otro usuario y luego volver a la identidad original.

Evita utilizar este método con el patrón async/await. En algunos casos puede conducir a problemas de fiabilidad debido a que la suplantación no se revierte incluso si el WindowsImpersonationContext resultante es eliminado. Utiliza RunImpersonated en su lugar.

El siguiente ejemplo demuestra cómo obtener un token de cuenta de Windows llamando a la función no administrada Win32 LogonUser, y cómo usar ese token para suplantar a otro usuario y luego revertir a la identidad original.

Llamar al método Impersonate(IntPtr) con un valor userToken de cero es equivalente a llamar a la función Win32 RevertToSelf. Si se está suplantando a otro usuario, el control vuelve al usuario original.

Evite utilizar este método con el patrón async/await. En algunos casos puede llevar a problemas de fiabilidad debido a que la suplantación no se revierte incluso si el WindowsImpersonationContext resultante es eliminado. Utiliza RunImpersonated en su lugar.

Suplantar a un usuario

“Suplantación” en el espacio .NET generalmente significa ejecutar código bajo una cuenta de usuario específica. Es un concepto algo distinto al de obtener acceso a esa cuenta de usuario a través de un nombre de usuario y una contraseña, aunque estas dos ideas se combinan con frecuencia. Describiré ambas, y luego explicaré cómo utilizar mi biblioteca SimpleImpersonation, que las utiliza internamente.

La API para utilizar un nombre de usuario y una contraseña para acceder a una cuenta de usuario en Windows es LogonUser, que es una API nativa de Win32. Actualmente no hay una API integrada en .NET para llamarla, por lo que hay que recurrir a P/Invoke.

En lugar de escribir todo esto tú mismo, considera usar mi librería SimpleImpersonation, que combina la suplantación y el acceso a usuarios en una sola API. Funciona bien tanto en bases de código modernas como en las más antiguas, con la misma sencilla API:

Esta es la API a partir de la versión 3.0.0. Consulta el readme del proyecto para más detalles. Tenga en cuenta también que una versión anterior de la biblioteca utilizaba una API con el patrón IDisposable, similar a WindowsIdentity.Impersonate. La nueva versión es mucho más segura, y ambas se siguen utilizando internamente.

Mod de suplantación de identidad

– Todas las configuraciones de suplantación son específicas del usuario y también están basadas en los roles. Esto significa que el administrador puede establecer explícitamente qué roles están disponibles para la suplantación para un usuario específico. Con esta configuración el usuario puede elegir suplantar a los usuarios que tienen cualquiera de los roles especificados.

– Caso de soporte técnico. Básicamente querían dar la capacidad a su soporte técnico para suplantar a cualquier usuario común con pocos privilegios cuando él / ella comunica el problema con la cuenta y / o acceder al sitio sin tener acceso a las cuentas de usuario con privilegios elevados.