限制所有用户查询的选择大小

时间:2014-09-12 11:47:45

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2 database-administration

听起来很愚蠢的问题但有没有办法对SQL Server上的特定用户实施选择大小限制?即使用户发送select *,结果集也只包含第一个,比方说10个结果。与顶级运算符一样,但在安全上下文中。这可能有两个好处: 1)防止特殊查询膨胀服务器。 2)限制对敏感数据的访问。

谢谢大家。

2 个答案:

答案 0 :(得分:0)

"设置rowcount 10"命令有点酷......它会将select语句的返回行数限制为给定的数字。

关于它的好处是你可以将它添加到"任何" SQL语句("设置rowcount 10;选择......")并且它完成它的事情;你不必调整select语句(可能很复杂)来找到插入" top N"的位置。

注意:此设置在关闭之前保持有效(对于当前连接)(使用"设置rowcount 0"),因此您确实需要仔细管理它。

http://msdn.microsoft.com/en-us/library/ms188774(v=sql.90).aspx

答案 1 :(得分:0)

您可以为表创建视图,并在基于suser_sid的详细信息中执行SELECT TOP(详细信息请参见Anyway to create a SQL Server DDL trigger for "SELECT" statements?)。

这可以防止过多的行选择,并且具有针对特定用户的强制执行的好处,而且没有机会让他们进行更改。

我遇到这种情况的唯一一次是阻止动态数据库访问(在应用程序之外),允许单个用户提取数据库中的所有数据,或进行过多的聚合,这将揭示敏感的操作安全性数据;有些数据比总体上更加危险。