Partilhar via


Funções de Aplicação

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

Um papel de aplicação é um principal de base de dados que permite a uma aplicação correr com as suas próprias permissões, semelhantes às do utilizador. Pode usar papéis de aplicação para permitir o acesso a dados específicos apenas aos utilizadores que se ligam através de uma aplicação específica. Ao contrário dos papéis de base de dados, os papéis de aplicação não contêm membros e são inativos por defeito. Os papéis de aplicação são ativados usando sp_setapprole, que requer palavra-passe. Como os papéis de aplicação são um principal ao nível da base de dados, só podem aceder a outras bases de dados através de permissões concedidas nessas bases de dados para convidados. Portanto, qualquer base de dados em que o convidado tenha sido desativado é inacessível para funções de aplicação noutras bases de dados.

No SQL Server, os papéis de aplicação não conseguem aceder a metadados ao nível do servidor porque não estão associados a um principal ao nível do servidor. Para desativar esta restrição e desta forma permitir que as funções de aplicação acedam a metadados ao nível do servidor, defina o flag global de traço 4616 usando -T4616 ou DBCC TRACEON (4616, -1). Se preferir não ativar este sinalizador de rastreio, pode usar um procedimento armazenado assinado por certificado para permitir que as funções de aplicação visualizem o estado do servidor. Para código de exemplo, veja este script de exemplo no GitHub.

Ligue-se a uma Vaga de Candidatura

Os seguintes passos compõem o processo pelo qual um papel de aplicação muda de contexto de segurança:

  1. Um utilizador executa uma aplicação cliente.

  2. A aplicação cliente liga-se a uma instância do SQL Server como utilizador.

  3. A aplicação executa então o sp_setapprole procedimento armazenado com uma palavra-passe conhecida apenas pela aplicação.

  4. Se o nome e a palavra-passe da função de aplicação forem válidos, a função de aplicação é ativada.

  5. Neste ponto, a ligação perde as permissões do utilizador e assume as permissões do papel de aplicação.

As permissões obtidas através da função da aplicação mantêm-se em vigor durante toda a duração da ligação.

Nas versões anteriores do SQL Server, a única forma de um utilizador recuperar o seu contexto de segurança original após iniciar uma função de aplicação é desconectar-se e reconectar-se ao SQL Server. A partir do SQL Server 2005 (9.x), sp_setapprole existe uma opção que cria um cookie. O cookie contém informação de contexto antes de o papel da aplicação ser ativado. O sp_unsetapprole procedimento armazenado utiliza então o cookie para reverter a sessão ao seu contexto original. Para informações sobre esta nova opção e um exemplo, veja sp_setapprole (Transact-SQL) e sp_unsetapprole (Transaction-SQL).

Importante

A opção de encriptação ODBC não é suportada pelo SqlClient. Quando está a transmitir informação confidencial através de uma rede, utilize a Segurança da Camada de Transporte (TLS), anteriormente conhecida como Camada de Soquetes Seguros (SSL), ou IPsec para encriptar o canal. Se tiver de manter credenciais persistentes na aplicação cliente, encripte as credenciais usando as funções da API criptográfica. No SQL Server 2005 (9.x) e versões posteriores, a palavra-passe do parâmetro é armazenada como um hash unidirecional.

Tarefa Tipo
Crie uma função de aplicação. Criar uma Função de Aplicação e CRIAR FUNÇÃO DE APLICAÇÃO (Transact-SQL)
Altere uma função de aplicação. ALTERAR O PAPEL DA APLICAÇÃO (Transact-SQL)
Eliminar uma função de aplicação. DESCARTAR FUNÇÃO DE APLICATIVO (Transact-SQL)
A usar uma função de aplicação. sp_setapprole (Transact-SQL)

Consulte também

Protegendo o SQL Server