【问题标题】:Make data in database read-only but allow schema changes将数据库中的数据设为只读,但允许架构更改
【发布时间】:2010-02-08 05:33:43
【问题描述】:

这是对我问过的earlier question 的澄清。它与那个问题有很大不同,我认为它可以独立存在。

我每半年创建一次生产数据库的快照。然后,用户可以通过从前端 GUI 切换后端数据库来查看历史数据。因为它是历史数据,所以它必须保持只读状态。

但是,有时新字段会添加到当前数据库中的表中。如果前端期望这些字段存在,这可能会导致问题。我们的解决方案是动态添加字段,如果需要该字段,则将它们设置为 null 或适当的默认值。这意味着不能将数据库设置为只读,因为这会阻止更改表结构。为了解决这个问题,我们为所有用户提供 db_datareaderdb_denydatawriterdb_ddladmin 角色。

所有这些都非常有效,我们没有遇到任何问题。但是,数据仍然可以由 dbo(即我)更改。我担心有一天我会不小心更改这些历史数据(可能没有意识到),从而损害其完整性。

尝试的解决方案:

  • 我尝试将 db_denydatawriter 的角色分配给 dbo,但失败了(请参阅 aforementioned question)。

  • 该问题的另一个建议是在进行架构更改时关闭和打开快照的只读状态。这行得通,除了它会导致每个快照模式更改大约两分钟的延迟。我们通常不会对架构进行大量更改,但如果可能的话,我想避免这种情况。

任何其他想法将不胜感激。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    当新字段添加到生产数据库并且应用程序发生更改(这很可能在维护窗口期间完成)时,为什么不运行一个脚本来更新快照。

    然后,您可以确保脚本更改只读状态以进行更新,并可以记录所有活动。这将允许您在开发期间使用开发 SQL 服务器测试您的脚本。

    除非我错过了什么。

    【讨论】:

      【解决方案2】:

      我同意迈克尔的观点。您可能有在生产数据库上运行的发布脚本。针对快照运行脚本的 DDL 部分并将其更改回只读模式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-20
        • 2014-11-03
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        • 1970-01-01
        • 2012-01-22
        • 2012-08-24
        相关资源
        最近更新 更多