Compartilhar via


IS_ROLEMEMBER (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

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' ] )  

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)