Instalação padrão do Membership, Roles e Profile

by Israel Aece 27. February 2008 15:18

As funcionalidades Membership, Roles e Profile do ASP.NET 2.0 vem por padrão habilitadas. A questão é que essa configuração padrão demanda ter instalado na máquina onde corre a aplicação (geralmente a máquina do desenvolvedor), o SQL Server Express.

Em uma aplicação recém criada não haverá nenhuma configuração no arquivo Web.Config. Se analisarmos algumas seções que estão presentes do arquivo machine.config, temos:

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

<membership>
    <providers>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" .... />
    </providers>
</membership>

Com isso, quando iniciamos o ASP.NET Configuration, ele irá tentar acessar (ou criar) esta base de dados. Se não tiver o SQL Server Express instalado, esse processo resultará em um erro. Para resolver, voce tem duas alternativas:

  1. Instalar o SQL Server Express.
  2. Configurar para um servidor SQL Server existente. Se optar por essa alternativa, voce deve configurar o seu arquivo Web.Config da seguinte forma:

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <clear/>
    <add
      name="SqlConnectionString"
      connectionString="Data Source=local;Initial Catalog=BaseDeDados;Integrated Security=True;"/>
  </connectionStrings>
  <system.web>
    <membership defaultProvider="SqlMembershipProvider">
      <providers>
        <clear/>
        <add
          name="SqlMembershipProvider"
          type="System.Web.Security.SqlMembershipProvider"
          connectionStringName="SqlConnectionString"
          ..... />
      </providers>
    </membership>
  </system.web>
</configuration>

É importante notar que o elemento <clear /> remove a conexão e o provider do membership que são configurados por padrão. Além dessa configuração prévia, voce precisará também criar os objetos (tabelas, stored procedures e views) necessários para que essas funcionalidades trabalhem. Para isso, voce utilizará o utilitário aspnet_regsql.exe e pode encontrar maiores informações aqui.

Tags: ,

ASP.NET | Security

Comments

6/29/2009 3:07:26 AM #

willian

Olá Israel,

vou colocar minhas configurações do meu web.config

<connectionStrings>
   <clear/>
  <add name="instiadConnectionString" connectionString="Data Source=WHE-LAPTOP\SQLEXPRESS;Initial Catalog=instiad;Integrated Security=true"
   providerName="System.Data.SqlClient" />
</connectionStrings>


<roleManager enabled="true" defaultProvider="RoleManagerInstiad">
       <providers>
          <add connectionStringName="instiadConnectionString"
             name="RoleManagerInstiad" type="System.Web.Security.SqlRoleProvider" />
       </providers>
    </roleManager>


<membership defaultProvider="InstiadCustomMemberShipProvider"   >
      <providers>
        <clear/>
        <add
          name="InstiadCustomMemberShipProvider"
          minRequiredPasswordLength="2"
          minRequiredNonalphanumericCharacters="0"
          type="System.Web.Security.SqlMembershipProviderSystem, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
          connectionStringName="instiadConnectionString"
          applicationName="instiad"
          passwordFormat="Hashed"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true"
          writeExceptionsToEventLog="true"

          />
      </providers>
    </membership>

Ao fazer o login, ele acusa erro em membership no argumento type="System.Web.Security.SqlMembershipProviderSystem, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

Você saberia o por que desse erro? será que é necessário criar um custom do membership?

abraços

willian Brazil

6/29/2009 7:48:43 AM #

IsraelAece

Boas,

O correto é SqlMembershipProvider e não SqlMembershipProviderSystem.

IsraelAece Brazil

6/30/2009 2:35:51 AM #

willian

Oi Israel, obrigado por responder.

alterei corretamente como voce mencionou:

<membership defaultProvider="InstiadCustomMemberShipProvider"   >
      <providers>
        <clear/>
        <add
          name="InstiadCustomMemberShipProvider"
          minRequiredPasswordLength="2"
          minRequiredNonalphanumericCharacters="0"
          type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
          connectionStringName="instiadConnectionString"
          applicationName="instiad"
          passwordFormat="Hashed"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true"
          writeExceptionsToEventLog="true"

          />
      </providers>
    </membership>

E mesmo assim, ele esta acusando erro nessa linha...

Consegui corrigir o erro alterando o machine.config adicionando a minha connection string:

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>

   <add name="instiadConnectionString" connectionString="Data Source=WHE-LAPTOP\SQLEXPRESS;Initial Catalog=instiad;Integrated Security=true"
   providerName="System.Data.SqlClient" />


  </connectionStrings>

parece que a minha aplicaçào web não está enchergando a minha connection string do web.config. Mas na parte de codificação em C# eu consigo conversar com o banco sem nenhum problema....

Será que não tem como corrigir esse problema?

Brigadão Israel

willian Brazil

6/30/2009 7:47:54 AM #

IsraelAece

Boas Willian,

A connectionstring você deve ser adicionada no seu arquivo Web.config e não no machine.config.

Depois disso, é só referenciar o nome da conexão no atributo connectionStringName do membership, assim como você já vez. Só isso já é o suficiente.

IsraelAece Brazil

6/30/2009 11:27:41 AM #

willian

Oi Israel, obrigado por estar me ajudando.

Então, a connection string está adicionada no meu web.config, e ele ainda acusa esse erro... abaixo mostro o erro que ocorre ao acessar o asp.net web application Administration:

There is a problem with your selected data store. This can be caused by an invalid server name or credentials, or by insufficient permission. It can also be caused by the role manager feature not being enabled. Click the button below to be redirected to a page where you can choose a new data store.

The following message may help in diagnosing the problem: Attribute not recognized 'writeExceptionsToEventLog' (C:\Documents and Settings\willian\Desktop\instiad\web.config line 74)

O nome do servidor está correto, mas sobre a permissão eu não sei aonde posso verificar isso, estou usando o sql server 2005 e adicionei a permissão de asp.net na base de dados seguindo esse link: social.msdn.microsoft.com/.../1f91cde9-d63f-4e92-9b45-c8c4d747ae23 pela resposta do usuário HackroGenius.

O engraçado é que se eu retirar o membership do web.config, ele gera os aspnet.mdf na pasta appdata, e usa essa base de dados para gerenciar users. Mas as roles ele utiliza a base de dados do sqlserver 2005, estranho isso, por que a connection string é a mesma...

Muito obrigado Israel pela ajuda e espero não estar te incomodando.

abraços

willian Brazil

6/30/2009 6:17:26 PM #

IsraelAece

Boas,

Dá um <clear /> nas connectionStrings do seu Web.Config, e depois disso deixa somente a connectionString para a sua DB.

IsraelAece Brazil

6/30/2009 7:57:07 PM #

willian

Oi Israel,

Consegui arrumar, o que eu fiz foi comentar as memberships do machine.config. Depois disso a minha aplicação voltou a funcionar.

Achei estranho isso, pois não foi necessário comentar as connections strings e as roles machine.config.

Será que tem algo de errado na minha instalação?

Muito obrigado pela ajuda Israel

abraços

willian Brazil

7/1/2009 7:55:48 AM #

IsraelAece

Boas,

Acredito que não. Acho que há algum detalhe que está esquecendo.

IsraelAece Brazil

7/21/2009 2:53:30 PM #

willian

Fala Israel,

Tive que implantar o sistema agora, e voltou a dar o erro.
E o sistema voltou a pegar as configurações do machine.config e ignorando o meu web.config...

Adicionei o <clear/> e mesmo assim ele continou a ignorar, por desespero adicionei mais de um <clear/> com 5 no total, e funcionou!!!!

Pode ser um bug isto? Ou um erro na minha configuração?

Valeu pelas dicas e abraços

willian Brazil

7/21/2009 10:25:07 PM #

IsraelAece

Boas Willian,

Realmente não sei te dizer. Como disse anteriormente, me parece que há algum detalhe pequeno que não está se atentando, que está fazendo isso não funcionar.

IsraelAece Brazil

7/31/2009 6:55:50 PM #

PACU

Oi Israel.
To com um problema,
Estou criando un site com conexão a base de dados SQL server, a base de dados esta no meu pc, e esta pagina e linguagem, ASP, o mew problema e a conexão com a base de dados, não estou conseguindo,
agradeceria uma mãosinha.
PACU,

PACU Brazil

8/2/2009 9:39:18 PM #

IsraelAece

Boas PACU,

Você se refere à ASP clássico? Se sim, acho que não posso te ajudar, já que não conheço esta versão.

IsraelAece Brazil

12/23/2009 6:34:33 PM #

Marcus

Olá estou com o um problema com o membership que eh o seguindo localmente o membership funciona perfeitamente (tanto com o banco de dados localmente como naum)

Mas quando dou um publish no no sistema apesar de a comunicação do banco de dados estar funcionando perfeitamente não consigo acessar os dados do membership (logar, criar usuario etc). Um fato estranho tbm eh que o sistema do aspnet para logar fikou em ingles.

Alguem tem alguma solução ?

Obrigado

Marcus Brazil

12/28/2009 5:49:47 AM #

IsraelAece

Boas Marcus,

Se a comunicação com a DB está OK, já tentou verificar o atributo ApplicationName: weblogs.asp.net/.../...ip-and-other-Providers.aspx ?

IsraelAece Brazil

12/28/2009 9:50:33 AM #

Marcus

Era esse mesmo o problema.

Muito obrigado pela ajuda !

Marcus Brazil

Comments are closed

Powered by BlogEngine.NET 1.5.0.0
Theme by Mads Kristensen

Sobre

Meu nome é Israel Aece e sou especialista em tecnologias de desenvolvimento Microsoft, atuando como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. [ Mais ]

Twitter

Host