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?詳細說明)。

這將防止過多的行選擇,並有利於針對特定用戶執行,而沒有機會讓他們改變它。

我唯一遇到過這種情況是爲了防止動態數據庫訪問(應用程序外部),允許單個用戶提取數據庫中的所有數據,或者進行過度聚合,從而泄露敏感操作安全數據;一些數據總體上比危險性更嚴重。