IS_ROLEMEMBER (Transact-SQL)

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

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • ' role '
    Nombre del rol de base de datos que se va comprobar. role es de tipo 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 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, se devolverá NULL.

Tipos de valor devuelto

int

Valor devuelto

Descripción

0

database_principal no es miembro de role.

1

database_principal es miembro de role.

NULL

database_principal o role no es válido, o no tiene permiso para ver la pertenencia a roles.

Comentarios

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 el parámetro database_principal opcional no se proporciona y 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. Para resolver estas pertenencias indirectas, IS_ROLEMEMBER solicita al controlador de dominio información sobre la pertenencia a grupos de Windows. 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. 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 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 sys.database_principals o IS_ROLEMEMBER devolverá NULL. Esto indica que database_principal es no válido en esta base de datos.

Cuando el parámetro database_principal se basa en un inicio de sesión del dominio o en un grupo de Windows y el controlador de dominio no es accesible, se producirá 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 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 Server.

IS_ROLEMEMBER devuelve siempre 0 cuando se utiliza 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 informará correctamente de que el usuario no es miembro del rol db_owner, aunque tenga los mismos permisos.

Funciones relacionadas

Para determinar si el usuario actual es miembro del grupo de Windows o del rol de base de datos de SQL Server especificados, utilice IS_MEMBER (Transact-SQL). Para determinar si un inicio de sesión de SQL Server es miembro de un rol de servidor, utilice 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

Referencia

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)