Compartir vía


SUSER_SID (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

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 '
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores

Nombre de inicio de sesión del usuario. login es 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
Válido para SQL Server 2012 (11.x) y versiones posteriores.

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 devuelto

varbinary(85)

Observaciones

SUSER_SID puede utilizarse como una restricción DEFAULT en ALTER TABLE o CREATE TABLE. Se puede utilizar SUSER_SID 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 con 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. Las distintas intercalaciones a menudo son una causa del error 15401 de SQL Server:

Windows NT user or group '%s' not found. Check the name again.

Azure SQL Database Comentarios

SUSER_SID siempre devuelve el SID de inicio de sesión para el contexto de seguridad actual. Use sys.database_principals para obtener el SID de otro inicio de sesión.

La instrucción SUSER_SID no admite la ejecución con un contexto de seguridad suplantado a través de EXECUTE AS.

Ejemplos

A. Usar SUSER_SID

En el ejemplo siguiente se devuelve el número de identificación de seguridad (SID) del contexto de seguridad actual.

SELECT SUSER_SID();  

B. Utilizar SUSER_SID con un inicio de sesión específico

En el ejemplo siguiente se devuelve el número de identificación de seguridad del inicio de sesión sa de SQL Server.

Válido para SQL Server 2012 (11.x) y versiones posteriores.

SELECT SUSER_SID('sa');  
GO  

C. 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.

Válido para SQL Server 2012 (11.x) y versiones posteriores.

SELECT SUSER_SID('London\Workstation1');  
GO  

D. 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 AdventureWorks2022;  
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  

E. 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.

Válido para SQL Server 2012 (11.x) y versiones posteriores.

SELECT SUSER_SNAME(SUSER_SID('TestComputer\User', 0));  

Consulte también

ORIGINAL_LOGIN (Transact-SQL)
CREATE TABLE (Transact-SQL)
binary y varbinary (Transact-SQL)
Funciones del sistema (Transact-SQL)