如何存储一次性使用的系统管理员脚本?

How to store one-time use sysadmin scripts?

当系统管理员运行使用一次性脚本时,我们有一个文件夹,用于保存所有针对我们数据库的运行一次性使用脚本。这个文件夹不是很容易搜索,使得脚本代码的重用变得困难。所以,我在想,我们能否以某种方式将所有这些脚本放入数据库中?这就是我的想法:

我们将所有脚本添加为存储过程。对于我们想要确保只会 运行 一次的一次性使用脚本,我们在过程中添加了拒绝执行权限。我们可以将所有这些脚本存储在一个管理架构中,并将该架构的权限设置为仅 sysadmin。这样,如果有可重复的脚本,我们就不需要跟踪它们在脚本文件夹中的位置。我们可以重新执行一个存储过程。如果我们想找到一个做某事的存储过程,我们可以在存储过程中添加注释并搜索与我们要查找的内容匹配的文本。

在考虑这样的事情时,我可能想解决哪些问题(安全性或其他方面)?这是不是太危险了,不值得考虑?或者这是个好主意,但浪费时间?

通过 SP 进行搜索也不是很糟糕,我只是不确定以这种方式将它们存储在数据库中是否会解决您遇到的一些问题。我也会担心有人会忘记拒绝执行并能够 运行 一个脚本,意外或 on-purpose,这可能会导致很头疼。

我更喜欢将这些类型的脚本保存在代码库中,例如 git。然后您将获得所有功能、更改跟踪、更轻松的分支、管理合并等。我过去常常使用 0001-alter-tableX-add-columny 或类似的东西将部署脚本存储在源代码管理中,只是为了保持脚本的执行顺序(在你的情况下可能无关紧要)。

如果这不可能,也许我更喜欢像 Confluence 这样的文档存储库,而不是所有的 SP。例如,如果您的数据库卡在 Restore/Recovery 状态,并且您需要访问这些 SP 之一,该怎么办。如果事情被破坏了怎么办?您可能会失去访问权限或完全失去这些脚本。