我需要在使用Entity Framework Code-First方法时拥有SQL Server db_ddladmin权限吗?这是否会存在安全问题?

8

我们有一个外部项目,使用C#和Entity Framework 6 Code First开发,配合SQL Server 2014。它有一个网站和一个wcf服务。

现在,为了部署该项目,承包商表示Web站点运行的IIS APPOOL用户需要具有db_datareader、db_datawriter和db_ddladmin的成员身份才能正常工作,确实如果没有授予这些权限,它是无法正常工作的。

我对此有一些问题,因为即使不是SQL专家,我也觉得部署不应该需要db_ddladmin权限,而承包商说这在EF Code First中是完全正常的,并且认为没有问题。在网上搜索也似乎表明这些权限可能会有问题(http://akawn.com/blog/2012/02/why-you-should-be-cautious-with-the-dbo_owner-role/),这也说明了EF框架Code First真的需要这些权限有点荒谬...

那么,我是否需要为EF Code First授予db_ddladmin权限?以及已部署的Web项目需要db_ddladmin的数据库访问权限是否有问题?

提前致谢!


部署 db_ddladmin 并不是问题,因为您可能需要管理员权限来安装 普通 桌面应用程序。当然,在创建数据库后应该撤销该角色(只需要 db_datareader 和最终可能需要的 db_datawriter)。当然,这更加棘手(特别是对于自动化部署),则您可以提供专门的脚本,这些脚本将在非 IIS 用户下运行。据我所知,EF 将在没有该角色的情况下工作,但是 DB 结构必须存在。 - Adriano Repetti
2
你只需要 db_ddladmin 权限来运行 Code First 迁移,以实际修改数据库。如果数据库已经是最新的,要么是因为迁移已经运行过了,要么是因为你已经关闭了迁移并手动保持数据库最新状态,那么只需要 db_datareaderdb_datawriter 权限即可。 - Ben Robinson
好的,非常感谢。我现在知道该怎么做了! - schmendrick
1个回答

6

这确实是一个可能的痛点。Entity Framework 假设您拥有migrationsdb_ddladmin 权限,但在任何其他阶段都不需要此权限。

有几种处理方法。您可以授予权限、运行迁移,然后删除权限;或者您可以导出 SQL 脚本并对其运行,如下所示:Update-Database -Script -SourceMigration:0(从开始到当前状态的脚本)。任何未来的迁移部署都需要您采取相同的步骤,从服务器的当前迁移值开始,或添加/删除权限。


2
您还可以在不同的用户下单独运行迁移,而不是在主应用程序下运行。 - Dan

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