在MVC 4应用中出现“CREATE DATABASE权限被拒绝在数据库'master'中”的错误。

4

在部署我的MVC 4应用程序后,我尝试注册用户,但出现以下错误:

在数据库'master'中拒绝了CREATE DATABASE权限。

连接字符串如下:

<add name="Market" providerName="System.Data.SqlClient" connectionString="Data Source=endine.arvixe.com; Initial Catalog=Market; Uid=mylogin; Password=mypass; MultipleActiveResultSets=true; " />

还有DbContext:

public class Market: DbContext
    {
        public Market()
        {
            Database.SetInitializer<Market>(new MarketInitializer());
        }
    }


public class MarketInitializer: DropCreateDatabaseIfModelChanges<Market>
    {
        protected override void Seed(Market context)
        {
            base.Seed(context);
        }
    }

我使用相同的 myloginmypass 在 SQL Management Studio 中访问数据库,使用脚本创建了 Market 数据库。但是,在网站上无法访问数据库。

我该如何找到原因?

2个回答

1
这个问题涉及到这段代码 DropCreateDatabaseIfModelChanges<Market>
public class MarketInitializer: DropCreateDatabaseIfModelChanges<Market>
    {
        protected override void Seed(Market context)
        {
            base.Seed(context);
        }
    }

模型已经发生了变化,因此它正在尝试删除数据库并重新创建它。


现在我已经从数据库中删除了表。我会尝试一下,然后在这里写下结果。 - user1664699
1
我从代码中删除了这行内容:Database.SetInitializer<Market>(new MarketInitializer()); 然后重新部署,重新创建了数据库,但仍然遇到了相同的错误。 - user1664699
是的,我有两个连接字符串,但只使用一个用户。我还从上下文中删除了Initializer。但现在,我收到“500 - 内部服务器错误”的错误提示。 - user1664699
SQL登录用户mylogin在服务器上有哪些权限?它是否具有SQL Server的高级权限,例如成为dbcreator角色的一部分。基本问题是,用户mylogin在托管数据库的SQL服务器上没有创建数据库权限。如果您有选项/能力提升mylogin用户访问权限以允许数据库创建,那么这应该让您摆脱当前的困境,但不能解决您的应用程序尝试创建新数据库的原因。 - Nathan Fisher
但是在托管中,我创建了“mylogin”并选择连接两个数据库,这就是为什么我可以使用“mylogin”在管理工作室中访问数据库并向数据库添加表的原因。 - user1664699
显示剩余8条评论

1
有时候这是因为您在本地SQL Server实例上没有sysadmin角色。我找到了一篇有用的文章,您可以从中下载脚本命令并安装它。您将被要求输入SQLEXPRESS名称或实例名称,只需输入“SQLEXPRESS”并按Enter即可。就这样。它将将您添加到本地服务器实例的sysadmin角色中。
从以下链接下载命令:http://archive.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=addselftosqlsysadmin&DownloadId=9198 如果对您无效,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接