IS_ROLEMEMBER (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Indica si una entidad de seguridad de base de datos especificada es miembro del rol de base de datos especificado.

Convenciones de sintaxis de Transact-SQL

Nota:

El identificador de Microsoft Entra se conocía anteriormente como Azure Active Directory (Azure AD).

Sintaxis

IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )  

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'
Nombre del rol de base de datos que se va comprobar. role es sysname.

'database_principal'
Nombre del usuario de la base de datos, rol de base de datos o rol de aplicación que se va a comprobar. database_principal es sysname, con un valor predeterminado 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, se devolverá NULL.

Tipos de valor devuelto

int

Valor devuelto Descripción
0 database_principal no es miembro del rol.
1 database_principal es miembro de role.
NULL database_principal o rol no es válido o no tiene permiso para ver la pertenencia al rol.

Comentarios

La función IS_ROLEMEMBER no es compatible con un administrador de Microsoft Entra cuando el administrador es miembro de un grupo de Microsoft Entra. La función IS_ROLEMEMBER es compatible con los usuarios de Microsoft Entra que son miembros de un grupo de Microsoft Entra, a menos que ese grupo sea el administrador de Microsoft Entra.

Utilice IS_ROLEMEMBER para determinar si el usuario actual puede realizar una acción que necesite los permisos del rol de base de datos.

Si database_principal está basado en un inicio de sesión de Windows, como Contoso\Mary5, IS_ROLEMEMBER devuelve NULL, a menos que se haya concedido o denegado a database_principal el acceso directo a SQL Server.

Si no se proporciona el parámetro opcional database_principal y si el database_principal se basa en un inicio de sesión de dominio de Windows, puede ser miembro de un rol de base de datos a través de la pertenencia a un grupo de Windows. Para resolver estas pertenencias indirectas, IS_ROLEMEMBER 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_ROLEMEMBER 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_ROLEMEMBER podría diferir de la última actualización de datos del autenticador (como Active Directory) a SQL Server.

Si se proporciona el parámetro opcional database_principal , el usuario debe existir en sys.database_principals o IS_ROLEMEMBER devuelve NULL.

Cuando el parámetro database_principal se basa en un inicio de sesión del dominio o en un grupo de Windows y no se puede acceder al controlador de dominio, se produce un error en las llamadas a IS_ROLEMEMBER y podrían devolverse datos incorrectos o incompletos.

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

IS_ROLEMEMBER siempre devuelve 0 cuando se usa un grupo de Windows como el argumento de entidad de seguridad de Windows y este grupo de Windows es un miembro de otro grupo de Windows que, a su vez, es miembro del rol de base de datos especificado.

El Control de cuentas de usuario (UAC) de Windows Vista y Windows Server 2008 también podrían devolver 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 base de datos db_owner tiene el permiso CONTROL DATABASE. Si el usuario tiene el permiso CONTROL DATABASE pero no es miembro del rol, esta función notificará correctamente que el usuario no es miembro del rol de db_owner , aunque el usuario tenga los mismos permisos.

Los miembros del rol fijo de servidor sysadmin acceden a cada base de datos con el usuario dbo. Al comprobar los permisos para el rol fijo de servidor sysadmin, se comprueban los permisos para dbo, en lugar del inicio de sesión original. Dado que dbo no se puede agregar a un rol de base de datos y no existe en grupos de Windows, dbo siempre devuelve 0 (o NULL si el rol no existe).

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 un inicio de sesión de SQL Server es miembro de un rol de servidor, use IS_SRVROLEMEMBER (Transact-SQL).

Permisos

Se necesita el permiso VIEW DEFINITION en el rol de base de datos.

Ejemplos

En el siguiente ejemplo se indica si el usuario actual es miembro del rol fijo de base de datos db_datareader.

IF IS_ROLEMEMBER ('db_datareader') = 1  
   print 'Current user is a member of the db_datareader role'  
ELSE IF IS_ROLEMEMBER ('db_datareader') = 0  
   print 'Current user is NOT a member of the db_datareader role'  
ELSE IF IS_ROLEMEMBER ('db_datareader') IS NULL  
   print 'ERROR: The database role specified is not valid.';  

Vea también

CREATE ROLE (Transact-SQL)
ALTER ROLE (Transact-SQL)
DROP ROLE (Transact-SQL)
CREATE SERVER ROLE (Transact-SQL)
ALTER SERVER ROLE (Transact-SQL)
DROP SERVER ROLE (Transact-SQL)
IS_MEMBER (Transact-SQL)
IS_SRVROLEMEMBER (Transact-SQL)
Funciones de seguridad (Transact-SQL)