IS_SRVROLEMEMBER (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Indica si un inicio de sesión de SQL Server es miembro del rol de servidor especificado.

Convenciones de sintaxis de Transact-SQL

Sintaxis

IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

'role'
Es el nombre del rol de servidor que se va comprobar. role es sysname.

Los valores válidos para role son los roles de servidor definidos por el usuario y los siguientes roles fijos de servidor:

  • sysadmin
  • serveradmin
  • dbcreator
  • setupadmin
  • bulkadmin
  • securityadmin
  • diskadmin
  • público
  • processadmin

'login'
Es el nombre del inicio de sesión de SQL Server que se va a comprobar. login es de tipo sysname y su valor predeterminado es NULL. Si no se especifica ningún valor, el resultado se basa en el contexto de ejecución actual. Si el parámetro contiene la palabra NULL, devuelve NULL.

Nota:

Aunque los inicios de sesión de Microsoft Entra están en versión preliminar pública para Azure SQL Database y Azure Synapse, no se admite el uso de una entidad de seguridad de Microsoft Entra para el inicio de sesión .

Tipos de valor devuelto

int

Valor devuelto Descripción
0 login no es miembro del rol.

En Azure SQL Database, esta instrucción siempre devuelve 0.
1 login es miembro del grupo role.
NULL role o login no es válido o no tiene permiso para ver la pertenencia al rol.

Comentarios

Use IS_SRVROLEMEMBER para determinar si el usuario actual puede realizar una acción que requiera los permisos del rol de servidor.

Si se especifica un inicio de sesión de Windows, como Contoso\María5, para login, IS_SRVROLEMEMBER devuelve NULL, a menos que se haya concedido o denegado el acceso directo a SQL Server al inicio de sesión.

Si no se proporciona el parámetro de inicio de sesión opcional y si el inicio de sesión es un inicio de sesión de dominio de Windows, puede ser miembro de un rol fijo de servidor a través de la pertenencia a un grupo de Windows. Para resolver estas pertenencias indirectas, IS_SRVROLEMEMBER solicita al controlador de dominio información sobre la pertenencia a grupos de Windows. Si el controlador de dominio no es accesible o no responde, IS_SRVROLEMEMBER devuelve información de pertenencia a roles teniendo en cuenta solo el usuario y sus grupos locales. Si el usuario especificado no es el usuario actual, el valor devuelto por IS_SRVROLEMEMBER podría diferir de la última actualización de datos del autenticador (como Active Directory) a SQL Server.

Si se proporciona el parámetro de inicio de sesión opcional, el inicio de sesión de Windows que se consulta debe estar presente en sys.server_principals o IS_SRVROLEMEMBER devuelve NULL. Esto indica que el inicio de sesión no es válido.

Cuando el parámetro de inicio de sesión es un inicio de sesión del dominio o está basado en un grupo de Windows y el controlador de dominio no es accesible, se producirá un error en las llamadas a IS_SRVROLEMEMBER y podrían devolverse datos incorrectos o incompletos.

Si el controlador de dominio no está disponible, la llamada a IS_SRVROLEMEMBER devuelve información precisa cuando la entidad de seguridad de Windows se puede autenticar localmente, como una cuenta de Windows local o un inicio de sesión de SQL Server.

IS_SRVROLEMEMBER devuelve siempre 0 cuando se usa un grupo de Windows como el argumento de inicio de sesión y este grupo de Windows es un miembro de otro grupo de Windows que, a su vez, es miembro del rol de servidor especificado.

El valor de Control de cuentas de usuario (UAC) también puede provocar que se devuelvan resultados diferentes. Esto dependería de si el usuario tuvo acceso al servidor como un miembro del grupo de Windows o como un usuario específico de SQL Server.

Esta función evalúa la pertenencia al rol, no el permiso subyacente. Por ejemplo, el rol fijo de servidor sysadmin tiene el permiso CONTROL SERVER. Si el usuario tiene el permiso CONTROL SERVER pero no es miembro del rol, esta función notificará correctamente que el usuario no es miembro del rol sysadmin , aunque el usuario tenga los mismos permisos.

Para determinar si el usuario actual es miembro del grupo de Windows especificado, el grupo Microsoft Entra o el rol de base de datos de SQL Server, use IS_MEMBER (Transact-SQL). Para determinar si otro inicio de sesión de SQL Server es miembro de un rol de base de datos, use IS_ROLEMEMBER (Transact-SQL).

Permisos

Requiere el permiso VIEW DEFINITION en el rol de servidor.

Ejemplos

En el siguiente ejemplo se indica si el inicio de sesión de SQL Server para el usuario actual es miembro del rol de servidor fijo de sysadmin.

IF IS_SRVROLEMEMBER ('sysadmin') = 1  
   print 'Current user''s login is a member of the sysadmin role'  
ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0  
   print 'Current user''s login is NOT a member of the sysadmin role'  
ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL  
   print 'ERROR: The server role specified is not valid.';  

En este ejemplo se indica si el inicio de sesión de dominio Pat es miembro del rol fijo de servidor diskadmin.

SELECT IS_SRVROLEMEMBER('diskadmin', 'Contoso\Pat');  

Consulte también

IS_MEMBER (Transact-SQL)
Funciones de seguridad (Transact-SQL)