IS_ROLEMEMBER (Transact-SQL)IS_ROLEMEMBER (Transact-SQL)

SE APLICA A: síSQL Server (a partir de 2012) síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2012) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Indica si una entidad de seguridad de base de datos especificada es miembro del rol de base de datos especificado.Indicates whether a specified database principle is a member of the specified database role.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

' role '' role '
Nombre del rol de base de datos que se va comprobar.Is the name of the database role that is being checked. role es sysname.role is sysname.

' database_principal '' 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.Is the name of the database user, database role, or application role to check. database_principal es sysname, con un valor predeterminado NULL.database_principal is sysname, with a default of NULL. Si no se especifica ningún valor, el resultado se basa en el contexto de ejecución actual.If no value is specified, the result is based on the current execution context. Si el parámetro contiene la palabra NULL, se devolverá NULL.If the parameter contains the word NULL will return NULL.

Tipos devueltosReturn Types

intint

Valor devueltoReturn value DescripciónDescription
00 database_principal no es miembro de role.database_principal is not a member of role.
11 database_principal es miembro de role.database_principal is a member of role.
NULLNULL database_principal o role no es válido o no tiene permiso para ver la pertenencia a roles.database_principal or role is not valid, or you do not have permission to view the role membership.

NotasRemarks

Utilice IS_ROLEMEMBER para determinar si el usuario actual puede realizar una acción que necesite los permisos del rol de base de datos.Use IS_ROLEMEMBER to determine whether the current user can perform an action that requires the database role's permissions.

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 ServerSQL Server.If database_principal is based on a Windows login, such as Contoso\Mary5, IS_ROLEMEMBER returns NULL, unless the database_principal has been granted or denied direct access to SQL ServerSQL Server.

Si el parámetro database_principal opcional no se proporciona y si database_principal se basa en un inicio de sesión de dominio de Windows, puede ser miembro de un rol de base de datos mediante la pertenencia a un grupo de Windows.If the optional database_principal parameter is not provided and if the database_principal is based on a Windows domain login, it may be a member of a database role through membership in a Windows group. Para resolver estas pertenencias indirectas, IS_ROLEMEMBER solicita al controlador de dominio información sobre la pertenencia a grupos de Windows.To resolve such indirect memberships, IS_ROLEMEMBER requests Windows group membership information from the domain controller. Si no se puede tener acceso al controlador de dominio o no responde, IS_ROLEMEMBER devuelve información sobre la pertenencia a roles teniendo en cuenta únicamente al usuario y sus grupos locales.If the domain controller is inaccessible or does not respond, IS_ROLEMEMBER returns role membership information by accounting for the user and its local groups only. 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 (por ejemplo, Active Directory) en SQL ServerSQL Server.If the user specified is not the current user, the value returned by IS_ROLEMEMBER might differ from the authenticator's (such as Active Directory) last data update to SQL ServerSQL Server.

Si se proporciona el parámetro database_principal opcional, la entidad de seguridad de base de datos que se está consultando debe estar presente en ys.database_principals o IS_ROLEMEMBER devolverá NULL.If the optional database_principal parameter is provided, the database principal that is being queried must be present in sys.database_principals, or IS_ROLEMEMBER will return NULL. Esto indica que database_principal no es válido en esta base de datos.This indicates that the database_principal is not valid in this database.

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.When the database_principal parameter is a based on a domain login or based on a Windows group and the domain controller is inaccessible, calls to IS_ROLEMEMBER will fail and might return incorrect or incomplete data.

Si el controlador de dominio no está disponible, la llamada a IS_ROLEMEMBER devolverá información precisa cuando se pueda autenticar localmente la entidad de seguridad de Windows, como una cuenta de Windows local o un inicio de sesión de SQL ServerSQL Server.If the domain controller is not available, the call to IS_ROLEMEMBER will return accurate information when the Windows principle can be authenticated locally, such as a local Windows account or a SQL ServerSQL Server login.

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.IS_ROLEMEMBER always returns 0 when a Windows group is used as the database principal argument, and this Windows group is a member of another Windows group which is, in turn, a member of the specified database role.

El Control de cuentas de usuario (UAC) de Windows VistaWindows Vista y Windows Server 2008 también podrían devolver resultados diferentes.The User Account Control (UAC) found in Windows VistaWindows Vista and Windows Server 2008 might also return different results. 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 ServerSQL Server.This would depend on whether the user accessed the server as a Windows group member or as a specific SQL ServerSQL Server user.

Esta función evalúa la pertenencia al rol, no el permiso subyacente.This function evaluates role membership, not the underlying permission. Por ejemplo, el rol fijo de base de datos db_owner tiene el permiso CONTROL DATABASE.For example, the db_owner fixed database role has the CONTROL DATABASE permission. Si el usuario tiene el permiso CONTROL DATABASE pero no es miembro del rol, esta función informará correctamente de que el usuario no es miembro del rol db_owner, aunque tenga los mismos permisos.If the user has the CONTROL DATABASE permission but is not a member of the role, this function will correctly report that the user is not a member of the db_owner role, even though the user has the same permissions.

Para determinar si el usuario actual es miembro del grupo de Windows o del rol de base de datos de SQL ServerSQL Server especificados, use IS_MEMBER (Transact-SQL).To determine whether the current user is a member of the specified Windows group or SQL ServerSQL Server database role, use IS_MEMBER (Transact-SQL). Para determinar si un inicio de sesión de SQL ServerSQL Server es miembro de un rol de servidor, use IS_SRVROLEMEMBER (Transact-SQL).To determine whether a SQL ServerSQL Server login is a member of a server role, use IS_SRVROLEMEMBER (Transact-SQL).

PermisosPermissions

Se necesita el permiso VIEW DEFINITION en el rol de base de datos.Requires VIEW DEFINITION permission on the database role.

EjemplosExamples

En el siguiente ejemplo se indica si el usuario actual es miembro del rol fijo de base de datos db_datareader.The following example indicates whether the current user is a member of the db_datareader fixed database role.

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.';  

Consulte tambiénSee Also

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