Compartilhar via


Funções de aplicativo

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Uma função de aplicativo é uma entidade de banco de dados que permite que um aplicativo execute com suas próprias permissões de usuário. As funções de aplicativos podem ser usadas para habilitar acesso a dados específicos somente aos usuários que se conectam por um aplicativo específico. Diferentemente de funções de banco de dados, funções de aplicativo não contêm membros e são inativas por padrão. Funções de aplicativo são habilitadas usando sp_setapprole, que requer uma senha. Como as funções de aplicativo são uma entidade de nível de banco de dados, elas só podem acessar outros bancos de dados através de permissões concedidas nesses bancos de dados como convidado. Portanto, qualquer banco de dados no qual o convidado tenha sido desabilitado fica inacessível a funções de aplicativo em outros bancos de dados.

No SQL Server, as funções de aplicativo não podem acessar metadados de nível de servidor porque eles não estão associados a uma entidade de segurança no nível do servidor. Para desabilitar essa restrição e assim permitir que funções de aplicativo acessem metadados de nível de servidor, defina o sinalizador de rastreamento global 4616 usando -T4616 ou DBCC TRACEON (4616, -1). Se preferir não habilitar esse sinalizador de rastreamento, use um procedimento armazenado assinado por certificado para permitir que as funções de aplicativo exibam o estado do servidor. Para obter código de exemplo, veja este script de exemplo no GitHub.

Conectar-se com uma função de aplicativo

As etapas seguintes compõem o processo pelo qual uma função de aplicativo alterna contextos de segurança:

  1. Um usuário executa um aplicativo cliente.

  2. O aplicativo cliente se conecta a uma instância do SQL Server como usuário.

  3. O aplicativo executa o procedimento armazenado sp_setapprole com uma senha somente conhecida pelo aplicativo.

  4. Se o nome de função de aplicativo e a senha forem válidos, a função de aplicativo será habilitada.

  5. Nesse momento, a conexão perde as permissões de usuário e assume as permissões da função de aplicativo.

As permissões adquiridas pela função de aplicativo permanecem em efeito durante a conexão.

Em versões anteriores do SQL Server, a única forma de um usuário readquirir seu contexto de segurança original depois de iniciar uma função de aplicativo é desconectar e conectar-se novamente ao SQL Server. A partir do SQL Server 2005 (9.x), sp_setapprole tem uma opção que cria um cookie. O cookie contém informações de contexto anteriores à habilitação da função de aplicativo. O procedimento armazenado sp_unsetapprole usa o cookie para reverter a sessão ao contexto original. Para obter informações sobre essa nova opção e um exemplo, veja sp_setapprole (Transact-SQL) e sp_unsetapprole (Transaction-SQL).

Importante

A opção ODBC criptografia não tem suporte no SqlClient. Ao transmitir informações confidenciais pela rede, use o protocolo TLS, anteriormente conhecido como SSL (Secure Sockets Layer) ou IPsec para criptografar o canal. Se você deve persistir credenciais no aplicativo cliente, criptografe as credenciais usando as funções API de criptografia. No SQL Server 2005 (9.x) e versões posteriores, o parâmetro senha é armazenado como hash unidirecional.

Tarefa Tipo
Criar uma função de aplicativo. Criar uma função de aplicativo e CREATE APPLICATION ROLE (Transact-SQL)
Alterar uma função de aplicativo. ALTER APPLICATION ROLE (Transact-SQL)
Excluir uma função de aplicativo. DROP APPLICATION ROLE (Transact-SQL)
Usando uma função de aplicativo. sp_setapprole (Transact-SQL)

Confira também

Protegendo o SQL Server