SUSER_SID (Transact-SQL)
Devuelve el número de identificación de seguridad (SID) que corresponde al nombre de inicio de sesión especificado.
Convenciones de sintaxis de Transact-SQL
Sintaxis
SUSER_SID ( [ 'login' ] [ , Param2 ] )
Argumentos
' login '
Nombre de inicio de sesión del usuario. login es de tipo sysname. login, que es opcional, puede ser un inicio de sesión de SQL Server, o un usuario o un grupo de Microsoft Windows. Si no se especifica login, se devuelve información sobre el contexto de seguridad actual. Si el parámetro contiene la palabra NULL, se devolverá NULL.Param2
Especifica si se valida el nombre de inicio de sesión. Param2 es de tipo int y es opcional. Cuando Param2 es 0, no se valida el nombre de inicio de sesión. Cuando Param2 no se especifica como 0, se comprueba el nombre de inicio de sesión de Windows para ver si coincide exactamente con el nombre de inicio de sesión almacenado en SQL Server.
Tipos de valor devueltos
varbinary(85)
Comentarios
SUSER_SID puede utilizarse como una restricción DEFAULT en ALTER TABLE o CREATE TABLE. Se puede utilizar USER_ID en una lista de selección, en una cláusula WHERE y en cualquier lugar en el que se permita una expresión. SUSER_SID siempre debe ir seguido de paréntesis, aunque no se especifique ningún parámetro.
Cuando se llama sin ningún argumento, SUSER_SID devuelve el SID del contexto de seguridad actual. Cuando se llama sin ningún argumento en un lote que ha cambiado de contexto mediante EXECUTE AS, SUSER_SID devuelve el SID del contexto suplantado. Si se llama desde un contexto suplantado, SUSER_SID(ORIGINAL_LOGIN()) devuelve el SID del contexto original.
Cuando la intercalación de SQL Server y la intercalación de Windows son diferentes, SUSER_SID puede producir un error cuando SQL Server y Windows almacenan el inicio de sesión en un formato diferente. Por ejemplo, si el equipo Windows TestComputer tiene el inicio de sesión User y SQL Server almacena el inicio de sesión como TESTCOMPUTER\User, la búsqueda del inicio de sesión TestComputer\User puede que no resuelva el nombre de inicio de sesión correctamente. Para omitir esta validación del nombre de inicio de sesión, use Param2. El uso de distintas intercalaciones suele ser la causa del error 15401 de SQL Server:
Windows NT user or group '%s' not found. Check the name again.
Ejemplos
A.Usar SUSER_SID
En el ejemplo siguiente se devuelve el número de identificación de seguridad del inicio de sesión sa de SQL Server.
SELECT SUSER_SID('sa');
GO
B.Usar SUSER_SID con un nombre de usuario de Windows
En el ejemplo siguiente se devuelve el número de identificación de seguridad del usuario de Windows London\Workstation1.
SELECT SUSER_SID('London\Workstation1');
GO
C.Usar SUSER_SID como una restricción DEFAULT
En el ejemplo siguiente se utiliza SUSER_SID como restricción DEFAULT en una instrucción CREATE TABLE.
USE AdventureWorks2012;
GO
CREATE TABLE sid_example
(
login_sid varbinary(85) DEFAULT SUSER_SID(),
login_name varchar(30) DEFAULT SYSTEM_USER,
login_dept varchar(10) DEFAULT 'SALES',
login_date datetime DEFAULT GETDATE()
);
GO
INSERT sid_example DEFAULT VALUES;
GO
D.Comparar el nombre de inicio de sesión de Windows con el nombre de inicio de sesión almacenado en SQL Server
En el ejemplo siguiente se muestra cómo se usa Param2 para obtener el SID de Windows y se utiliza ese SID como entrada para la función SUSER_SNAME. En el ejemplo se proporciona el inicio de sesión en el formato en que se almacena en Windows (TestComputer\User) y se devuelve en el formato en que se almacena en SQL Server (TESTCOMPUTER\User.
SELECT SUSER_SNAME(SUSER_SID('TestComputer\User', 0));