Funções de aplicativo

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 trabalham com ambos os modos de autenticaçã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 estará inacessível a funções de aplicativo em outros bancos de dados.

No SQL Server, 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 nível de servidor. Para desabilitar essa restrição e assim permitir que funções de aplicativo acessem metadados de nível de servidor, defina o sinalizador global 4616. Para obter mais informações, consulte Sinalizadores de rastreamento (Transact-SQL) e DBCC TRACEON (Transact-SQL)..

Conectando 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 conecta com uma instância do SQL Server como o 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 maneira de um usuário readquirir seu contexto de segurança original depois de iniciar uma função de aplicativo é desconectar e conectar-se novamente com o SQL Server. A partir do SQL Server 2005, o 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 cookie pode ser usado por sp_unsetapprole para reverter a sessão a seu contexto original. Para obter mais informações sobre essa nova opção e um exemplo, consulte sp_setapprole (Transact-SQL).

Observação sobre segurançaObservação sobre segurança

A opção ODBC criptografia não tem suporte no SqlClient. Ao transmitir informações confidenciais pela rede, use 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 e versões posteriores, o parâmetro password é armazenado como um hash de mão única.