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.
Funções relacionadas
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)