Compartilhar via


IS_SRVROLEMEMBER (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

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

Convenções de sintaxe de 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
  • público
  • 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, ele retornará NULL.

Observação

Embora os logons do Microsoft Entra estejam em versão prévia pública para o Banco de Dados SQL do Azure e o Azure Synapse, não há suporte para o uso de uma entidade de segurança do Microsoft Entra para logon .

Tipos de retorno

int

Valor retornado Descrição
0 login não é um membro da função.

No Banco de Dados SQL do Azure, essa instrução sempre retorna 0.
1 login é um membro de role.
NULO A função ou o logon 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 exija as permissões da função de servidor.

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

Se o parâmetro de logon opcional não for fornecido e se o logon for um logon de domínio do Windows, ele poderá ser membro de uma função de servidor fixa por meio da associação a 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 estiver inacessível ou não responder, IS_SRVROLEMEMBER retornará informações de associação de função contabilizando apenas 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 no 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 está inacessível, as chamadas para IS_SRVROLEMEMBER falham e podem 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 a entidade de segurança do Windows puder ser autenticada localmente, como uma conta local do Windows 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.

A configuração UAC (Controle de Conta de Usuário) também pode levar ao retorno de resultados diferentes. Isso dependeria do fato de usuário ter acessado o servidor como um membro de grupo do Windows ou como um usuário específico do SQL Server.

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.

Para determinar se o usuário atual é membro do grupo do Windows, do grupo do Microsoft Entra ou da função de banco de dados do SQL Server especificado, 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 diskadmin.

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

Consulte Também

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