Inquiridor
User Instance = True

Pergunta
-
Caros Srs.
Estive vivenciando um erro em minha aplicação asp.net, e tenho quase certeza de ter achado o motivo do problema, apesar de não ter solucionado por completo o ocorrido.
Descrição do cenário:
Uma aplicação web ASP.NET 2.0 desenvolvida com o Visual Studio 2005 Professional e que utiliza do serviço de membership embutida já no ASP.NET 2.0.
Esta aplicação está sendo executada no sevidor IIS 5.0 local.
Ilustrando o Erro:
Server Error in '/BalloonShop' Application.
Não é possível abrir o banco de dados padrão do usuário. Falha de logon.
Falha de logon do usuário 'PETRUSMOV2\ASPNET'.Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Não é possível abrir o banco de dados padrão do usuário. Falha de logon.
Falha de logon do usuário 'PETRUSMOV2\ASPNET'.Este erro sempre ocorrera quando eu tentava fazer o login na minha aplicação, ou seja, quando a minha aplicação estava tentando acessar o banco de dados aspnetdb.mdf
Vamos agora analisar a minha connection string:
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|ASPNETDB.mdf;User Instance=true"
Repare que eu estou usando a instrução: User Instance=true
O que acontece é que para que uma aplicação qualquer possa usufruir de um banco de dados em um servidor sql, ela teria que primeiramente se autenticar no servidor e em seguida, ter a autorização de acessar o banco de dados da qual ela (aplicação) necessita. Isso, de certa forma, impossibilita, principalmente os desenvolvedores de aplicações ASP.NET de simplesmente criar um arquivo de banco de dados local e ao publicar a aplicação apenas mover este arquivo para o servidor de produção.
Com a instrução User Instance=true ao se usar a connection string para acessar o banco de dados, o SQL Server Express cria uma nova e privada instancia de seu servidor, apenas para o acesso do banco de dados contido na connection string. Este acesso a essa nova “instancia virtual” do servidor é dada com os privilégios de sysadmin, porém com várias limitações do tipo: apenas um usuário por vez pode acessar essa instância e outras descritas na referência logo abaixo.
A questão é que para uma nova instância do servidor funcionar, mesmo que ela seja em run-time, é necessário que ela possua os bancos de dados Master e MSDB, e esses são atachados, obviamente em run-time, concomitantemente com a criação da nova instância, porém a origem de seus arquivos: [master.mdf] e [msdb.mdf] são diferentes dos arquivos atachados na instância principal do sql server express.
Ou seja, de nada adianta dar permissões para usuários nos bancos de dados Máster e MSDB, na instancia principal. Pois os arquivos usados serão diferentes dos arquivos da instancia principal.
Referência:
http://msdn2.microsoft.com/en-us/library/ms254504.aspx
A minha pergunta é:
Como posso dar permissão de autenticação e depois de acesso a um usuário do tipo ‘petrusmov2\aspnet’, que é um usuário do windows a um banco de dados que será atachado em run-time em uma instância do servidor que também será criada em run-time?
Que eu tenha entendido, o problema ocorrido é simplesmente este, ou seja, o login ‘petrusmov2\aspnet’ não tem acesso ao banco de dados Master na instância criada em tempo de execução.
Todas as Respostas
-
-
Ok Marcelo, o meu usuário do IIS é o petrusmov2\aspnet
Use Master
go
sp_helpuser 'PETRUSMOV2\aspnet'
returns:
PETRUSMOV2\ASPNET public PETRUSMOV2\ASPNET master dbo 6
Mas com o uso da instrução User Instance = True, tanto a instância do sql server quanto o banco de dados master atachado são diferentes, pois são criados em tempo de execução.
Será que não é esse o problema, ou seja, o banco de dados Master, criado em tempo de execução não dá a permissão de acesso ao usuário 'petrusmov2\aspnet'?
-
Marcelo;
Só para eu me certificar, como eu pego o usuário do IIS?
por um acaso é clicando com o botão direito no nome da pasta virtual onde meu site está hospedado
depois eu clico com o botão direito, vou em propriedades
aba segurança de pasta
controle de acesso anonimo e autenticação...
botão editar...
só gostaria de confirmar se eu estou pegando o usuário no lugar correto.