IS_SRVROLEMEMBER (Transact-SQL)
Indica si en el inicio de sesión de SQL Server el usuario es miembro de la función fija de servidor especificada.
Sintaxis
IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )
Argumentos
'role'
Es el nombre de la función de servidor que se va comprobar. role es de tipo sysname.Los valores válidos de role incluyen los siguientes:
sysadmin
dbcreator
bulkadmin
diskadmin
processadmin
serveradmin
setupadmin
securityadmin
'login'
Es el nombre del inicio de sesión de SQL Server que se va a comprobar. El parámetro login es de tipo sysname y su valor predeterminado es NULL. Si no se especifica ningún valor, el resultado estará basado en el contexto de ejecución actual. Si contiene la palabra NULL, devolverá NULL.
Tipos de valor devueltos
int
Comentarios
IS_SRVROLEMEMBER devuelve estos valores.
Valor devuelto |
Descripción |
---|---|
0 |
login no es miembro de role. |
1 |
login es miembro de role. |
NULL |
role o login no es válido. |
Esta función puede determinar si el usuario actual puede realizar una acción que necesite los permisos de la función 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 de inicio de sesión opcional no se proporciona y se trata de un inicio de sesión de dominio de Windows, puede ser un 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 teniendo en 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 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.
El Control de cuentas de usuario (UAC) de Windows Vista y Windows Server 2008 también podría devolver resultados diferentes. Esto dependería de si el usuario tuvo acceso al servidor como miembro de un grupo de Windows o como un usuario de SQL Server concreto. Para obtener más información sobre Control de cuentas de usuario, vea Cómo conectarse a SQL Server desde Windows Vista.
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 de la función, esta función informará correctamente de que el usuario no es miembro de la función sysadmin, aunque tenga los mismos permisos.
Ejemplos
En el siguiente ejemplo se indica si el inicio de sesión de SQL Server para el usuario actual es miembro de la función fija 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.'
Vea también