使用MVC和EF Code-First。问题在底部,请继续阅读......
我为应用程序创建了一个LocalDb数据库登录app_user。不希望应用程序使用admin(sa)帐户 - 显而易见的原因:)
数据库登录使其默认数据库指向MyDatabase。
我在MyDatabase中创建了一个数据库用户app_user。
将数据库用户添加到db_datareader和db_datawriter角色。应用程序需要读取和写入表。
当应用程序登录并访问数据库时,会出现以下错误:
数据库“master”中的CREATE DATABASE权限被拒绝。无法将文件'.... \ MyDatabase.mdf'作为数据库'MyDatabase'附加。
以下是我的设置......
Web.config文件
connectionString =“Data Source =(LocalDb)\ v11.0; AttachDbFilename = | DataDirectory | \ MyDatabase.mdf; Initial Catalog = MyDatabase; Integrated Security = False; User ID = app_user; Password = somepwd”providerName =“System.Data。 SqlClient“/>
应用程序上下文初始化器已禁用
static ApplicationDbContext()
{
// Disable initialization
Database.SetInitializer<ApplicationDbContext>(null);
}
我可以理解为什么需要创建数据库权限的唯一原因是,如果启用了初始化程序,EF期望这样做!只是一个理论!
解决方法:我可以通过在主数据库中为app_user登录创建数据库用户并授予其创建数据库权限来解决此错误。但这将是一个安全漏洞,不希望应用程序登录具有此类权限。
问题:为什么数据库用户需要“创建数据库”权限?
根据这个问题,它可能是与类名和数据库名不匹配的问题,这将导致EF尝试创建新数据库。
entity framework 4.1 code first CREATE DATABASE permission denied in database 'master'