Compartir vía


IS_MEMBER (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Indica si el usuario actual es miembro del grupo de Microsoft Windows, del grupo de Microsoft Entra o del rol de base de datos de SQL Server especificado.

La función IS_MEMBER es compatible con los grupos de Microsoft Entra. El caso en el que IS_MEMBER no funciona es si el grupo es el administrador de Microsoft Entra para la instancia de SQL.

Convenciones de sintaxis de Transact-SQL

Nota:

Microsoft Entra ID era conocido anteriormente como Azure Active Directory (Azure AD).

Sintaxis

IS_MEMBER ( { 'group' | 'role' } )  

Argumentos

' group '
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores

Es el nombre del grupo Windows o Microsoft Entra que se está comprobando. Un grupo de Windows debe tener el formato Grupo de dominios\. group es sysname.

' role '
Es el nombre del rol SQL Server que se va comprobar. role es sysname y puede contener los roles fijos de base de datos o los roles definidos por el usuario, pero no los roles de servidor.

Tipos de valor devuelto

int

Observaciones

IS_MEMBER devuelve los siguientes valores.

Valor devuelto Descripción
0 El usuario actual no es miembro del grupo ni del rol.
1 El usuario actual es miembro de group o role.
NULL El grupo o el rol no son válidos. Cuando se consulta en un inicio de sesión de SQL Server o en un inicio de sesión que usa un rol de aplicación, devuelve NULL para un grupo de Windows.

IS_MEMBER determina la pertenencia al grupo de Windows examinando un token de acceso creado por Windows. El token de acceso no refleja los cambios en la pertenencia a grupos que se realizan después de que un usuario se conecte a una instancia de SQL Server. No se puede consultar la pertenencia a grupos de Windows mediante un inicio de sesión de SQL Server o un rol de aplicación de SQL Server.

Para agregar y quitar miembros de un rol de base de datos, use ALTER ROLE (Transact-SQL). Para agregar y quitar miembros de un rol de servidor, use ALTER SERVER ROLE (Transact-SQL).

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 notifica 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 otro inicio de sesión de SQL Server es miembro de un rol de base de datos, use IS_ROLEMEMBER (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).

Ejemplos

En el siguiente ejemplo se comprueba si el usuario actual es miembro de un rol de base de datos o de un grupo de dominio de Windows.

-- Test membership in db_owner and print appropriate message.  
IF IS_MEMBER ('db_owner') = 1  
   PRINT 'Current user is a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') = 0  
   PRINT 'Current user is NOT a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') IS NULL  
   PRINT 'ERROR: Invalid group / role specified';  
GO  
  
-- Execute SELECT if user is a member of ADVWORKS\Shipping.  
IF IS_MEMBER ('ADVWORKS\Shipping') = 1  
   SELECT 'User ' + USER + ' is a member of ADVWORKS\Shipping.';   
GO  

Vea también

IS_SRVROLEMEMBER (Transact-SQL)
Entidades de seguridad (motor de base de datos)
Vistas de catálogo de seguridad (Transact-SQL)
Funciones de seguridad (Transact-SQL)