MVC 3 - 发布到服务器后 - 数据库'master'中的CREATE DATABASE权限被拒绝

时间:2011-08-12 04:46:39

标签: sql-server-2008 asp.net-mvc-3 entity-framework-4 ef-code-first

设置

MVC 3 EF 4.1 Code First - Windows 7 Pro 64 Dev机器,主机独立Win 7 Pro。

我从一个SQLCE4.0数据库开始,一切正常(数据库初始化程序创建表,填充等等)。

一旦我按照自己的意愿完成了所有工作,我编写了自己的SqlCe数据库,创建了一个真正的SQL 2008数据库,打开了正确的端口并启用了TCP连接。

问题
如果我将连接字符串更改为指向我的Intranet服务器\实例名称,并且我专门为此应用程序创建了一个用户,它可以在我的开发机器上完美运行。

如果我将应用程序发布到服务器(Web服务器和sql服务器是相同的),我尝试登录到网站(也就是访问数据库),然后我得到:

在数据库“master”中拒绝CREATE DATABASE权限。

我注释掉了DBInitializer设置,因此在db命中时不应创建任何内容。这些表已经存在。

如果我做Database.SetInitializer(null);然后我得到一个不同的登录错误:

我不记得确切,但它是影响 LOGIN FAILED for IIS APPPOOL \ ApplicationPoolIdentity

所以我将身份更改为NETWORK SERVICE,甚至尝试了LOCAL SERVICE,两者都给出了相同的登录失败错误。

我尝试关注this帖子,他们说添加名为“IIS APPPOOL \ MyApplicationName”的SQL用户。 SQL不会让我这样做,因为它有无效的字符......去图。

为什么它在从我的开发机器访问数据库的网络上完美运行,但是当我发布到托管sql和网站的SAME机器时,我得到权限被拒绝或登录失败错误?我在网上搜索并尝试了不同的东西。

编辑:这是我的连接字符串:

<add name="AntripContext" connectionString="Data Source=|DataDirectory|AntripWeb.sdf" providerName="System.Data.SqlServerCe.4.0" />
    <!--<add name="AntripSQL" connectionString="Data Source=.\sqlexpress;Initial Catalog=Antrip;User Id=myuser;Password=mypassword;" providerName="System.Data.SqlClient" />-->
    <add name="AntripWebEntities" connectionString="metadata=res://*/DAL.AntripEntities.csdl|res://*/DAL.AntripEntities.ssdl|res://*/DAL.AntripEntities.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\AntripWeb.sdf&quot;" providerName="System.Data.EntityClient" />
    <!--<add name="AntripWebEntities" connectionString="metadata=res://*/DAL.AntripEntities.csdl|res://*/DAL.AntripEntities.ssdl|res://*/DAL.AntripEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\sqlexpress;Initial Catalog=Antrip;User Id=myuser;Password=mypassword;&quot;" providerName="System.Data.EntityClient" />-->

注意:注释掉的连接字符串是那些使用sql 2008数据库(破坏我发布的应用程序)的连接字符串。

1 个答案:

答案 0 :(得分:1)

听起来好像你的连接字符串是Integrated Security = true所以你是以你指定的用户身份连接到SQL,而不是你正在使用的认为的SQL用户?

但要注意,它仍在尝试创建一个数据库:你需要交换IDatabaseInitializer - 我想它会寻找一个名为与实体相同的数据库,要小心!