0

听起来很愚蠢的问题,但有没有什么办法可以在SQL Server上对特定用户实现选择大小限制?即使用户发送select *,结果集也只包含第一个,比如说10个结果。像顶级操作员一样工作,但是在安全环境中工作。这可能有两个好处: 1)防止临时查询膨胀服务器。 2)限制访问敏感数据。限制所有用户查询的选择大小

谢谢大家。

+0

对于你的第二点,我并不真正看到“前10名”可能是一个很好的安全。无论如何,我不是那种可行的事情,没有在他们的定义中创建一个TOP 10的视图,并只允许访问这些视图......但是,我可能是错的。 – 2014-09-12 11:54:58

+0

您可以查看行级权限:http://msdn.microsoft.com/en-us/library/bb669076(v=vs.110).aspx – 2014-09-12 11:57:18

+0

请注意,仅限制行数不一定减轻过多的资源使用。例如,“SELECT TOP(1)* FROM BillionRowTable ORDER BY NonIndexedColumn”将是非常昂贵的,即使只返回一行。这很大程度上取决于查询计划的细节。 – 2014-09-12 11:59:40

回答

0

“set rowcount 10”命令有点酷......它将限制select语句返回给给定数字的行数。

它的好处是,你可以将它预先添加到“任何”SQL语句(“set rowcount 10; select ...”)并且它做它的事情;你不必调整select语句(可能很复杂)来找到在哪里插入“top N”。

注意:此设置保持有效(对于当前连接),直到关闭为止(使用“set rowcount 0”),所以您确实需要仔细管理它。

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

0

您可以为您的表视图和范围内做基于SUSER_SID那些SELECT TOP(这里Anyway to create a SQL Server DDL trigger for "SELECT" statements?详细说明)。

这将防止过多的行选择,并有利于针对特定用户执行,而没有机会让他们改变它。

我唯一遇到过这种情况是为了防止动态数据库访问(应用程序外部),允许单个用户提取数据库中的所有数据,或者进行过度聚合,从而泄露敏感操作安全数据;一些数据总体上比危险性更严重。