【问题标题】:Database validation in application应用程序中的数据库验证
【发布时间】:2019-06-21 19:28:25
【问题描述】:

我有一个 c# 应用程序插件,我需要从中验证数据库的架构。由于我正在扩展的应用程序的限制,我不能使用任何明显的框架,而是需要找到一种替代方法来确认数据库过程是否存在以及是否需要更新(如果过程本身已更改)从预期中)。除了为每个过程编写单独的查询之外,我可能会考虑其他更好的解决方案吗?

【问题讨论】:

  • 如何验证架构?你有表/列/过程的构建时间列表吗?运行?它是动态的吗?
  • 我需要验证大约数百个数据库过程(即确保它没有更改),我需要测试几十个表以确保字段符合预期。假设这些不会被我正在构建的应用程序更改或者用户不会更改表模式是不够的。由于这些意想不到的变化,我正在构建的工作流程失败了,我正试图找到一种方法来测试和自动化修复。
  • 用户为什么以及如何更改架构对象?听起来您需要数据库的安全性以仅允许对某些用户进行更改。您现在所拥有的是一场安全噩梦。此外,如果架构已更改,那么您会做什么 - 回滚?
  • 我使用底层数据库对象,但不拥有它的所有元素并且不能限制访问...我知道。这很糟糕,整个项目基本上都是我在做一些事情......
  • 我猜你会做的任何事情都会是性能猪。通过 SSMS 为“正常”大小的数据库生成脚本可能需要 30 多分钟。从 c# 代码运行将需要更长的时间。我真的会推动锁定您的数据库 - 我不希望您从前端执行的任何操作都会有效。

标签: c# sql .net sql-server


【解决方案1】:

Visual Studio 中有数据库项目。您可以将数据库导入此项目并尝试构建。请看官方文档: https://docs.microsoft.com/en-us/sql/ssdt/import-into-a-database-project?view=sql-server-2017

【讨论】:

  • 可以将其嵌入到我现有的应用程序中,还是需要将其部署为单独的解决方案?
  • @ShaunLangley 这只是一个项目(如类库或控制台应用程序)。可以将新项目添加到现有解决方案中
  • 嗯,这可能是执行此操作的“正确”方法,但不幸的是我的 VS2015 无法导入 2017 数据库...我正在扩展的应用程序不支持更新的 VS 项目。
  • 检查项目的属性。您可以将目标 sql server 更改为 2017
  • 2016 是我可用的最新目标
【解决方案2】:
<twocents>
  1. 将所有对象导出为 .SQL 文件,并将它们提交到源代码管理,然后将它们写入磁盘上的文件夹中。
  2. 创建一个跟踪器表,将您导出的对象映射到该对象的 DDL 哈希。
  3. 在您的应用程序初始化时或在其他适当的时间检查数据库中的对象。
  4. 将数据库中数据库对象的 DDL 哈希值与磁盘上的哈希值进行比较。如果存在差异下降并通过执行磁盘上文件的 DDL 重新创建对象

哈希作为一种快速方法来检查数据库中的内容是否与您期望在数据库中的对象结构相匹配。你如何部署它是有问题的,但我所做的假设是你可以控制你暴露给应用程序的数据库对象。

</twocents>

【讨论】:

  • 并不是说将所有对象导出到 SQL 文件并不痛苦
猜你喜欢
  • 2010-09-09
  • 2011-05-10
  • 2017-07-09
  • 1970-01-01
  • 2015-01-06
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多