Partilhar via


IS_SRVROLEMEMBER (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Indica se um login do SQL Server pertence ao papel de servidor especificado.

Transact-SQL convenções de sintaxe

Sintaxe

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

Arguments

'Papel'
É o nome do papel do servidor que está a ser verificado. O papel é sysname.

Os valores válidos para o papel são os papéis de servidor definidos pelo utilizador, e os seguintes papéis fixos de servidor:

  • sysadmin
  • serveradmin
  • dbcreator
  • setupadmin
  • bulkadmin
  • securityadmin
  • diskadmin
  • público
  • processadmin

'login'
É o nome do login do SQL Server para verificar. login é sysname, com o padrão NULL. Se não for especificado um valor, o resultado baseia-se no contexto de execução atual. Se o parâmetro contiver a palavra NULL, devolve NULL.

Observação

Embora os logins do Microsoft Entra estejam em pré-visualização pública para Azure SQL Database e Azure Synapse, não é suportado o uso de um princípio Microsoft Entra para login .

Tipos de devolução

int

Valor de retorno Description
0 O login não é um membro da função.

No Azure SQL Database, esta instrução devolve sempre 0.
1 O login é um membro do ROLE.
NULO Role ou login não são válidos, ou não tens permissão para ver a assinatura do Role.

Observações

Use IS_SRVROLEMEMBER para determinar se o utilizador atual pode realizar uma ação que exija as permissões do papel do servidor.

Se um login do Windows, como Contoso\Mary5, for especificado para o login, IS_SRVROLEMEMBER retorna NULL, a menos que o login tenha sido concedido ou negado acesso direto ao SQL Server.

Se o parâmetro opcional de login não for fornecido e se o login for um domínio Windows, pode ser membro de um papel fixo de servidor através da pertença a um grupo Windows. Para resolver tais pertences indiretas, IS_SRVROLEMEMBER solicita informações de pertença a grupos Windows ao controlador de domínio. Se o controlador de domínio estiver inacessível ou não responder, IS_SRVROLEMEMBER devolve informação de pertença a função ao contabilizar apenas o utilizador e os seus grupos locais. Se o utilizador especificado não for o utilizador atual, o valor devolvido por IS_SRVROLEMEMBER pode diferir da última atualização de dados do autenticador (como o Active Directory) para o SQL Server.

Se for fornecido o parâmetro opcional de login, o login do Windows que está a ser consultado deve estar presente em sys.server_principals, caso contrário IS_SRVROLEMEMBER devolve NULL. Isto indica que o login não é válido.

Quando o parâmetro de login é um login de domínio ou baseado num grupo Windows e o controlador de domínio está inacessível, as chamadas para IS_SRVROLEMEMBER falham e podem devolver dados incorretos ou incompletos.

Se o controlador de domínio não estiver disponível, a chamada para IS_SRVROLEMEMBER retorna informação precisa quando o principal do Windows pode ser autenticado localmente, como uma conta local do Windows ou um login do SQL Server.

IS_SRVROLEMEMBER sempre devolve 0 quando um grupo Windows é usado como argumento de login, e este grupo Windows é membro de outro grupo Windows que, por sua vez, pertence ao papel de servidor especificado.

A definição de Controlo de Conta de Utilizador (UAC) também pode causar resultados diferentes. Isto dependeria se o utilizador acedeu ao servidor como membro do grupo Windows ou como um utilizador específico do SQL Server.

Esta função avalia a pertença à função, não a permissão subjacente. Por exemplo, o papel de servidor fixo de sysadmin tem a permissão CONTROL SERVER . Se o utilizador tiver a permissão CONTROL SERVER mas não for membro do papel, esta função irá reportar corretamente que o utilizador não pertence ao papel de sysadmin , mesmo que o utilizador tenha as mesmas permissões.

Para determinar se o utilizador atual é membro do grupo Windows especificado, do grupo Microsoft Entra ou do papel de base de dados SQL Server, use IS_MEMBER (Transact-SQL). Para determinar se um login SQL Server pertence a uma função de base de dados, use IS_ROLEMEMBER (Transact-SQL).

Permissions

Requer permissão VER DEFINIÇÃO no papel de servidor.

Examples

O exemplo seguinte indica se o login do SQL Server para o utilizador atual pertence ao sysadmin papel fixo do servidor.

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 seguinte indica se o Pat de login do domínio pertence ao papel de servidor fixo de administrador de discos .

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

Ver também

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