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_datareaderdb_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 系列

EF Code-First 学习之旅 Code First Conventions

EF Code-First 学习之旅 数据库初始化

EF Code-First 中的种子方法

20.2.翻译系列:EF 6中基于代码的数据库迁移技术EF 6 Code-First系列