Autenticando usuários de aplicações no Windows e SQL Server

Hola! Que tal? (Como dizem nossos amigos uruguaios)

Estive ausente já faz um bom tempo, e de fato iria continuar por mais algum tempo, mas recentemente (hoje, pra ser mais sincero) implantei um pequeno sistema que se autentica com usuários do domínio (AD) do windows diretamente no SQL Server.

Oras, mas pra que serve isso? Basta deixar um usuário fixo da aplicação no sql server e pronto! Realmente isso funciona 100% adrenalina (como diria meu amigo Nataniel…).

Sim funciona sim, mas suponha os seguintes cenários:

  1. Sua aplicação está consumindo grandes recursos de processamento;
  2. Você sabe que somente sua aplicação está utilizando o DBMS;
  3. Você gostaria de saber qual usuário está realizando a query “from hell”;
  4. Você gostaria de criar auditorias em algumas tabelas, via trigger;

Em algumas dessas situações, se você utiliza autenticação pelo SQL Server (e não pelo domínio, ou Active Directory), saber exatamente qual usuário pode ser um problema, visto que todas as conexões vindas do servidor de aplicação fazem login com o mesmo usuário do SQL Server.

Nesses casos (e também caso aquele dba esteja te solicitando) a aplicação pode se autenticar pelo domínio do windows, sem ter que fazer nenhuma alteração no GeneXus, somente alterando configurações do próprio IIS. Vamos a elas…

Pré-requisito opcional: Recomendo a instalação do IIS Admin Pack, que é um pacote que adiciona algumas funcionalidades bacanas ao IIS Manager, entre elas a possibilidade de se editar graficamante configurações do web.config que antes eram somente na raça (editando o web.config). Esse pacote pode ser baixado da própria MS: http://www.iis.net/download/AdministrationPack

As configurações abaixo foram testadas em aplicativos GX 9 e X evolution 1, com IIS7 rodando em windows 7 e em um servidor windows 2008;

  1. Configurar o pool do aplicativo para fazer autenticação pelo ASPNet: Selecionar o pool de aplicativos vinculado a sua aplicação, e clicar em configurações avançadas:
    Image
  2. Configurar sua aplicação para autenticação integrada: Editar o web.config, ou pelo Genexus, ou pelo editor de configurações do IIS, trocar “Integrated Security” de “no” para “yes”:
    Image
    e depois:
    Image
  3. Desabilitar a autenticação anônima, e habilitar a autenticação do windows e a personificação do ASPNET:
    Image
    e depois:
    Image
  4. e, finalmente, forçar o IIS a utilizar a autenticação do ASPNET, aqui se torna extremamente fácil se você instalou o Administrator Pack: Abrir o Editor de configurações, selecionar system.webServer/security/authentication/windowsAuthentication, e alterar o valor “useAppPoolCredentials” de “False” para “True”:
    Image
    e depois:
    Image

    Aqui na propriedade “providers” é interessante deixar apenas NTLM, basta clicar nos “…” e remover a opção “Negotiate”

Nesse último passo, se você não instalou o admin pack, terá que editar “a mão” o arquivo web.config para adicionar as sessões relativas a essas configurações, que eu não sei exatamente quais são;

E é isso, fazendo esses pequenos passos os dba’s agradecem! 🙂

P.S.: Não esqueçam de autorizar seu usuário do windows no SQL Server, ou então irá receber uma mensagem de erro, dizendo que seu usuário não pode fazer login na base de dados…

Um abraço, e até a próxima!
Sandro M. Vianna

Anúncios