Clique para classificar e enviar comentários
MSDN
Biblioteca MSDN
Artigos Técnicos
Segurança
 Como: usar a conta do serviço de re...

  Ativar exibição de largura de banda baixa
Como: usar a conta do serviço de rede para acessar recursos no ASP.NET

Por J.D. Meier, Alex Mackman, Blaine Wastell, Prashant Bansode, Andy Wigley, Kishore Gopalan

Microsoft Corporation

Agosto de 2005

Aplica-se a

  • ASP.NET versão 1.1

  • ASP.NET versão 2.0

  • Windows Server 2003

Resumo

Este artigo mostra como você pode usar a conta da máquina de AUTORIDADE NT\Serviço de Rede para acessar recursos locais e de rede. Por padrão, no Windows Server 2003, os aplicativos ASP.NET são executados usando essa identidade de conta. Ela é uma conta menos privilegiada, com direitos e permissões de usuário limitados, mas que possui credenciais de rede. Isso significa que você pode usá-la para fazer a autenticação nos recursos de rede de um domínio. Este artigo descreve como você pode usar a conta do serviço de rede para acessar recursos do servidor, como o log de eventos do Windows, o Registro do Windows, o sistema de arquivos e os bancos de dados local e remoto do SQL Server.

Nesta página

Objetivos
Visão geral
Acesso ao log de eventos
Acesso ao Registro
Acesso a arquivos
SQL Server

Objetivos

  • Conhecer as restrições impostas pelo uso da conta do serviço de rede para acessar recursos.

  • Usar a conta do serviço de rede para acessar os seguintes tipos de recursos:

    • Log de eventos do Windows

    • Registro do Windows

    • Sistema de arquivos local

    • Bancos de dados local e remoto

Visão geral

Por padrão, o Microsoft IIS (Serviços de Informações da Internet) 6.0 no Windows Server 2003 executa os aplicativos ASP.NET em pools de aplicativos que usam a identidade da conta AUTORIDADE NT\Serviço de Rede. Essa é uma conta de máquina menos privilegiada, com permissões limitadas. Um aplicativo executado usando essa conta tem acesso restrito ao log de eventos, ao Registro e ao sistema de arquivos. A conta possui credenciais de rede, o que significa que você pode usá-la para acessar os recursos da rede e os bancos de dados remotos usando a autenticação do Windows. Os recursos da rede devem estar no mesmo domínio que o servidor Web ou em um domínio confiável.

Em alguns cenários, o uso de uma conta do serviço do domínio personalizada é uma abordagem melhor que o uso da conta do serviço de rede. Você deverá usar uma conta do serviço de domínio personalizada se:

  • Desejar isolar vários aplicativos um do outro em um único servidor.

  • Precisar de diferentes controles de acesso para cada aplicativo em recursos locais e remotos. Por exemplo, outros aplicativos não poderão acessar os bancos de dados do seu aplicativo se o acesso estiver restrito à conta do seu aplicativo.

  • Desejar usar a auditoria do Windows para controlar a atividade de cada aplicativo separadamente.

  • Desejar impedir que quaisquer alterações acidentais ou deliberadas nos controles de acesso ou nas permissões associadas à conta do serviço de rede de finalidade geral afetem seu aplicativo.

Este artigo mostra como a conta do serviço de rede pode ser usada para acessar uma variedade de tipos de recursos, incluindo o log de eventos, o Registro, o sistema de arquivos e os bancos de dados.

Acesso ao log de eventos

Os aplicativos executados usando a identidade do serviço de rede podem gravar no log de eventos usando as fontes de eventos existentes, mas não podem criar novas fontes de eventos devido às permissões insuficientes no Registro. Quando você usa o método EventLog.Write, se a fonte de eventos especificada não existir, esse método tentará criá-la. A menos que você tenha definido as permissões adequadas no Registro, uma exceção de segurança será gerada.

Observação: é útil usar as fontes de eventos específicas do aplicativo para que os eventos do seu aplicativo possam ser diferenciados facilmente dos eventos de outros aplicativos.

Para permitir que o aplicativo ASP.NET grave no log de eventos usando uma fonte de eventos que ainda não existe, você tem duas opções:

  • Criar novas fontes de eventos no momento da instalação do aplicativo

  • Conceder acesso de gravação às entradas do log de eventos no Registro

Criando uma nova fonte de eventos no momento da instalação

Com essa opção, você cria uma classe de instalador especializada que é executada usando o utilitário de instalação para criar uma nova fonte de eventos no momento da instalação, quando os privilégios de administrador estão disponíveis. Você executa o utilitário de instalação usando uma conta de administrador para que o utilitário tenha permissão para criar a nova fonte de eventos.

Para criar uma classe de instalador para criar fontes de eventos

  1. Use o Visual Studio .NET 2005 para criar um projeto de biblioteca de classes denominado InstallerClass.dll. Adicione uma referência do System.Configuration.Install do projeto InstallerClass.

  2. Nomeie a classe CustomEventLogInstaller e derive-a de System.Configuration.Install.Installer.

  3. Defina o atributo RunInstaller da classe como true.

  4. Crie uma instância do System.Diagnostics.EventLogInstaller para cada novo log de eventos necessário para seu aplicativo e chame Installers.Add para adicionar a instância à classe de instalador do projeto. A seguinte classe de exemplo adiciona uma nova fonte de eventos, chamada customLog, ao Log de eventos do aplicativo.

    using System;
    using System.Configuration.Install;
    using System.Diagnostics;
    using System.ComponentModel;
      
    [RunInstaller(true)]
    public class CustomEventLogInstaller: Installer
    {
         private EventLogInstaller customEventLogInstaller;
          public CustomEventLogInstaller() 
         {
               // Create an instance of 'EventLogInstaller'.
               customEventLogInstaller = new EventLogInstaller();
               // Set the 'Source' of the event log, to be created.
               customEventLogInstaller.Source = "customLog";
               // Set the 'Event Log' that the source is created in.
               customEventLogInstaller.Log = "Application";
               // Add myEventLogInstaller to 'InstallerCollection'.
               Installers.Add(customEventLogInstaller);     
         }
         public static void Main()
         {
         }
    }
    
  5. Compile o código da biblioteca InstallerClass.dll.

  6. Use uma conta com privilégios administrativos para executar o utilitário InstallUtil.exe, fornecendo o nome da DLL na linha de comando. Por exemplo, abra o prompt de comando do Visual Studio e digite o seguinte comando.

    InstallUtil.exe <dll path>\InstallerClass.dll
    

Quando o utilitário de instalação é chamado com a classe de instalador, ele examina o RunInstallerAttribute. Se ele for true, o utilitário instala todos os itens da coleção Installers. Isso cria as fontes de eventos especificadas para o aplicativo ASP.NET.

Concedendo acesso de gravação

Para criar novas fontes de eventos em tempo de execução, o método EventLog.WriteEntry precisa criar uma nova entrada abaixo da seguinte chave do Registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\

Para permitir que a conta do serviço de rede grave nessa chave do Registro

Para permitir que a conta do serviço de rede grave nessa chave do Registro

  1. Inicie a ferramenta Editor do Registro, Regedit.exe.

  2. Expanda a lista da estrutura de tópicos no painel esquerdo para localizar o ícone da pasta EventLog no caminho do Registro indicado acima.

  3. Clique com o botão direito do mouse na pasta EventLog e, em seguida, clique em Permissões.

  4. Na caixa de diálogo Permissões para Eventlog, clique em Adicionar.

  5. Na caixa de diálogo Selecione Usuários ou Grupos, digite SERVIÇO DE REDE na caixa de texto e clique em Verificar Nomes. O nome do serviço de rede é sublinhado. Isso indica que ele é uma entidade de segurança válida. Clique em OK.

  6. Na caixa de diálogo Permissões para Eventlog, clique no nome de usuário Serviço de Rede na lista e, na seção Permissões para SERVIÇO DE REDE, marque a caixa de seleção Controle Total na coluna Permitir. Clique em Aplicar e em OK.

A conta do serviço de rede agora possui a permissão para criar uma nova fonte de eventos no Registro.

Observação: deve-se ter cuidado para editar o Registro, porque qualquer erro pode provocar instabilidade no sistema. A abordagem recomendada é não editar o Registro diretamente, mas usar uma técnica alternativa, como a criação de novas fontes de eventos no momento da instalação.

Monitoramento da saúde

O monitoramento da saúde do ASP.NET versão 2.0 grava no log de eventos do aplicativo do Windows para reportar eventos importantes de vida útil e segurança, se estiver configurado para isso. É possível gerar eventos personalizados no código para fazer gravações no log de eventos usando o monitoramento de saúde do ASP.NET. Essa abordagem não usa o EventLog.WriteEntry, mas você fica restrito ao uso de uma fonte de eventos predefinida. Para obter mais informações sobre o monitoramento de saúde, consulte How To: Use Health Monitoring in ASP.NET 2.0 (em inglês).

Acesso ao Registro

A conta do serviço de rede não possui acesso de gravação ao Registro. Se o aplicativo precisar gravar no Registro, você deverá configurar as ACLs (listas de controle de acesso) necessárias nas chaves apropriadas do Registro.

Concedendo acesso ao Registro para o serviço de rede

No exemplo a seguir, um aplicativo precisa alterar e exibir o nome do servidor de horário na Internet com o qual o Windows é sincronizado automaticamente. Um operador pode alterar essa configuração usando a guia Horário na Internet do item Data e Hora do Painel de Controle.

O aplicativo precisa modificar a seguinte chave do Registro:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers

Para permitir o acesso de gravação à conta do serviço de rede na chave do Registro acima

Você deve usar uma conta de administrador com permissão para alterar a segurança do Registro para executar as seguintes etapas:

  1. Na barra de tarefas, clique em Iniciar e em Executar. Digite regedit na caixa Abrir e clique em OK.

  2. Expanda a lista da estrutura de tópicos no painel esquerdo para localizar o ícone da pasta DateTime no caminho do Registro indicado acima.

  3. Clique com o botão direito do mouse na pasta DateTime e, em seguida, clique em Permissões.

  4. Na caixa de diálogo Permissões para Servers, clique no botão Adicionar.

  5. Na caixa de diálogo Selecione Usuários ou Grupos, digite SERVIÇO DE REDE na caixa de texto e clique em Verificar Nomes. O nome do serviço de rede é sublinhado. Isso indica que ele é uma entidade de segurança válida. Clique em OK.

  6. Na caixa de diálogo Permissões para Servers, clique no nome de usuário Serviço de Rede na lista e, na seção Permissões para SERVIÇO DE REDE, clique em Avançado.

  7. Na caixa de diálogo Configurações de Segurança Avançadas para Servers, clique em Serviço de Rede e em Editar.

  8. Na caixa de diálogo Entrada de Permissão para Servers, marque as caixas de seleção Definir Valor e Criar Subchave na coluna Permitir para permitir acesso de gravação. Clique em OK várias vezes até que a caixa de diálogo Permissões seja fechada.

    Observação: deve-se ter cuidado para editar o Registro, porque qualquer erro pode provocar instabilidade no sistema.

Agora o aplicativo ASP.NET pode usar código semelhante ao seguinte exemplo para alterar e exibir o nome do servidor de horário na Internet.

using Microsoft.Win32;
...
protected void Button1_Click(object sender, EventArgs e)
{
  //change the time server
  RegistryKey rk = Registry.LocalMachine.OpenSubKey(
              @"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers", 
              true); //writable - this will fail without proper access
  string sDefault = (String)rk.GetValue("");
  int iDefault = Convert.ToInt32(sDefault);
  //this an array of all the server names
  string[] sServers = rk.GetValueNames(); //requires enumerate sub keys
  iDefault++;
  if (iDefault >= sServers.Length) 
      iDefault=1;
  rk.SetValue("", iDefault.ToString());
  // update display
  Response.write(rk.GetValue(sServers[iDefault]).ToString());
 }

Acesso a arquivos

Por padrão, a conta do serviço de rede possui permissões de leitura e execução na pasta raiz do servidor IIS. A pasta raiz do servidor IIS é denominada Wwwroot. Isso significa que um aplicativo ASP.NET implantado dentro da pasta raiz já possui permissões de leitura e execução em suas pastas de aplicativos. No entanto, se o aplicativo ASP.NET precisar usar arquivos ou pastas de outros locais, será necessário ativar o acesso especificamente.

Concedendo acesso aos arquivos para o serviço de rede

Para fornecer acesso a um aplicativo ASP.NET executado como um serviço de rede, é necessário conceder acesso à conta do serviço de rede.

Para conceder permissões de leitura, gravação e modificação a um arquivo específico

  1. No Windows Explorer, localize e selecione o arquivo necessário.

  2. Clique com o botão direito do mouse no arquivo e clique em Propriedades.

  3. Na caixa de diálogo Propriedades, clique na guia Segurança.

  4. Na guia Segurança, examine a lista de usuários. Se a conta do serviço de rede não estiver listada, adicione-a.

  5. Na caixa de diálogo Propriedades, clique no nome de usuário Serviço de Rede e, na seção Permissões para SERVIÇO DE REDE, selecione as permissões Ler, Gravar e Modificar.

  6. Clique em Aplicar e em OK.

Agora o aplicativo ASP.NET pode gravar no arquivo especificado.

Observação: se for necessário permitir o mesmo nível de acesso a um recurso de arquivo para todas as contas que executam aplicativos ASP.NET (serviço de rede ou uma conta de serviço personalizada), você poderá conceder acesso ao grupo IIS_WPG em vez de fazê-lo especificamente para a conta do serviço de rede. Qualquer conta usada para executar o ASP.NET precisa ser membro do grupo IIS_WPG.

Para obter mais informações sobre como criar uma conta personalizada para executar um aplicativo ASP.NET, consulte How To: Create a Service Account for an ASP.NET 2.0 Application (em inglês).

SQL Server

Os aplicativos ASP.NET devem usar a autenticação do Windows ao se conectarem a um banco de dados. Usando a autenticação do Windows, você evita armazenar credenciais de bancos de dados em seqüências de conexão e evita transmitir senhas pela rede para o servidor do banco de dados.

Com a autenticação do Windows, a conta do processo do aplicativo é usada por padrão para a autenticação. Para poder acessar um banco de dados, sua conta precisa de:

  • Um logon do SQL Server no servidor de banco de dados.

  • Permissões para os objetos necessários (por exemplo, procedimentos armazenados, modos de exibição ou tabelas) no banco de dados necessário.

Concedendo acesso a um SQL Server local

Quando o SQL Server está no servidor Web, você deve criar um logon de banco de dados para a conta AUTORIDADE NT\Serviço de Rede.

Para acessar um banco de dados do SQL Server local usando o serviço de rede

  1. Inicie o SQL Server Enterprise Manager.

  2. Expanda as pastas no painel esquerdo e localize a pasta Security do SQL Server local.

  3. Clique com o botão direito do mouse em Logins na pasta Security e, em seguida, clique em New Login.

  4. Na caixa de diálogo SQL Server Login Properties - New Login, na caixa Name, digite AUTORIDADE NT\Serviço de Rede. Aceite os padrões para as outras configurações e clique em OK.

  5. Expanda as pastas de bancos de dados e, em seguida, expanda o banco de dados Pubs (ou equivalente).

  6. Clique com o botão direito do mouse em Users e, em seguida, clique em New Database User.

  7. Na caixa de diálogo Database User Properties - New User, selecione a conta AUTORIDADE NT\Serviço de Rede.

  8. Na lista Permit in Database Role, marque a caixa de seleção db_datareader.

  9. Clique em OK e feche o SQL Server Enterprise Manager.

Agora a conta do serviço de rede possui permissão para ler os dados nas tabelas do banco de dados designado.

Na prática, os requisitos de seu aplicativo podem ser mais complexos. Por exemplo, você pode desejar permitir acesso de leitura a determinadas tabelas e acesso de atualização a outras. A abordagem recomendada para ajudar a reduzir o risco imposto pela injeção de SQL é conceder permissões de execução à conta do serviço de rede em um conjunto selecionado de procedimentos armazenados e não fornecer acesso direto a tabelas.

Concedendo acesso a um SQL Server remoto

Se o banco de dados estiver sendo acessado em outro servidor no mesmo domínio (ou em um domínio confiável), as credenciais de rede da conta do serviço de rede serão usadas para a autenticação no banco de dados. As credenciais da conta do serviço de rede estão no formato Nome_do_Domínio\ServidorAspNet$ , onde Nome_do_Domínio é o domínio do servidor ASP.NET e ServidorAspNet é o nome do servidor Web.

Por exemplo, se o seu aplicativo ASP.NET for executado em um servidor denominado SVR1 no domínio CONTOSO, o SQL Server verá uma solicitação de acesso a banco de dados a partir de CONTOSO\SVR1$.

Para acessar um SQL Server remoto usando o serviço de rede

Para conceder acesso a um servidor de banco de dados remoto no mesmo domínio ou em um domínio confiável, siga as etapas descritas anteriormente para um banco de dados local, com exceção da etapa 4; use a conta Nome_do_Domínio\ServidorAspNet$ para criar o logon do banco de dados.

Observação: em ambientes de produção, é necessário colocar a conta do serviço de rede em um grupo do Windows e criar um logon do SQL Server para o grupo do Windows.

Comentários

Envie comentários usando um Wiki ou email:

Estamos particularmente interessados em comentários relativos ao seguinte:

  • Problemas técnicos específicos a nossas recomendações

  • Problemas de uso e de aplicação

Suporte técnico

O suporte técnico para produtos e tecnologias da Microsoft mencionados nestas orientações é fornecido pelos Serviços de suporte da Microsoft. Para obter informações sobre o suporte a produtos, visite o site de Suporte da Microsoft.

Comunidade e grupos de notícias

O suporte da comunidade é fornecido nos fóruns e grupos de notícias:

Para obter o benefício máximo, localize o grupo de notícias correspondente à sua tecnologia ou ao seu problema. Por exemplo, se você tiver um problema com os recursos de segurança do ASP.NET, deverá usar o fórum de segurança do ASP.NET.

Colaboradores e revisores

  • Colaboradores e revisores externos: Brian Cowan; Jason Taylor, Security Innovation; Rudolph Araujo, Foundstone Professional Services

  • Colaboradores e revisores da Microsoft: Wade Mascia, Tom Christian, Adam Semel, Stefan Schackow

  • Equipe de teste: Larry Brader, Microsoft Corporation; Nadupalli Venkata Surya Sateesh, Sivanthapatham Shanmugasundaram, Infosys Technologies Ltd.

  • Equipe de edição: Nelly Delgado, Microsoft Corporation; Sharon Smith; Tina Burden McGrayne, TinaTech Inc.

  • Gerenciamento de versões: Sanjeev Garg, Microsoft Corporation

© 2009 Microsoft Corporation. Todos os direitos reservados. Termos de Uso  |  Marcas Comerciais  |  Política de Privacidade
Page view tracker