SMM*_*SMM 5 sqlpackage sql-server-data-tools visual-studio-2015
我们已经开始使用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文件。
我包含完整的发布配置文件以供参考:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AdditionalDeploymentContributors>AgileSqlClub.DeploymentFilterContributor</AdditionalDeploymentContributors>
<!--AdditionalDeploymentContributorArguments>SqlPackageFilter0=IgnoreType(Statistics);SqlPackageFilter1=IgnoreType(Login);SqlPackageFilter2=IgnoreType(User);SqlPackageFilter3=IgnoreType(RoleMembership);SqlPackageFilter4=IgnoreSchema(SEQUENCES)</AdditionalDeploymentContributorArguments-->
<!--AdditionalDeploymentContributorArguments>SqlPackageFilter4=IgnoreSchema(SEQUENCES)</AdditionalDeploymentContributorArguments-->
<AdditionalDeploymentContributorArguments>SqlPackageFilter0=IgnoreType(Statistics);SqlPackageFilter1=IgnoreSecurity</AdditionalDeploymentContributorArguments>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>BRM</TargetDatabaseName>
<DeployScriptFileName>BRM.sql</DeployScriptFileName>
<TargetConnectionString>Data Source=mydb;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True</TargetConnectionString>
<BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
<ExcludeAggregates>False</ExcludeAggregates>
<ExcludeApplicationRoles>False</ExcludeApplicationRoles>
<ExcludeAssemblies>True</ExcludeAssemblies>
<ExcludeAsymmetricKeys>True</ExcludeAsymmetricKeys>
<ExcludeBrokerPriorities>True</ExcludeBrokerPriorities>
<ExcludeCertificates>True</ExcludeCertificates>
<ExcludeExternalDataSources>True</ExcludeExternalDataSources>
<ExcludeExternalFileFormats>True</ExcludeExternalFileFormats>
<ExcludeExternalTables>True</ExcludeExternalTables>
<ExcludeFilegroups>True</ExcludeFilegroups>
<ExcludeFileTables>True</ExcludeFileTables>
<ExcludeFullTextCatalogs>True</ExcludeFullTextCatalogs>
<ExcludeFullTextStoplists>True</ExcludeFullTextStoplists>
<ExcludePartitionFunctions>True</ExcludePartitionFunctions>
<ExcludePartitionSchemes>True</ExcludePartitionSchemes>
<ExcludeQueues>True</ExcludeQueues>
<ExcludeRemoteServiceBindings>True</ExcludeRemoteServiceBindings>
<IgnoreRoleMembership>True</IgnoreRoleMembership>
<ExcludeRules>True</ExcludeRules>
<ExcludeSecurityPolicies>True</ExcludeSecurityPolicies>
<ExcludeServices>True</ExcludeServices>
<ExcludeSignatures>True</ExcludeSignatures>
<ExcludeUserDefinedDataTypes>True</ExcludeUserDefinedDataTypes>
<ExcludeUserDefinedTableTypes>True</ExcludeUserDefinedTableTypes>
<ExcludeUsers>True</ExcludeUsers>
<ExcludeXmlSchemaCollections>True</ExcludeXmlSchemaCollections>
<DropObjectsNotInSource>True</DropObjectsNotInSource>
<DropPermissionsNotInSource>False</DropPermissionsNotInSource>
<DropRoleMembersNotInSource>False</DropRoleMembersNotInSource>
<DisableAndReenableDdlTriggers>False</DisableAndReenableDdlTriggers>
<IncludeTransactionalScripts>True</IncludeTransactionalScripts>
<ProfileVersionNumber>1</ProfileVersionNumber>
<DropStatisticsNotInSource>False</DropStatisticsNotInSource>
<ExcludeLogins>True</ExcludeLogins>
<ExcludeAudits>True</ExcludeAudits>
<ExcludeClrUserDefinedTypes>True</ExcludeClrUserDefinedTypes>
<ExcludeCredentials>True</ExcludeCredentials>
<ExcludeCryptographicProviders>True</ExcludeCryptographicProviders>
<ExcludeDatabaseScopedCredentials>True</ExcludeDatabaseScopedCredentials>
<ExcludeDatabaseAuditSpecifications>True</ExcludeDatabaseAuditSpecifications>
<ExcludeEndpoints>True</ExcludeEndpoints>
<ExcludeErrorMessages>True</ExcludeErrorMessages>
<ExcludeEventSessions>True</ExcludeEventSessions>
<ExcludeLinkedServerLogins>True</ExcludeLinkedServerLogins>
<ExcludeLinkedServers>True</ExcludeLinkedServers>
<ExcludeRoutes>True</ExcludeRoutes>
<ExcludeSearchPropertyLists>True</ExcludeSearchPropertyLists>
<ExcludeServerAuditSpecifications>True</ExcludeServerAuditSpecifications>
<ExcludeServerRoleMembership>True</ExcludeServerRoleMembership>
<ExcludeServerRoles>True</ExcludeServerRoles>
<ExcludeServerTriggers>True</ExcludeServerTriggers>
<DoNotDropLogins>True</DoNotDropLogins>
<DoNotDropUsers>True</DoNotDropUsers>
<DoNotDropRoleMembership>True</DoNotDropRoleMembership>
<DoNotDropServerRoleMembership>True</DoNotDropServerRoleMembership>
</PropertyGroup>
<ItemGroup>
<SqlCmdVariable Include="mscrm">
<Value>mscrm</Value>
</SqlCmdVariable>
<SqlCmdVariable Include="sysdb">
<Value>sysdb</Value>
</SqlCmdVariable>
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
VS2015 Update 3和SSDT 14.0.61712.050(我认为是最新的)。
所以,作为后续,我还没有令人满意地解决这个问题,并且已经离开它一段时间了。我什至不确定这是否仍然是最新版本中的问题。然而,对于仍在研究这个问题的人来说,这是我开始遵循的路径,结果好坏参半。我将把它留给其他人来继续。
我决定尝试直接调用 sqlpackage.exe,事实证明这似乎解决了我记得的这个特定问题,但后来我遇到了其他奇怪的情况。一些问题涉及哪个版本的 sqlpackage 与哪个 SQL 服务器一起使用。无论如何,您可以自己尝试一下,如果您在此处查看回复或发布更完整的答案。
"<path to sqlpackage>\sqlpackage.exe" /a:script /pr:"MyDB.Publish.xml" /sf:"MyDB.dacpac" /dsp:"c:\temp\sqlpackage test\deploy.sql" /p:DropStatisticsNotInSource=False再次强调,我按原样提供此内容,但如果您发现某些内容运行良好,请随意编辑答案或发布您自己的更完整的答案。
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |