IS_SRVROLEMEMBER (Transact-SQL)

Indica se um logon do SQL Server é membro da função de servidor especificada.

Ícone de vínculo de tópico Convenções de sintaxe Transact-SQL

Sintaxe

IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )

Argumentos

  • ' role '
    É o nome da função de servidor que está sendo verificada. role é sysname.

    Os valores válidos de role são funções de servidor definidas pelo usuário e as seguintes funções de servidor fixas:

    sysadmin

    serveradmin

    dbcreator

    setupadmin

    bulkadmin

    securityadmin

    diskadmin

    public

    processadmin

     

  • ' login '
    É o nome do logon do SQL Server a ser verificado. login é sysname, com um padrão de NULL. Se nenhum valor for especificado, o resultado será baseado no contexto de execução atual. Se o parâmetro contiver a palavra NULL, retornará NULL.

Tipos de retorno

int

Valor de retorno

Descrição

0

login não é membro de role.

1

login é membro de role.

NULL

role ou login não é válido ou você não tem permissão para exibir a associação de função.

Comentários

Use IS_SRVROLEMEMBER para determinar se o usuário atual pode executar uma ação que exige as permissões da função de servidor.

Se um logon do Windows, como Contoso\Mary5, for especificado para login, IS_SRVROLEMEMBER retornará NULL, a não ser que o acesso direto ao SQL Server tenha sido concedido ou negado ao logon.

Se o parâmetro opcional login não for fornecido e se login for um logon do domínio do Windows, ele poderá ser membro da função de servidor fixa por meio da associação em um grupo do Windows. Para resolver essas associações indiretas, IS_SRVROLEMEMBER solicita informações de associação do grupo do Windows no controlador de domínio. Se o controlador de domínio não estiver acessível ou não responder, IS_SRVROLEMEMBER retornará informações de associação de função por conta apenas para o usuário e seus grupos locais. Se o usuário especificado não for o usuário atual, o valor retornado por IS_SRVROLEMEMBER poderá ser diferente da última atualização de dados do autenticador (como o Active Directory) para o SQL Server.

Se o parâmetro de logon opcional for fornecido, o logon do Windows que está sendo consultado deverá estar presente em sys.server_principals, ou IS_SRVROLEMEMBER retornará NULL. Isso indica que o logon não é válido.

Quando o parâmetro de logon é um logon de domínio ou baseado em um grupo do Windows e o controlador de domínio não está acessível, as chamadas para IS_SRVROLEMEMBER falharão e poderão retornar dados incorretos ou incompletos.

Se o controlador de domínio não estiver disponível, a chamada para IS_SRVROLEMEMBER retornará informações precisas quando o princípio do Windows puder ser autenticado localmente, como uma conta do Windows local ou um logon do SQL Server.

IS_SRVROLEMEMBER sempre retorna 0 quando um grupo do Windows é usado como o argumento de logon do banco de dados, e esse grupo do Windows é um membro de outro grupo do Windows que é, por sua vez, um membro da função de servidor especificada.

O UAC (Controle de Conta de Usuário) localizado no Windows Vista e o Windows Server 2008 também podem retornar resultados diferentes. Isto depende se o usuário acessou o servidor como um membro de grupo do Windows ou como um usuário do SQL Server específico.

Essa função avalia a associação de função, não a permissão subjacente. Por exemplo, a função de servidor fixa sysadmin tem a permissão CONTROL SERVER. Se o usuário tiver a permissão CONTROL SERVER, mas não for membro da função, essa função relatará corretamente que o usuário não é membro da função sysadmin, mesmo que o usuário tenha as mesmas permissões.

Funções relacionadas

Para determinar se o usuário atual é membro do grupo do Windows especificado ou da função de banco de dados SQL Server, use IS_MEMBER (Transact-SQL). Para determinar se um logon do SQL Server é um membro de uma função de banco de dados, use IS_ROLEMEMBER (Transact-SQL).

Permissões

Exige a permissão VIEW DEFINITION na função de servidor.

Exemplos

O exemplo a seguir indica se o logon do SQL Server do usuário atual é membro da função de servidor fixa 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.'

O exemplo a seguir indica se o logon de domínio Pat é membro da função de servidor fixa do diskadmin.

SELECT IS_SRVROLEMEMBER('diskadmin', 'Contoso\Pat');

Consulte também

Referência

IS_MEMBER (Transact-SQL)

Funções de segurança (Transact-SQL)