我有一个系统,允许用户登录并构造查询以针对SQL 2012服务器运行。系统需要在它允许的查询中相当自由,所以我只是依靠SQL授权来阻止用户做他们不应该做的事情。
我担心priority inversion之类的东西仍然会发生。假设没有特权的用户登录,找到要滥用的表并在其上运行十几个外部联接。或者只是开始一个交易,永远不会关闭它。
我想确保没有特权的用户无法阻止来自更多特权用户的关键进程。我正在考虑使用Resource Governor来做这件事,但我不确定这是否是我可能需要担心的其他问题的最佳方法。
确保来自非特权用户的查询无法阻止关键流程的最佳方法是什么?
答案 0 :(得分:2)
资源调控器只能限制任意用户(内存,CPU)的资源。它无法阻止优先级倒置,如果发生优先级倒置,资源调控器只能使其持续更长时间。
如果用户可能导致阻塞,那么您必须将用户移动到安全的游乐场(例如备用副本),或者您必须actively monitor for blockage。机动的空间不大。 如果这些用户只进行R / O操作,那么您可以尝试使用快照隔离来避免阻塞。
答案 1 :(得分:0)
我们遇到了类似的要求,最终转向了针对无特权用户的故障转移SQL Server 2008盒子上的数据库快照。这给了我们一些优先级隔离,并使我们能够更好地利用我们的故障转移硬件。
现在我们在SQL Server 2012上,我们正在研究AlwaysOn。它并不完美,但如果你有HA环境,那值得考虑。本页底部提供了AlwaysOn白皮书:http://www.microsoft.com/en-us/sqlserver/solutions-technologies/mission-critical-operations/high-availability.aspx。