2010-11-27 46 views
1

注意,這純粹是假設的;這個想法給了我heebie-jeebies。我寧願有一個涵蓋所有可能性的數據庫管理界面。但我不得不考慮是否可以安全地做到這一點,並最終結束自己的所有結。因此,這個問題。可靠員工的「安全」SQL - 黑名單,白名單,以上都不是?

總之:假設我想,讓我的網站的某些用戶通過輸入搜索數據庫的一部分「原始」 SQL:

  • 信任(和登錄,很明顯)的工作人員只
  • 只讀訪問相關表格
  • 根本見不到其他表
  • 沒有運行不安全/不允許SQL,意外方法可行或以其他方式

所有表格都以其相關的區域爲前綴,例如videos_,photos_,forum_。我想授予這些用戶讀取特定部分的權限,但不允許他們通過輸入SQL直接修改數據,即使我相信他們通過UI進行更改。

我想甚至可以鎖定這些用戶信賴的,比方說,所有forum_表的 - 否則他們可以閱讀所有用戶的私人信息,管理論壇帖子,等等!

「可信用戶」要求的照顧,他們將不得不在一定用戶組看到或使用。這更多的是「安全的SQL」部分。

是化繁爲簡用不同的DB用戶誰具有隻讀權限,只有在正確的表連接?

或將我列入黑名單(並拒絕SQL如果它包含)forum_,DROP,ALTER,UPDATE,CREATE,INSERT,等等?

或白名單SELECT,FROM,WHERE,相關的表名稱和字段名稱?這聽起來更安全,直到我想到需要WHERE field_name =「這裏是任意文本」。

還是有些組合? (比如,記錄使用「黑名單」的SQL,儘管它已知被閹割。)

或者逃跑尖叫?

你將如何解決它?實際上是否可以安全地做到這一點?

回答

1

許多關係數據庫管理系統系統實現了「模式」,對於SQL Server來說,它本質上是包含數據庫對象的數據庫中的容器(比如表 - 「dbo」是沒有指定的默認模式)。設置完成後,您可以爲登錄模式和包含的所有對象分配訪問權限 - 因此,如果添加了表,他們將通過模式自動獲取(或拒絕)對其的訪問。

不利的一面是,你必須提前做好計劃。要將現有的所有表格轉換爲模式,需要重新命名所有內容,並相應地更新所有現有代碼。不過,如果你這樣做,它會使設置和管理黑名單和/或白名單變得更簡單。

3

如果目標最終用戶習慣使用SQL不會您只是給他們訪問的客戶端訪問工具,並限制他們可以通過自己的登錄權限做什麼到所說的數據庫爲自己節省大量的時間。

+0

這是有道理的。我假設了一種環境,那種東西不可用;例如,我知道我的一位同事在使用phpMyAdmin時遇到了一個不愉快的經歷,並且不希望我們的任何東西靠近我們的東西。不知道爲什麼他們會相信我做得更好...... – 2010-12-01 20:31:21

1

你應該(取決於您的DBMS)可以限制哪些用戶可以訪問使用權限到對象級別 - 如果你需要,即使是列級。

我會建議去白名單而不是黑名單的方法,因爲每當你添加一個新的對象(表,視圖等),你會默認安全 - 而不是進入悲傷,如果你忘記設置對象如果需要列入黑名單。

3

請不要嘗試手動filter SQL(上話像insertdelete等)。這聽起來像一個可怕的計劃!

您的數據庫應爲您提供測試功能來授予或撤銷讀/寫/更新/刪除...對特定架構的/桌等用戶的特定用戶/用戶組權限...

1

白名單方法是一種方法。
您可以在表格上創建視圖,拒絕基表上的所有權限並僅在視圖上授予它們。通過這種方式,您可以控制誰,什麼以及在哪裏可以做(即拒絕插入,允許更新,但不插入,完全隱藏這些表格等)
這種方法在我們討論時有一個非常顯着的優勢安全性 - 它完全隱藏了來自外部用戶的數據庫模式,減少了以後對您的應用程序進行攻擊的可能性(是的,它確實發生了這種情況)。

相關問題