ASP MVC 3新手问题:在数据库'master'中CREATE DATABASE权限被拒绝。

4
我是asp mvc 3的新手。我已经完成了一些教程,现在想通过尝试构建网站来继续学习。
在所有的教程中,你需要连接到一个SQL CE或SQL Express数据库。但我想要我的网站在SQL Server上建立一个数据库。
我在我的网络服务器上创建了一个名为MyDB的数据库。然后我在我的web config文件中设置了连接字符串,如下所示:
add name="ApplicationServices"
    connectionString="Data Source=Server\ServerInstance;Initial Catalog=MyDB;Integrated Security=True"
    providerName="System.Data.SqlClient"

我创建了模型和一个脚手架控制器。

我创建了一个简单的 DataBaseContext,如下所示:

Imports System.Data.Entity

Public Class DatabaseContext
    Inherits DbContext

    Public Property Employee As DbSet(Of Employee)
    Public Property AnnualLeave As DbSet(Of AnnualLeave)

End Class

但是当我在脚手架控制器中碰到以下行时,我会得到错误提示:
 Function Index() As ViewResult
    Return View(db.Employee.ToList()) //CREATE DATABASE permission denied in database 'master'`.
 End Function
  1. 我应该通过更改MyDB数据库的权限来解决这个问题吗?这是SQL服务器端的权限问题吗?我很困惑为什么我会因为数据库已经存在而收到创建数据库错误。
  2. 我是否因为已经创建了数据库而收到此错误?脚手架是否想以某种方式创建数据库?

看起来它正在尝试通过错误消息创建一个新的数据库。我猜测您正在使用EF Code First与您的项目,并使用其迁移功能构建您的数据库。检查EF上下文的设置,确保它正在使用您的连接字符串。 - swannee
@swannee 感谢你的帮助。我在哪里可以检查 EF 上下文的设置,确保它使用你的连接字符串? - bernie2436
尝试查看这篇文章:https://dev59.com/zGw05IYBdhLWcg3w0VAO - swannee
@swannee 再次感谢。在那篇帖子之后,我将连接字符串的名称更改为与数据上下文的名称相匹配。这给我带来了一个新的错误信息...有进展了!如果你想写一个回答,概括一下这个问题(确保连接字符串的名称与数据上下文匹配),我会接受的。 - bernie2436
希望有所帮助!我添加了一个回答来反映这次对话。 - swannee
4个回答

4
听起来它试图通过错误消息创建一个新的数据库。我猜测你正在使用EF Code First和它的迁移功能来构建你的数据库。检查EF上下文的设置,确保它使用你的连接字符串。
连接字符串或其名称可以传递给DbContext的构造函数。如果你使用默认构造函数,它会搜索与你派生的上下文类名相同的连接字符串。基本上,确保你的连接字符串与你的派生dbcontext类名相同,它应该能找到它。 请参阅此帖子获取更多信息

你对这个有什么想法吗?这是我的下一个错误:https://dev59.com/QmfWa4cB1Zd3GeqPezv3 - bernie2436

3

1. 你需要将IIS应用程序池身份设置为ASP.NET集成模式。

2. 为IIS APPPOOL\ASP.NET在SQL Server中添加一个登录账户。

3. 在SQL Server中,将IIS APP POOL登录账户设置为具有dbcreator角色。


我不想让它创建数据库。我是根据现有数据库创建模型并发布到服务器上,但是出现这个错误。我甚至没有使用任何初始化器。 - Piotr Kula
这是唯一对我有效的解决方案。但您应该在答案中准确无误。您需要添加的登录名为 IIS APPPOOL{您站点的应用程序池名称}。 - Ronen Festinger

0

使用 master; 执行 sp_addsrvrolemember @loginame = N'YourAppUserLogin', @rolename = N'dbcreator';


0

<add name="Default" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=test2;user id=sa;password=123456" 
providerName="System.Data.SqlClient" />

请在您的应用程序中使用此连接字符串。

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