Compartilhar via


IS_ROLEMEMBER (Transact-SQL)

Indica se um princípio de banco de dados especificado é um membro da função de banco de dados especificada.

Ícone de vínculo de tópico Convenções de sintaxe Transact-SQL

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, retornará NULL.

Tipos de retorno

int

Valor de retorno

Descrição

0

database_principal não é membro de role.

1

database_principal é membro de role.

NULL

database_principal ou role não é válido ou você não tem permissão para exibir a associação de função.

Comentários

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 o database_principal é baseado em um logon do Windows, como Contoso\Mary5, IS_ROLEMEMBER retornará NULL, a menos que database_principal tenha sido concedido ou negado o acesso direto ao SQL Server.

Se o parâmetro database_principal opcional não for fornecido e o database_principal for baseado em um logon do domínio do Windows, ele poderá ser um membro da função de banco de dados através da associação em 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 não estiver acessível ou não responder, IS_ROLEMEMBER retornará informações de associação de função por conta apenas para 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 o SQL Server.

Se o parâmetro database_principal opcional for fornecido, a entidade de segurança de banco de dados que está sendo consultada deverá estar presente no sys.database_principals, ou IS_ROLEMEMBER retornará NULL. Isso indica que o database_principal não é válido neste banco de dados.

Quando o parâmetro database_principal é baseado em um logon de domínio ou baseado em um grupo do Windows e o controlador de domínio não está acessível, as chamadas para 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 o princípio do Windows puder ser autenticado localmente, como uma conta do Windows local ou um logon do SQL Server.

IS_ROLEMEMBER sempre retorna 0 quando um grupo do Windows é usado como o argumento principal 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 banco de dados especificada.

O UAC (Controle de Conta de Usuário) localizado no Windows Vista e o 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.

Funções relacionadas

Para determinar se o usuário atual é membro do grupo do Windows especificado ou da função de banco de dados SQL Server, use IS_MEMBER (Transact-SQL). Para determinar se um logon do SQL Server é um 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

Referência

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)