2010-09-23 29 views
2

我們想要在我們的軟件中自由地構建SQL查詢(目前無法使用我們的軟件),但需要能夠鎖定它,以便用戶無法進行任何操作更改,只能從​​某些表中選擇數據。有沒有什麼好的指導來幫助我適當地鎖定它(即,最少的權限需要,建議禁止的關鍵字等)?或者我只需要繼續瀏覽網頁並吸收所有的SQL Server安全教程(針對系統本身,而不是編程),我發現了什麼?謝謝。需要幫助鎖定我的SQL Server代碼

回答

4

實現此目的最簡單的方法是創建一個服務帳戶,您將在系統中明確使用該動態類型的查詢。這個想法是,你使用了你所吸收的所有sql安全優勢,並在服務器上創建一個非常有限的低級別服務帳戶,並使用它來連接到數據庫。

我會建議給他們現在的SELECT訪問權限,然後逐漸釋放控制權限,如果它是您的用戶請求並在合理範圍內。

This鏈接將告訴您如何使用GRANT關鍵字爲特定的帳戶安全性提供登錄。

因此,您只需要在sql server中使用基於sql server的安全性創建新帳戶,而不是Windows。之後,只需使用上述鏈接中的信息將您想要的特定權限添加到該帳戶即可。然後將應用程序中的連接字符串切換到該特定功能的新帳戶。

圍繞這一點的任何其他基於編程的安全性都是額外的好處,但僅憑編程解決方案將不會像數據庫級別的訪問限制那樣具有防彈性。

+0

我很喜歡這個想法。用我們的系統設置的方式來實現會有點棘手,但應該是可行的。 – 2010-09-24 16:13:28

4

我會去皮帶和牙套在這裏。

  • 確保您的查詢工具是證明 針對SQL注入和不必要的 查詢。
  • 不要直接對話 數據庫,使用服務器進程做 那。
  • 創建一個SQL Server用戶,該用戶 只讀取了需要的表 的訪問權限。
  • 對安全有偏見,如果你不是,請僱人。

HTH

+0

這是一個偉大的基本提醒,謝謝。 – 2010-09-24 16:14:40

1

除了專門爲這些類型的操作創建一個最小特權帳戶(我喜歡我的所有用戶帳戶只對特定的SP EXEC並選擇一定效用的看法 - 這通常是它初學者),您還可以使用視圖來儘可能簡化數據並執行某些常見聯接。在用戶絕對必須提供某種過濾器的情況下,您可以使用存儲過程或內聯表值函數,如您不希望他們執行SELECT * FROM視圖的日期範圍。

+0

他們只能訪問某些視圖並且沒有存儲過程。 – 2010-09-24 16:17:23

3

爲標記爲「with encryption」的SQL Server創建所有對象(視圖,表,過程,函數)。 例如: 創建過程BBBB加密 作爲 開始 ... end

之後,用戶無法查看源代碼,也無法修改它。

+0

以前沒有考慮過這個。我不確定它能夠與我們目前的系統一起工作多麼好,但這可能是一大好處,並解決了我在我腦海中解決的其他幾個問題。 – 2010-09-24 16:16:02

+0

這適用於從2000到2008 R2的所有版本的MS SQL Server。您可以像平常一樣開發和調試代碼,並僅在數據庫的發行版中使用加密。它可以100%保護你的代碼,防止那些無法看到加密對象的DDL的用戶,也不會改變你在SQL服務器上的工作。 – Kutsoff 2010-09-26 11:59:13