IS_SRVROLEMEMBER (Transact-SQL)
Indica si en el inicio de sesión de SQL Server es miembro del rol de servidor especificado.
Se aplica a: SQL Server (SQL Server 2008 a versión actual), Windows Azure SQL Database (Versión inicial a versión actual). |
Convenciones de sintaxis de Transact-SQL
Sintaxis
IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )
Argumentos
' role '
Es el nombre del rol de servidor que se va comprobar. role es de tipo 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
public
Se aplica a: SQL Server 2012 a SQL Server 2014.
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, se devolverá NULL.
Tipos de valor devuelto
int
Valor devuelto |
Descripción |
---|---|
0 |
login no es miembro de role. En Windows Azure SQL Database, esta instrucción siempre devuelve 0. |
1 |
login es miembro de role. |
NULL |
role o login no es válido, o no tiene permiso para ver la pertenencia a roles. |
Comentarios
Use IS_SRVROLEMEMBER para determinar si el usuario actual puede realizar una acción que necesite los permisos del rol de servidor.
Si se especifica un inicio de sesión de Windows, como Contoso\Mary5, para el parámetro login, IS_SRVROLEMEMBER devuelve NULL, a menos que se haya concedido o denegado al inicio de sesión el acceso directo a SQL Server.
Si el parámetro login opcional no se proporciona y login es un inicio de sesión de dominio de Windows, puede ser miembro del rol fijo de servidor mediante 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 no se puede tener acceso al controlador de dominio o no responde, IS_SRVROLEMEMBER devuelve información sobre la pertenencia a roles dando cuenta únicamente al 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 (por ejemplo, Active Directory) en SQL Server.
Si se proporciona el parámetro de inicio de sesión opcional, el inicio de sesión de Windows que se consulta se debe encontrar en sys.server_principals o IS_SRVROLEMEMBER devolverá 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 devolverá la información precisa cuando se puede autenticar el principio de Windows localmente, como una cuenta de Windows local o un inicio de sesión SQL Server.
IS_SRVROLEMEMBER devuelve siempre 0 cuando se utiliza 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.
La configuración de Control de cuentas de usuario (UAC) también podría devolver resultados diferentes. Esto dependerá de si el usuario tuvo acceso al servidor como miembro de un 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 informará correctamente de que el usuario no es miembro del rol sysadmin, 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 SQL Server es miembro de un rol de base de datos, utilice 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 fijo de servidor 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 el siguiente 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');