Partilhar via


IS_ROLEMEMBER (Transact-SQL)

Aplica-se a:Banco de Dados SQL doAzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Banco de Dados SQL no Microsoft Fabric

Indica se um principal de base de dados especificado é membro do papel especificado na base de dados.

Transact-SQL convenções de sintaxe

Observação

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

Sintaxe

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

Arguments

'Papel'
É o nome do papel na base de dados que está a ser verificado. O papel é sysname.

'database_principal'
É o nome do utilizador da base de dados, função da base de dados ou função da aplicação a verificar. database_principal é sysname, com o padrão NULL. Se não for especificado nenhum valor, o resultado baseia-se no contexto de execução atual. Se o parâmetro contiver a palavra NULL, devolverá NULL.

Tipos de devolução

int

Valor de retorno Description
0 database_principal não é um membro do papel.
1 database_principal é um membro do papel.
NULO database_principal ou função não é válida, ou não tens permissão para ver a pertença à função.

Observações

A função IS_ROLEMEMBER não é suportada para um administrador Microsoft Entra quando este é membro de um grupo Microsoft Entra. A função IS_ROLEMEMBER é suportada por utilizadores Microsoft Entra que sejam membros de um grupo Microsoft Entra, a menos que esse grupo seja o administrador Microsoft Entra.

Use IS_ROLEMEMBER para determinar se o utilizador atual pode realizar uma ação que exija as permissões do papel da base de dados.

Se database_principal for baseado num login do Windows, como Contoso\Mary5, IS_ROLEMEMBER devolve NULL, a menos que o database_principal tenha sido concedido ou negado acesso direto ao SQL Server.

Se o parâmetro opcional de database_principal não for fornecido e se o database_principal for baseado num login de domínio Windows, pode ser membro de uma função de base de dados através da pertença a um grupo Windows. Para resolver tais pertenças indiretas, IS_ROLEMEMBER 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_ROLEMEMBER devolve informação de pertença ao ter em conta apenas o utilizador e os seus grupos locais. Se o utilizador especificado não for o utilizador atual, o valor devolvido por IS_ROLEMEMBER 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 database_principal , o utilizador deve existir em sys.database_principals, ou IS_ROLEMEMBER devolve NULL.

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

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

IS_ROLEMEMBER sempre devolve 0 quando um grupo Windows é usado como argumento principal da base de dados, e este grupo Windows é membro de outro grupo Windows que, por sua vez, pertence ao papel especificado na base de dados.

O Controlo de Conta de Utilizador (UAC) encontrado no Windows Vista e Windows Server 2008 também pode devolver 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 base de dados fixo db_owner tem a permissão CONTROL DATABASE . Se o utilizador tiver a permissão CONTROLAR BASE de DADOS mas não for membro da função, esta função irá reportar corretamente que o utilizador não pertence à função db_owner , mesmo que o utilizador tenha as mesmas permissões.

Os membros do papel fixo de servidor sysadmin entram em todas as bases de dados como utilizadores dbo . Verificar a permissão do membro do sysadmin fixou o papel de servidor verifica as permissões para o DBO, não para o login original. Como o dbo não pode ser adicionado a um papel de base de dados e não existe nos grupos do Windows, o dbo devolve sempre 0 (ou NULL se o papel não existir).

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 um papel de servidor, use IS_SRVROLEMEMBER (Transact-SQL).

Permissions

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

Examples

O exemplo seguinte indica se o utilizador atual é membro do db_datareader papel fixo na base de dados.

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.';  

Ver também

CRIAR PAPEL (Transact-SQL)
ALTER PAPEL (Transact-SQL)
PAPEL DE DESISTÊNCIA (Transact-SQL)
CRIAR PAPEL DE SERVIDOR (Transact-SQL)
ALTERAR O PAPEL DO SERVIDOR (Transact-SQL)
PAPEL DE SERVIDOR DE ABANDONO (Transact-SQL)
IS_MEMBER (Transact-SQL)
IS_SRVROLEMEMBER (Transact-SQL)
Funções de segurança (Transact-SQL)