Sql server 使用Azure管道中的SqlPackage部署DACPAC将忽略参数并删除用户

Sql server 使用Azure管道中的SqlPackage部署DACPAC将忽略参数并删除用户,sql-server,azure-devops,azure-pipelines,dacpac,sqlpackage,Sql Server,Azure Devops,Azure Pipelines,Dacpac,Sqlpackage,我在Azure中有一个发布管道,在那里我传递了一个用VStudio创建的.dacpac工件,该工件将部署在on-prem Sql Server 2016中。它工作得很好,但现在我想通过.dacpac在我的服务器上删除表、视图、函数和存储过程。所以我在我的VS项目中这样做了,然后尝试使用选项/p:dropObjectsNotSource=True以及/p:DoNotDropObjectType和甚至/p:ExcludeObjectType进行部署,以排除我不想删除的内容 但不管这些过滤器如何,一旦

我在Azure中有一个发布管道,在那里我传递了一个用VStudio创建的.dacpac工件,该工件将部署在on-prem Sql Server 2016中。它工作得很好,但现在我想通过.dacpac在我的服务器上删除表、视图、函数和存储过程。所以我在我的VS项目中这样做了,然后尝试使用选项/p:dropObjectsNotSource=True以及/p:DoNotDropObjectType和甚至/p:ExcludeObjectType进行部署,以排除我不想删除的内容

但不管这些过滤器如何,一旦作业开始,表将按预期删除,但随后会删除DB用户。它还删除了我用于安装Azure代理的登录名的db_owner映射,然后尝试删除该登录名,该登录名与部署期间配置为进行身份验证的用户相同。然后它会失败,并出现以下错误:

错误SQL72014:.Net SqlClient数据提供程序:Msg 15151,级别16,状态1,第1行无法删除用户“\”,因为它不存在或您没有权限

这是显而易见的,因为用户对数据库的权限刚刚被删除。有什么建议可以避免这种情况,或者我唯一的选择是在完成后重新创建用户/权限?还是不完全使用该标志并通过部署后脚本执行所有拖放对象操作

作为参考,在我的发布任务上设置的附加参数是:它看起来很奇怪,但无法仅指定要删除的对象:


/p:DropObjectsNotSource=True/p:BlockOnPossibleDataLoss=false/p:DoNotDropObjectType=Aggregates、ApplicationRoles、Assembly、AsymmetricKeys、BrokerPriorities、Certificates、ColumnEncryptionKeys、ColumnMasterKeys、Contract、DatabaseRoles、DatabaseTriggers、Default、ExtendedProperties、ExternalDataSources、ExternalFileFormats、ExternalTables、FileGroup、,文件表、FullTextCatalogs、FullTextStopList、MessageType、PartitionFunctions、PartitionScheme、权限、队列、RemoteServiceBindings、RoleMembership、规则、SearchPropertyList、SecurityPolicy、序列、服务、签名、SymmetricKeys、同义词、UserDefinedDataTypes、UserDefinedTableTypes、CLUserDefinedTypes、Users、XmlSchemaCollections、Audits、,凭据、加密提供程序、DatabaseAuditSpecifications、DatabaseScopedCredentials、端点、错误消息、事件通知、事件会话、LinkedServerLogins、LinkedServer、登录、路由、ServerAuditSpecifications、ServerRoleMembership、ServerRoles、ServerTriggers/p:ExcludeObjectType=聚合、应用程序角色、程序集、不对称密钥,BrokerPriorities、证书、ColumnEncryptionKey、ColumnMasterKey、契约、数据库角色、数据库触发器、默认值、ExtendedProperties、ExternalDataSources、ExternalFileFormats、ExternalTables、文件组、FileTables、FullTextCatalogs、FullTextStopList、MessageType、PartitionFunctions、PartitionSchemes、权限、队列、RemoteServiceBindings、,RoleMembership、规则、SearchPropertyList、安全策略、序列、服务、签名、SymmetricKeys、同义词、用户定义的数据类型、用户定义的表格类型、ClrUserDefinedTypes、用户、XmlSchemaCollections、审核、凭据、加密提供程序、DatabaseAuditSpecification、DatabaseScopedCredentials、端点、错误消息、事件通知、,EventSessions、LinkedServerLogin、LinkedServer、Login、Routes、ServerAuditSpecifications、ServerRoleMembership、ServerRoles、ServerTriggers因此,我回答自己:在我最初的尝试中有两件事出错了:

当您想在一个参数中使用多个值时,必须用分号分隔它们;而不是冒号。 如果要排除多个对象,参数名称必须为复数:/p:ExcludeObjectTypes 因此,通过以下几点,我实现了我想要的:


/p:ExcludeObjectTypes=用户;登录;角色记忆;权限;资格证书DatabaseScopedRedentials

因此,我对自己说:在我最初的尝试中,有两件事出错了:

当您想在一个参数中使用多个值时,必须用分号分隔它们;而不是冒号。 如果要排除多个对象,参数名称必须为复数:/p:ExcludeObjectTypes 因此,通过以下几点,我实现了我想要的:

/p:ExcludeObjectTypes=用户;登录;角色记忆;权限;资格证书DatabaseScopedCredentials