Azure devops Azure Devops-管理、运行和跟踪一次性Sql脚本
我们有一个数据库项目,它使用dacpac部署模式更改,还允许部署前和部署后脚本 但是,我们经常需要运行一次性脚本,安全性方面希望开发人员在prod中没有写访问权限(目前我们没有DBA角色)。我正试图找到一个与azure devops协同工作的解决方案,在git中存储一次性运行的脚本,如果以前没有运行过脚本,则运行该脚本,并且在下次管道运行时不运行该脚本。我们希望通过devops完成这项工作,这样SP就可以运行查询,而不是开发人员,通过管道的任何内容都已经通过了我们的同行评审过程,而且我们还记录了执行的内容Azure devops Azure Devops-管理、运行和跟踪一次性Sql脚本,azure-devops,azure-sql-database,azure-pipelines,azure-sql-server,Azure Devops,Azure Sql Database,Azure Pipelines,Azure Sql Server,我们有一个数据库项目,它使用dacpac部署模式更改,还允许部署前和部署后脚本 但是,我们经常需要运行一次性脚本,安全性方面希望开发人员在prod中没有写访问权限(目前我们没有DBA角色)。我正试图找到一个与azure devops协同工作的解决方案,在git中存储一次性运行的脚本,如果以前没有运行过脚本,则运行该脚本,并且在下次管道运行时不运行该脚本。我们希望通过devops完成这项工作,这样SP就可以运行查询,而不是开发人员,通过管道的任何内容都已经通过了我们的同行评审过程,而且我们还记录了
我正在寻求任何做过这项工作或知道任何产品可以做这项工作的人的建议。我过去也遇到过类似的问题: 选项1 如果您能够在数据库中提供一个额外的表来跟踪执行了什么或没有执行什么,您的问题可以很容易地解决,有一个工具可以帮助您: 然后您将拥有一个新的存储库,我们称之为OneOffSqlScriptsRepository,您的管道将使用此存储库:
resources:
repositories:
- repository: OneOffSqlScriptsRepository
endpoint: OneOffSqlScriptsEndpoint
type: git
因此,您需要创建一个管道来运行这个DbUp应用程序,该应用程序使用OneOffSqlScripts存储库中的脚本,DB只负责执行一次脚本(它是可配置的)。
数据库的用户名/密码可以与azure KeyVault一起安全地存储在库中,因此只有具有正确访问权限的人才能访问它们(管道除外)
选项2
此选项假定您希望只使用azure管道可以提供的本机资源来完成所有操作
算法是这样的,可以对实现进行调整。使用liquibase。虽然我将它作为代码库的一部分,但您也可以从CLI使用它,并使用该工具运行脚本 Liquibase跟踪您在部署中发布的SQL文件,因此您可以有多个阶段,如DIT、UAT、STAGING、PROD,并且它可以随时间应用剩余的一次性SQL更改 一般来说,除非你真的需要支持,否则我怀疑你是否需要商业版。开源版本足以满足我的系统需求,我已经有了一个相对复杂的系统 与其他技术相比,我喜欢liquibase的主要原因是它允许基于SQL的更改集。因此,学习曲线要低得多 两个小贴士:
嗨,乔希,下面的答案有用吗?请检查并告知结果。
[{
"id": 1
"scriptName" : "myscript1.sql"
"runs": 0 //or hasRun : false
}]