sp_setapprole (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure

Ativa as permissões associadas a uma função de aplicativo no banco de dados atual.

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_setapprole
    [ @rolename = ] N'rolename'
    , [ @password = ] N'password'
    [ , [ @encrypt = ] 'encrypt' ]
    [ , [ @fCreateCookie = ] fCreateCookie ]
    [ , [ @cookie = ] cookie OUTPUT ]
[ ; ]

Argumentos

@rolename [ = ] N'nome da função'

O nome da função de aplicativo definida no banco de dados atual. @rolename é sysname, sem padrão. @rolename deve existir no banco de dados atual.

@password [ = ] { encrypt N'senha' }

A senha necessária para ativar a função de aplicativo. @password é sysname, sem padrão. @password podem ser ofuscados usando a função ODBCencrypt. Quando você usa a encrypt função, a senha deve ser convertida em uma cadeia de caracteres Unicode colocando N antes das primeiras aspas.

Não há suporte para a opção encrypt em conexões que usam SqlClient.

Importante

A função ODBC encrypt não fornece criptografia. Você não deve confiar nessa função para proteger senhas transmitidas por uma rede. Se essas informações forem transmitidas por uma rede, use TLS ou IPSec.

@encrypt [ = ] { 'nenhum' | 'odbc' }

Especifica o tipo de criptografia antes de enviar a senha para o Mecanismo de Banco de Dados do SQL Server. @encrypt é varchar(10) e pode ser um desses valores.

Valor Descrição
none (padrão) Especifica que nenhuma ofuscação é usada. A senha é passada para o SQL Server como texto sem formatação.
odbc Especifica que o ODBC ofusca a senha usando a função ODBC encrypt antes de enviar a senha para o Mecanismo de Banco de Dados do SQL Server. Esse valor só pode ser especificado quando você estiver usando um cliente ODBC ou o Provedor OLE DB para SQL Server.

@fCreateCookie [ = ] { 'verdadeiro' | 'falso' }

Especifica se um cookie deve ser criado. @fCreateCookie é bit, com um padrão de 0.

true é implicitamente convertido em 1. false é implicitamente convertido em 0.

Especifica um parâmetro de saída para conter o cookie. @cookie é um parâmetro OUTPUT do tipo varbinary(8000). O cookie é gerado somente se o valor de @fCreateCookie for true.

Observação

Embora a implementação atual retorne varbinary(50), os aplicativos devem reservar o varbinary(8000) documentado, para que o aplicativo continue a operar corretamente se o tamanho do retorno do cookie aumentar em uma versão futura.

Valores do código de retorno

0 (sucesso) e 1 (fracasso).

Comentários

Depois que uma função de aplicativo é ativada usando sp_setapproleo , a função permanece ativa até que o usuário se desconecte do servidor ou execute sp_unsetapprole. Você não pode usar sp_setapprole em outro procedimento armazenado, gatilho ou em uma transação definida pelo usuário. Ele só pode ser executado como instruções Transact-SQL diretas.

Para obter uma visão geral das funções de aplicativo, consulte Funções de aplicativo.

Você sempre deve usar uma conexão criptografada ao habilitar uma função de aplicativo, para proteger a senha da função de aplicativo ao transmiti-la por uma rede.

A opção ODBC encrypt da Microsoft não é compatível com SqlClient. Se for necessário armazenar credenciais, criptografe-as com as funções da API de criptografia. O parâmetro @password é armazenado como um hash unidirecional. Para preservar a compatibilidade com versões anteriores do SQL Server, sp_addapprole o não impõe a política de complexidade de senha. Para impor a política de complexidade de senha, use CREATE APPLICATION ROLE.

Permissões

Requer associação em público e conhecimento da senha para a função.

Exemplos

R. Ativar uma função de aplicativo sem a opção de criptografia

O exemplo a seguir ativa uma função de aplicativo chamada SalesAppRole, com a senha AsDeF00MbXXde texto sem formatação , criada com permissões projetadas para o aplicativo usado pelo usuário atual.

EXEC sys.sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO

O exemplo a seguir ativa a função de aplicativo Sales11 com a senha fdsd896#gfdbfdkjgh700mM e cria um cookie. O exemplo retorna o nome do usuário atual e, em seguida, reverte para o contexto original executando sp_unsetapprole.

DECLARE @cookie VARBINARY(8000);

EXEC sys.sp_setapprole 'Sales11',
    'fdsd896#gfdbfdkjgh700mM',
    @fCreateCookie = true,
    @cookie = @cookie OUTPUT;

A função de aplicativo agora está ativa. USER_NAME() retorna o nome da função de aplicativo, Sales11.

SELECT USER_NAME();

Remova a definição da função do aplicativo.

EXEC sys.sp_unsetapprole @cookie;
GO

A função de aplicativo não está mais ativa. O contexto original é restaurado. USER_NAME() retorna o nome do usuário original.

SELECT USER_NAME();
GO