作者:手机用户2502861125 | 来源:互联网 | 2022-12-10 07:57
我们已经开始使用SSDT来管理脚本部署。最初,我们使用Schema Compare并取消选中了我们不想部署的部分。现在,我们需要使用仅包含在“发布”功能中的“预部署”和“部署后”脚本,并且我们还尝试清理排除的部分。
在发布中添加了2个差异,但没有在“模式比较”中添加这些差异,即使设置与我可以设置的相近,我似乎也无法弄清。
首先是Publish脚本想要删除dacpac中不存在的表的统计信息,即使DropStatisticsNotInSource
将其设置为false。我能够根据SSDT / SqlPackage丢弃统计信息中的DeploymentFilterContributor答案来解决此问题。
第二个继续让我难过。大多数应用程序安全性都是通过授予角色来实现的,并且取决于环境,使各个系统帐户成为成员,但是在dev数据库中,也没有角色的用户(通常是管理员,但具有各种权限的实用程序)。我们在不同的环境中有不同的用户。我的长期目标是仅让用户担任角色,但我们还没有。同时,我们需要将用户排除在外。我从设置Exclude Users
,开始ExcludeLogins
,ExcludeRoleMembership
这是我们在“模式比较”中使用的功能,并且效果很好。但是,在“发布”脚本中,我们获得了REVOKE CONNECT
脚本(但不是DROP LOGIN
或DROP USER
)。
我已经阅读了使用SqlPackage.exe发布DACPAC时防止用户掉线,以及在SqlPackage.exe部署的dacpac中创建用户时导致登录失败SqlException(这看起来像是类似的脚本结果,目的不同,也没有答案)。我曾尝试使用AgileSqlClub.DeploymentFilterContributor有IgnoreType(Login)
,IgnoreType(User)
,IgnoreType(RoleMembership)
,以及IgnoreType(Permissions)
,IgnoreSecurity
。前3个无效。最后2个(我也尝试过等效的SSDT config选项)也删除GRANT
了我想针对数据库角色包含的脚本。
我觉得我应该能够执行此操作而无需创建自定义项DeploymentContributor
,也无需在部署后编写所有这些用户的脚本。我如何摆脱这些REVOKE CONNECT
电话?
另外,如果有人知道Visual Studio是否实际上在其路径中调用SqlPackage.exe或正在使用库,那么我将很感激该信息...我似乎无法使计算机上的5个SqlPackage.exe中的任何一个都能正常工作VS使用的内置.dacpac和.publish.xml文件。
我包含完整的发布配置文件以供参考:
AgileSqlClub.DeploymentFilterContributor
SqlPackageFilter0=IgnoreType(Statistics);SqlPackageFilter1=IgnoreSecurity
True
BRM
BRM.sql
Data Source=mydb;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True
True
False
False
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
False
False
False
True
1
False
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
mscrm
sysdb
VS2015 Update 3和SSDT 14.0.61712.050(我认为是最新的)。