首页 > 解决方案 > EF 有没有办法在没有查看任何数据库权限的情况下使用数据库?

问题描述

问题是我们的用户不能被授予查看任何数据库的权限,也不能创建数据库。因此,我们设置了一个帐户,即数据库的 db_owner 并创建了空白数据库来填充。在本地测试,以上仅在我们 GRANT 用户查看任何数据库时有效,因此不适用于我们的目标环境。我的假设是 EF 正在尝试确定数据库是否已经存在,但由于它看不到任何数据库,它总是会尝试创建一个。有什么办法吗?理想情况下 - 是否有一个设置可以告诉 EF DB 在那里并且不需要寻找它?

标签: sql-serverentity-framework

解决方案


这是 EF6 中的一个错误。该代码错误地假设 db_id('dbname') 在没有 VIEW ANY DATABASE 的情况下工作。仅当运行查询的登录名是数据库所有者时才有效。不仅仅是 DB_OWNER 固定数据库角色的成员。我已经报告了它,并提出了改进的建议。但我不确定它会得到修复。

作为一种解决方法,只需让应用程序用户成为真正的数据库所有者。这不会阻止系统管理员以 dbo 身份连接。例如

alter authorization on database::AppDatabase to Appuser

在将登录名设为所有者之前,您必须删除数据库用户。


推荐阅读