sql-server - 使用 Azure Pipeline 中的 SqlPackage 部署 DACPAC 忽略参数并删除用户

标签 sql-server azure-devops azure-pipelines dacpac sqlpackage

我在 Azure 中有一个发布管道,我在其中传递一个 .dacpac 工件(使用 VStudio 创建)以部署在本地 Sql Server 2016 中。它运行良好,但现在我想删除表、 View 、函数和通过 .dacpac 在我的服务器上存储过程。所以我在我的 VS 项目中这样做了,然后尝试使用选项 /p:DropObjectsNotInSource=True 进行部署。连同 /p:DoNotDropObjectType甚至/p:ExcludeObjectType排除我不想丢弃的东西。

但是不管这些过滤器如何,一旦作业开始,表就会被删除(如预期的那样),但随后它会删除数据库用户。它还会删除我用于安装 Azure 代理的登录名的 db_owner 映射,然后尝试删除该登录名(与配置为在部署期间进行身份验证的用户相同)。然后失败并出现此错误:

Error SQL72014: .Net SqlClient Data Provider: Msg 15151, Level 16, State 1, Line 1 Cannot drop the user '<Domain>\<User>', because it does not exist or you do not have permission.

这很明显,因为用户对数据库的权限刚刚被删除。有什么避免这种情况的建议,或者我唯一的选择是在完成后重新创建用户/权限?或者不完全使用该标志并通过部署后脚本执行所有“删除对象管道”?

作为引用,在我的发布任务中设置的附加参数是(它看起来很奇怪但是没有办法只指定我想删除的对象):

/p:DropObjectsNotInSource=True /p:BlockOnPossibleDataLoss=false /p:DoNotDropObjectType="Aggregates,ApplicationRoles,Assemblies,AsymmetricKeys,BrokerPriorities,Certificates,ColumnEncryptionKeys,ColumnMasterKeys,Contracts,DatabaseRoles,DatabaseTriggers,Defaults,ExtendedProperties,ExternalDataSources,ExternalFileFormats,ExternalTables,Filegroups,FileTables,FullTextCatalogs,FullTextStoplists,MessageTypes,PartitionFunctions,PartitionSchemes,Permissions,Queues,RemoteServiceBindings,RoleMembership,Rules,SearchPropertyLists,SecurityPolicies,Sequences,Services,Signatures,SymmetricKeys,Synonyms,UserDefinedDataTypes,UserDefinedTableTypes,ClrUserDefinedTypes,Users,XmlSchemaCollections,Audits,Credentials,CryptographicProviders,DatabaseAuditSpecifications,DatabaseScopedCredentials,Endpoints,ErrorMessages,EventNotifications,EventSessions,LinkedServerLogins,LinkedServers,Logins,Routes,ServerAuditSpecifications,ServerRoleMembership,ServerRoles,ServerTriggers" /p:ExcludeObjectType="Aggregates,ApplicationRoles,Assemblies,AsymmetricKeys,BrokerPriorities,Certificates,ColumnEncryptionKeys,ColumnMasterKeys,Contracts,DatabaseRoles,DatabaseTriggers,Defaults,ExtendedProperties,ExternalDataSources,ExternalFileFormats,ExternalTables,Filegroups,FileTables,FullTextCatalogs,FullTextStoplists,MessageTypes,PartitionFunctions,PartitionSchemes,Permissions,Queues,RemoteServiceBindings,RoleMembership,Rules,SearchPropertyLists,SecurityPolicies,Sequences,Services,Signatures,SymmetricKeys,Synonyms,UserDefinedDataTypes,UserDefinedTableTypes,ClrUserDefinedTypes,Users,XmlSchemaCollections,Audits,Credentials,CryptographicProviders,DatabaseAuditSpecifications,DatabaseScopedCredentials,Endpoints,ErrorMessages,EventNotifications,EventSessions,LinkedServerLogins,LinkedServers,Logins,Routes,ServerAuditSpecifications,ServerRoleMembership,ServerRoles,ServerTriggers"

最佳答案

所以,我对自己说:我最初的尝试有两处错误:

  • 当你想在一个参数中使用多个值时,你必须用分号 (;) 代替冒号来分隔它们。
  • 如果要排除多个对象,参数名必须是复数:/p:ExcludeObjectTypes

所以,通过类似下面的内容,我实现了我想要的:

/p:ExcludeObjectTypes=Users;Logins;RoleMembership;Permissions;Credentials;DatabaseScopedCredentials

关于sql-server - 使用 Azure Pipeline 中的 SqlPackage 部署 DACPAC 忽略参数并删除用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59076039/

相关文章:

tfs - BuildHTTPClient 无法获得构建定义步骤?

c# - 如何使用 .Net Windows 服务的新基本身份验证对 Visual Studio Team Services 进行身份验证?

tfs - 在 VSTS/TFS 构建摘要中显示 HTML 内容,而不使用 list 文件中的贡献

git - 是否可以在 Azure Release 管道中从另一个团队项目克隆 Git 存储库?

java.sql.SQLException : Single-Sign-On is only supported on Windows. 请指定用户名

sql - 大表外键与小表外键

sql - Node.js 和 MSSQL 存储过程

sql - 如何将变量传递给 SqlCommand

azure - 如何将 Github Actions 与 Azure Devops Pipelines 结合使用

azure - 相当于发布管道的 YAML 是什么?