使数据库中的数据只读,但允许更改架构

时间:2010-02-05 18:19:08

标签: sql-server

这是对我问earlier question的澄清。这与我认为可以独立存在的问题完全不同。

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

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

所有这些都很有效,我们没有遇到任何问题。但是,dbo(我就是这样)仍然可以改变数据。我担心的是,有一天我会不小心改变这些历史数据(可能没有意识到这一点),从而损害了它的完整性。

尝试的解决方案:

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

  • 该问题的另一个建议是在进行架构更改时关闭并启用快照的只读状态。这是有效的,除了每个快照架构更改导致大约两分钟的延迟。我们通常不会进行很多架构更改,但如果可能的话,我想避免这种情况。

非常感谢任何其他想法。

2 个答案:

答案 0 :(得分:1)

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

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

除非我遗漏了什么。

答案 1 :(得分:0)

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