O SQL Server, o Internet Information Server e o mecanismo ASP.NET fornecem modelos de segurança sólidos que funcionam bem juntos. Para manter os dados e aplicativos do usuário seguros, a Microsoft também define as configurações padrão de cada serviço para valores bastante baixos.
O desafio que a maioria dos desenvolvedores enfrenta é como usar o SQL Server, IIS e ASP.NET para definir o nível apropriado de confiança entre aplicativos e dados sem deixar falhas de segurança que possam ser facilmente comprometidas por outros. Como há três tipos de serviços envolvidos (SQL Server, IIS e ASP.NET), há três etapas principais a serem seguidas para garantir a segurança da solução. Esta seção discute um dos métodos mais comuns (e confiáveis) de configuração de permissões e níveis de confiança adequados para aplicativos Web.
Definir conta de usuário IIS personalizada DotNetKB
A maneira mais segura de proteger seu aplicativo Web é definir um usuário personalizado com permissões limitadas e, em seguida, configurar o IIS para ser executado como usuário personalizado ao executar seu aplicativo Web. Isso é bastante fácil de implementar e garante que cada visitante do seu aplicativo Web tenha apenas as permissões que você deseja.
A primeira etapa é gerar um novo usuário do Windows (chamado DotNetKB neste exemplo), definir uma senha forte para ele e, em seguida, adicioná-lo ao Grupo de Convidados do Windows (Grupo de Convidados do Windows). Além disso, certifique-se de que as caixas de seleção Senha nunca expire e que o usuário não pode alterar a senha estejam marcadas. Isso gerará um usuário com privilégios limitados que você poderá usar como identidade ao executar seu aplicativo Web no IIS (veja a Figura 1).
Em seguida, chame o Internet Information Server Administrator e selecione o aplicativo Web que hospeda essas páginas. Neste exemplo, você pode selecionar o aplicativo Web (DotNetKB_WebSite) que hospeda a página de teste gerada anteriormente. Clique com o botão direito no aplicativo da web na visualização em árvore e selecione Propriedades... no menu contextual. Em seguida, selecione Segurança de diretório e clique no botão Editar na seção Acesso anônimo e controle de autenticação da caixa de diálogo. Por fim, insira um nome de usuário personalizado (DotNetKB), desmarque a caixa de seleção Permitir que o IIS controle a senha e insira uma senha para a conta de usuário personalizada. Após concluir todo esse trabalho, clique no botão OK para salvar essas alterações no banco de dados de configuração do IIS (veja a Figura 2).
[Página cortada]
Neste ponto, o IIS será executado em uma conta personalizada com permissões limitadas. Qualquer visitante que visitar as páginas da web do seu aplicativo será executado como esse usuário personalizado e terá apenas permissões de autenticação para esse usuário personalizado.
Autorize a conta de usuário DotNetKB para acessar o SQL Server
Em seguida, você precisa conceder ao usuário personalizado as permissões apropriadas para acessar o banco de dados (DotNetKB). Para fazer isso, você pode usar o Microsoft SQL Server Enterprise Manager ou escrever um script personalizado para criar esse usuário e conceder-lhe acesso a objetos específicos. Este artigo descreve como fazer isso usando o SQL Server Enterprise Manager.
Observação: embora o Visual Studio .NET 2003 tenha muitos recursos integrados poderosos que são compatíveis com o SQL Server, ele não permite o gerenciamento fácil de usuários e permissões de usuários no Visual Studio .NET 2003. Em grandes organizações e equipes, essas tarefas avançadas normalmente são executadas por administradores de banco de dados. Portanto, após iniciar o SQL Server Enterprise Manager, você pode seguir as etapas abaixo para adicionar um usuário personalizado (DotNetKB) ao banco de dados.
·Na visualização em árvore à esquerda, expanda o nó para exibir o banco de dados DotNetKB. No meu computador, a exibição em árvore está estruturada da seguinte forma: Console Root SQL Server Group (LOCAL) (Windows NT) Bancos de dados DotNetKB.
·Em seguida, clique com o botão direito no nó Usuários no banco de dados e selecione Novo usuário do banco de dados... (Novo usuário do banco de dados...). Quando a caixa de diálogo Propriedades do usuário do banco de dados - Novo usuário for exibida, selecione (<Novo>) na caixa suspensa Nome de login.
·Quando a caixa de diálogo Propriedades de login do SQL Server - Novo login for exibida, selecione a guia Geral e insira DotNetKB na caixa de entrada Nome. Certifique-se de que o botão de opção Autenticação do Windows esteja selecionado e selecione o nome do computador onde a conta de usuário personalizada está localizada na caixa suspensa Domínio. Em seguida, selecione DotNetKB na caixa suspensa Banco de dados.
·Agora, selecione a guia Bancos de dados, encontre o banco de dados DotNetKB na lista no topo da caixa de diálogo e selecione-o. Em seguida, certifique-se de que a função pública esteja selecionada na lista na parte inferior da caixa de diálogo. Por fim, clique no botão OK na parte inferior da caixa de diálogo para salvar suas alterações.
Em seguida, você precisa adicionar permissões de execução a todos os procedimentos armazenados e funções personalizadas no banco de dados DotNetKB. Para fazer isso, você só precisa conceder permissões à função pública. Você pode conceder permissões aos usuários do DotNetKB, o que facilitará logins futuros (quando esses usuários obtiverem acesso ao DotNetKB) para executar procedimentos armazenados sem a necessidade de adicionar novas permissões para cada usuário.
A seguir estão as etapas para conceder permissões de execução a procedimentos e funções armazenados no banco de dados DotNetKB:
·Destaque o nó Usuários no banco de dados DotNetKB na visualização em árvore para exibir uma lista de usuários deste banco de dados. Localize o usuário DotNetKB e clique duas vezes nele para abrir a caixa de diálogo Propriedades dos usuários do banco de dados.
· Com a função pública destacada (selecionada), clique no botão Propriedades... para abrir a caixa de diálogo Propriedades da função de banco de dados. Em seguida, clique no botão Permissões... para exibir uma lista de objetos de banco de dados e configurações de permissão.
Com a função pública selecionada na lista suspensa Função do banco de dados na parte superior da caixa de diálogo, encontre todos os procedimentos armazenados e funções personalizadas definidas para este banco de dados (talvez seja necessário expandir a caixa de diálogo para ver os nomes completos) e certifique-se Marque a caixa de seleção EXECUTAR ao lado de cada item. Você pode descobrir que alguns objetos do sistema têm outras caixas de seleção marcadas. Não altere essas opções.
·Finalmente, após definir todas as permissões de EXECUTE, clique no botão OK para salvar as alterações e fechar a caixa de diálogo. Clique no botão OK um após o outro até que todas as caixas de diálogo sejam fechadas.
Neste ponto, você criou um usuário personalizado para IIS e definiu as permissões correspondentes do usuário no SQL Server. Agora, você precisa fazer uma alteração na configuração do projeto Web ASP.NET para garantir que o ASP.NET use a mesma conta de usuário para todas as chamadas ao SQL Server.
Configure seu aplicativo ASP.NET para representar usuários DotNetKB
A etapa final na geração de uma configuração sólida e confiável para um aplicativo Web ASP.NET em execução no IIS é configurar o aplicativo Web ASP.NET para que ele possa aceitar um ID de usuário do Windows do IIS e possa ser usado para acessar outros recursos do sistema operacional . Para fazer isso, você só precisa inserir uma linha de código no arquivo web.config raiz.
O arquivo web.config modificado fica assim:
<configuração>
<sistema.web>
...outros elementos...
<identity impersonate="true"/> <!-- Assumindo o ID do usuário IIS-->
...outros elementos...
</system.web>
</configuração>
Observe que você acabou de adicionar o elemento e definir o atributo mock como verdadeiro. Você não precisa inserir uma conta de usuário ou senha, pois essas informações serão fornecidas pelo IIS. Ou seja, mesmo que outras pessoas consigam ler seu arquivo de configuração, elas não poderão determinar quais credenciais de identidade serão usadas para executar seu aplicativo Web.
Neste ponto, você gerou um usuário personalizado e definiu as permissões apropriadas para ele acessar o SQL Server e o IIS.
Neste ponto, o IIS será executado em uma conta personalizada com permissões limitadas. Qualquer visitante que visitar as páginas da web do seu aplicativo será executado como esse usuário personalizado e terá apenas permissões de autenticação para esse usuário personalizado.
Autorize a conta de usuário DotNetKB para acessar o SQL Server
Em seguida, você precisa conceder ao usuário personalizado as permissões apropriadas para acessar o banco de dados (DotNetKB). Para fazer isso, você pode usar o Microsoft SQL Server Enterprise Manager ou escrever um script personalizado para criar esse usuário e conceder-lhe acesso a objetos específicos. Este artigo descreve como fazer isso usando o SQL Server Enterprise Manager.
Observação: embora o Visual Studio .NET 2003 tenha muitos recursos integrados poderosos que são compatíveis com o SQL Server, ele não permite o gerenciamento fácil de usuários e permissões de usuários no Visual Studio .NET 2003. Em grandes organizações e equipes, essas tarefas avançadas normalmente são executadas por administradores de banco de dados. Portanto, após iniciar o SQL Server Enterprise Manager, você pode seguir as etapas abaixo para adicionar um usuário personalizado (DotNetKB) ao banco de dados.
·Na visualização em árvore à esquerda, expanda o nó para exibir o banco de dados DotNetKB. No meu computador, a exibição em árvore está estruturada da seguinte forma: Console Root SQL Server Group (LOCAL) (Windows NT) Bancos de dados DotNetKB.
·Em seguida, clique com o botão direito no nó Usuários no banco de dados e selecione Novo usuário do banco de dados... (Novo usuário do banco de dados...). Quando a caixa de diálogo Propriedades do usuário do banco de dados - Novo usuário for exibida, selecione (<Novo>) na caixa suspensa Nome de login.
·Quando a caixa de diálogo Propriedades de login do SQL Server - Novo login for exibida, selecione a guia Geral e insira DotNetKB na caixa de entrada Nome. Certifique-se de que o botão de opção Autenticação do Windows esteja selecionado e selecione o nome do computador onde a conta de usuário personalizada está localizada na caixa suspensa Domínio. Em seguida, selecione DotNetKB na caixa suspensa Banco de dados.
·Agora, selecione a guia Bancos de dados, encontre o banco de dados DotNetKB na lista no topo da caixa de diálogo e selecione-o. Em seguida, certifique-se de que a função pública esteja selecionada na lista na parte inferior da caixa de diálogo. Por fim, clique no botão OK na parte inferior da caixa de diálogo para salvar suas alterações.
Em seguida, você precisa adicionar permissões de execução a todos os procedimentos armazenados e funções personalizadas no banco de dados DotNetKB. Para fazer isso, você só precisa conceder permissões à função pública. Você pode conceder permissões aos usuários do DotNetKB, o que facilitará logins futuros (quando esses usuários obtiverem acesso ao DotNetKB) para executar procedimentos armazenados sem a necessidade de adicionar novas permissões para cada usuário.
A seguir estão as etapas para conceder permissões de execução a procedimentos e funções armazenados no banco de dados DotNetKB:
·Destaque o nó Usuários no banco de dados DotNetKB na visualização em árvore para exibir uma lista de usuários deste banco de dados. Localize o usuário DotNetKB e clique duas vezes nele para abrir a caixa de diálogo Propriedades dos usuários do banco de dados.
· Com a função pública destacada (selecionada), clique no botão Propriedades... para abrir a caixa de diálogo Propriedades da função de banco de dados. Em seguida, clique no botão Permissões... para exibir uma lista de objetos de banco de dados e configurações de permissão.
Com a função pública selecionada na lista suspensa Função do banco de dados na parte superior da caixa de diálogo, encontre todos os procedimentos armazenados e funções personalizadas definidas para este banco de dados (talvez seja necessário expandir a caixa de diálogo para ver os nomes completos) e certifique-se Marque a caixa de seleção EXECUTAR ao lado de cada item. Você pode descobrir que alguns objetos do sistema têm outras caixas de seleção marcadas. Não altere essas opções.
·Finalmente, após definir todas as permissões de EXECUTE, clique no botão OK para salvar as alterações e fechar a caixa de diálogo. Clique no botão OK um após o outro até que todas as caixas de diálogo sejam fechadas.
Neste ponto, você criou um usuário personalizado para IIS e definiu as permissões correspondentes do usuário no SQL Server. Agora, você precisa fazer uma alteração na configuração do projeto Web ASP.NET para garantir que o ASP.NET use a mesma conta de usuário para todas as chamadas ao SQL Server.
Configure seu aplicativo ASP.NET para representar usuários DotNetKB
A etapa final na geração de uma configuração sólida e confiável para um aplicativo Web ASP.NET em execução no IIS é configurar o aplicativo Web ASP.NET para que ele possa aceitar um ID de usuário do Windows do IIS e possa ser usado para acessar outros recursos do sistema operacional . Para fazer isso, você só precisa inserir uma linha de código no arquivo web.config raiz.
O arquivo web.config modificado fica assim:
<configuração>
<sistema.web>
...outros elementos...
<identity impersonate="true"/> <!-- Assumindo o ID do usuário IIS-->
...outros elementos...
</system.web>
</configuração>
Observe que você acabou de adicionar o elemento e definir o atributo mock como verdadeiro. Você não precisa inserir uma conta de usuário ou senha, pois essas informações serão fornecidas pelo IIS. Ou seja, mesmo que outras pessoas consigam ler seu arquivo de configuração, elas não poderão determinar quais credenciais de identidade serão usadas para executar seu aplicativo Web.
Neste ponto, você gerou um usuário personalizado e definiu as permissões apropriadas para ele acessar o SQL Server e o IIS.