C# 实体框架代码优先方法是否需要SQL Server db_ddladmin权限?这是安全问题吗?

C# 实体框架代码优先方法是否需要SQL Server db_ddladmin权限?这是安全问题吗?,c#,asp.net,sql-server,entity-framework,rights-management,C#,Asp.net,Sql Server,Entity Framework,Rights Management,我们有一个外部项目,首先使用C#&Entity Framework 6代码与SQL Server 2014一起开发。 它有一个网站和一个wcf服务 现在,对于部署,项目承包商表示,运行网站的IIS APPOOL用户将需要db_datareader、db_datawriter和db_ddladmin的成员资格,才能使其正常工作,事实上,在没有授予这些权利的情况下,它无法正常工作 我对此有一些问题,因为如果不是SQL专家,我觉得部署不需要db_ddladmin权限,而承包商说这在EF代码中是完全正常

我们有一个外部项目,首先使用C#&Entity Framework 6代码与SQL Server 2014一起开发。 它有一个网站和一个wcf服务

现在,对于部署,项目承包商表示,运行网站的IIS APPOOL用户将需要db_datareader、db_datawriter和db_ddladmin的成员资格,才能使其正常工作,事实上,在没有授予这些权利的情况下,它无法正常工作

我对此有一些问题,因为如果不是SQL专家,我觉得部署不需要db_ddladmin权限,而承包商说这在EF代码中是完全正常的,并且没有发现问题。在网上搜索似乎也揭示了这些权利可能有问题(),这也向我表明,EF框架代码首先真的需要这些权利是有点疯狂的

那么我是否需要先为EF代码使用db_ddladmin? 部署的web项目需要db_ddladmin的数据库访问权限,这是否有问题


提前谢谢

这确实是一个可能的痛点。实体框架假定您拥有
db_ddladmin
迁移权限。在任何其他阶段都不需要此许可


有几种方法可以解决这个问题。您可以授予权限,运行迁移,然后删除权限,也可以导出SQL脚本并对服务器运行它,如:
updatedatabase-script-SourceMigration:0
(脚本从开始到当前状态)。任何未来的迁移部署都需要您采取相同的步骤,从服务器的当前迁移值开始,或者添加/删除权限

部署
db_ddladmin
不是问题,因为安装普通桌面应用程序可能需要管理员权限。当然,该角色应该在创建数据库后撤销(其中只需要
DB\u datareader
并最终需要
DB\u datawriter
)。当然,这更棘手(特别是对于自动部署),那么您可以提供不在IIS用户下运行的ah hoc脚本。AFAIK EF将在没有该角色的情况下工作,但数据库结构必须到位。您只需
DB_ddladmin
即可运行代码优先迁移,从而实际修改数据库。如果数据库是最新的,或者是因为迁移已经运行,或者您已经关闭了迁移,并手动使数据库保持最新,则只需要
DB_datareader
DB_datawriter
即可。好的,非常感谢。我现在知道该怎么办了!您还可以在不同的用户下分别从主应用程序运行迁移。