1

我有一个系统,允许用户登录并构建查询以针对 SQL 2012 服务器运行。系统需要在允许的查询方面非常自由,所以我只是依靠 SQL 授权来防止用户做他们不应该做的事情。

我担心仍然会发生优先级倒置之类的事情。假设一个非特权用户登录,找到一个要滥用的表并在其上运行十几个外部连接。或者只是开始一个事务并且从不关闭它。

我想确保非特权用户无法阻止更多特权用户的关键进程。我正在考虑使用资源管理器来执行此操作,但我不确定这是否是我可能需要担心的其他问题的最佳方式。

确保来自非特权用户的查询不会阻塞关键进程的最佳方法是什么?

4

2 回答 2

2

资源调控器只能限制任意用户的资源(内存、CPU)。它不能防止优先级倒置,如果发生优先级倒置,资源管理器只会使其持续更长时间。

如果用户可能导致阻塞,那么您必须将用户移动到安全的游乐场(例如备用副本),或者您必须主动监控阻塞。没有太大的回旋余地。如果这些用户只做 R/O 操作,那么你可以尝试使用快照隔离来避免阻塞。

于 2013-03-11T15:27:29.373 回答
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

于 2013-03-12T15:21:41.757 回答