2016-03-17 35 views
1

我想知道是否有任何方法阻止SQL數據庫執行不包含任何聚合函數的查詢。原因是阻止用戶獲取特定記錄的數據(例如個人信息),但是給他選擇查詢人口(例如平均年齡)。如果有任何現成的解決方案,我不想編寫任何包裝器/處理器/解析器。SQL表達式中SELECT查詢的限制類型

+0

對於哪個DBMS? –

+2

不要授予對錶/列的訪問權限。創建一個視圖,授予選擇它。 – jarlh

+0

不是一個好主意。如果按主鍵進行分組並使用分析函數(如MAX,MIN)來訪問每個組中唯一一行的值,該怎麼辦?這將滿足您的要求,但我仍然可以在結果集中獲取個人信息。如果您不希望有人訪問敏感信息,請不要授予訪問權限。觀點應該做@jarlh建議的罰款。 –

回答

1

沒有真正的(或至少容易的)方法來做到這一點。

建議將限制對基表的訪問,但在頂部創建一個或多個視圖,以提供聚合數據,然後允許訪問此視圖。

或者,創建1對1映射視圖,僅從基表中選擇非個人數據。通過這種方式,您可以讓某人使用這些視圖來運行聚合函數,而不用擔心暴露個人或敏感信息。

wiki page用於視圖規定:

視圖可以表示包含在表中的數據的子集。因此,視圖可以限制底層表對外界的暴露程度:給定用戶可能有權查詢視圖,但拒絕訪問基表的其餘部分。

視圖可以作爲彙總表,其中所述數據庫引擎聚集數據(總和,平均值等),並提出了計算結果作爲數據的一部分。