Partilhar via


IS_ROLEMEMBER (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

Indica se uma entidade do banco de dados especificada é membro da função de banco de dados especificada.

Convenções de sintaxe de Transact-SQL

Observação

O Microsoft Entra ID era conhecido anteriormente como Azure Active Directory (Azure AD).

Sintaxe

IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )  

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

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

' database_principal '
É o nome do usuário do banco de dados, da função do banco de dados ou da função do aplicativo a verificar. database_principal é sysname, com um padrão 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.

Tipos de retorno

int

Valor retornado Descrição
0 database_principal não é membro da função.
1 database_principal é um membro de role.
NULO database_principal ou função não é válida ou você não tem permissão para exibir a associação de função.

Comentários

Não há suporte para a função IS_ROLEMEMBER para um administrador do Microsoft Entra quando o administrador é membro de um grupo do Microsoft Entra. A função IS_ROLEMEMBER tem suporte para usuários do Microsoft Entra que são membros de um grupo do Microsoft Entra, a menos que esse grupo seja o administrador do Microsoft Entra.

Use IS_ROLEMEMBER para determinar se o usuário atual pode executar uma ação que requer as permissões da função do banco de dados.

Se database_principal se basear em um logon do Windows, como Contoso\Mary5, IS_ROLEMEMBER retornará NULL, a menos que o database_principal tenha tido o acesso direto ao SQL Server concedido ou negado.

Se o parâmetro database_principal opcional não for fornecido e se o database_principal for baseado em um logon de domínio do Windows, ele poderá ser membro de uma função de banco de dados por meio da associação a um grupo do Windows. Para resolver essas associações indiretas, IS_ROLEMEMBER 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_ROLEMEMBER 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_ROLEMEMBER poderá ser diferente da última atualização de dados do autenticador (como o Active Directory) para SQL Server.

Se o parâmetro database_principal opcional for fornecido, o usuário deverá existir em sys.database_principals ou IS_ROLEMEMBER retornará NULL.

Quando o parâmetro database_principal for baseado em um logon de domínio ou baseado em um grupo do Windows e o controlador de domínio não estiver acessível, as chamadas a IS_ROLEMEMBER 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_ROLEMEMBER 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_ROLEMEMBER sempre retorna 0 quando um grupo do Windows é usado como o argumento de entidade de segurança do banco de dados, e esse grupo do Windows é membro de outro grupo do Windows que é, por sua vez, membro da função de banco de dados especificada.

O UAC (Controle de Conta de Usuário) localizado no Windows Vista e no Windows Server 2008 também podem retornar 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 banco de dados fixa db_owner tem a permissão CONTROL DATABASE. Se o usuário tiver a permissão CONTROL DATABASE , mas não for membro da função, essa função relatará corretamente que o usuário não é membro da função db_owner , mesmo que o usuário tenha as mesmas permissões.

Membros da função fixa de servidor sysadmin entram em cada banco de dados como o usuário dbo. Verificar permissões de membro da função fixa de servidor sysadmin verifica as permissões para dbo, não o logon original. Como dbo não pode ser adicionado a uma função de banco de dados e não existe em grupos do Windows, dbo sempre retorna 0 (ou NULL se a função não existir).

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 é membro de uma função de servidor, use IS_SRVROLEMEMBER (Transact-SQL).

Permissões

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

Exemplos

O exemplo a seguir indica se o usuário atual é membro da função de banco de dados fixa db_datareader.

IF IS_ROLEMEMBER ('db_datareader') = 1  
   print 'Current user is a member of the db_datareader role'  
ELSE IF IS_ROLEMEMBER ('db_datareader') = 0  
   print 'Current user is NOT a member of the db_datareader role'  
ELSE IF IS_ROLEMEMBER ('db_datareader') IS NULL  
   print 'ERROR: The database role specified is not valid.';  

Consulte Também

CREATE ROLE (Transact-SQL)
ALTER ROLE (Transact-SQL)
DROP ROLE (Transact-SQL)
CREATE SERVER ROLE (Transact-SQL)
ALTER SERVER ROLE (Transact-SQL)
DROP SERVER ROLE (Transact-SQL)
IS_MEMBER (Transact-SQL)
IS_SRVROLEMEMBER (Transact-SQL)
Funções de segurança (Transact-SQL)