Partilhar via


IS_SRVROLEMEMBER (Transact-SQL)

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

Ícone de vínculo de tópicoConvençõ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 para role incluem os seguintes:

    • sysadmin

    • dbcreator

    • bulkadmin

    • diskadmin

    • processadmin

    • serveradmin

    • setupadmin

    • securityadmin

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

Tipos de retorno

int

Comentários

IS_SRVROLEMEMBER retorna os valores a seguir.

Valor de retorno

Descrição

0

login não é um membro de role.

1

login é um membro de role.

NULL

role ou login não é válido.

Use esta função para determinar se o usuário atual pode executar uma ação que requer 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 logon tenha recebido ou negado acesso direto ao SQL Server.

Se o parâmetro de logon opcional não for fornecido e o logon for um logon do domínio do Windows, ele poderá ser um membro de função de servidor fixa através da associação em um grupo do Windows. Para resolver tais associações indiretas, IS_SRVROLEMEMBER solicita informações de associação a grupo do Windows ao 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 levando em conta somente 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 argumento de logon, e esse grupo do Windows é membro de outro grupo do Windows que é, por sua vez, 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. Para obter mais informações sobre o Controle de Conta de Usuário, consulte Como se conectar ao SQL Server a partir do Windows Vista.

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.

Exemplos

O exemplo a seguir indica se o logon do SQL Server para o 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.'