IS_ROLEMEMBER (Transact-SQL)
Indica se um princípio de banco de dados especificado é um membro da função de banco de dados especificada.
Aplica-se a: SQL Server (SQL Server 2012 à versão atual). |
Convenções da 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 SERVER ROLE (Transact-SQL)
ALTER SERVER ROLE (Transact-SQL)
DROP SERVER ROLE (Transact-SQL)