在 SQL Server 上,是否可以限制某些用户使用某些函数、运算符或语句?

R. *_*raz 7 performance sql-server execution-plan query-performance

我们支持大量对查询性能不太了解或根本不关心的开发人员和分析师。我们每天都会有数百个构思不佳的查询(也由于设计不佳的数据库架构),每个查询都会从我们的服务器中吸取数十 GB 的 RAM,并将执行计划存储在 SQL 缓存中的 MB 范围内。

我们想限制某些用户使用 SORT 和 HASH MATCH,特别是 ORDER BY、SELECT DISTINCT 和任何类型的 JOIN。我们的目的是让用户提取他们的数据,但只在他们这边工作。

这可以在 SQL Server 中实现吗?有没有支持它的数据库引擎?您对此有何想法?

我知道这会违反关系数据库的原则,但我们正在寻找某种方法来强制正确使用引擎而不是未受过教育的用户滥用。

我们已经在考虑实现 Resource Governor 为这些坏查询分配一定数量的机器资源。

Jam*_*ins 6

凯文斯基答案是为您找到解决方案的一条途径。

针对您的特定问题的不同路径是创建第二个报告(可能还有第三个开发)服务器。带有生产数据的副本。您的报告人员和开发人员可以做各种愚蠢的事情,而不会影响生产。

有多种方法可以实现这一点,具体取决于您的报告/开发数据需要有多新鲜。

一个常见的解决方案是每晚备份和还原到辅助服务器。如果您需要真正的当前数据(例如无延迟或一秒),请查看SQL Server Always On


kev*_*kio 2

您可以创建所需数据的视图并创建仅允许选择的角色。

或者,您可以创建返回结果集的存储过程,该结果集可以是通过执行良好的查询访问的表的任意组合。

我不知道有什么方法可以限制 SQL 中基本命令的使用,除非有一些黑客数据库级触发器,并且建议如果您有那么多用户不知道如何编写良好的查询,那么进行一些教育会更有效方法来做到这一点。午餐时间会议?