EF Code-First“在数据库'主'中拒绝创建数据库权限。”错误
Posted
技术标签:
【中文标题】EF Code-First“在数据库\'主\'中拒绝创建数据库权限。”错误【英文标题】:EF Code-First "CREATE DATABASE permission denied in database 'master'." errorEF Code-First“在数据库'主'中拒绝创建数据库权限。”错误 【发布时间】:2015-02-13 03:53:01 【问题描述】:使用 MVC 和 EF 代码优先。问题在底部,请继续阅读...
我为应用程序创建了一个 LocalDb 数据库 login app_user。不希望应用程序使用管理员 (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 登录创建数据库用户并授予它创建数据库权限来解决此错误。但这将是一个安全漏洞,不希望应用程序以此类权限登录。
问题:为什么数据库用户需要创建数据库权限?
【问题讨论】:
不知道是不是动态附加数据库的过程有问题?也许尝试一个假设它已经附加的连接字符串。您还可以尝试使用 CreateDatabaseIfNotExists 的数据库初始化程序。 【参考方案1】:根据这个问题,可能是类名和数据库名不匹配的问题,会导致EF尝试新建数据库。
entity framework 4.1 code first CREATE DATABASE permission denied in database 'master'
【讨论】:
刚刚尝试过,即将connectionstring name重命名为与DbContext类相同的名称,但还是不行。以上是关于EF Code-First“在数据库'主'中拒绝创建数据库权限。”错误的主要内容,如果未能解决你的问题,请参考以下文章
20.翻译系列:Code-First中的数据库迁移技术EF 6 Code-First系列
15.翻译系列:EF 6中的级联删除EF 6 Code-First 系列