2010-02-24 52 views

回答

8

我通常:

grant all privileges on my_db.* to [email protected] identified by 'my_user_pass' 
grant all privileges on test_my_db.* to [email protected] identified by 'my_user_pass' 

我想,如果有在Django的錯誤,你可能會打開你的數據庫恢復到可怕的事情,但如果有這麼大的安全你有其他問題django洞。

django最低限度需要選擇,插入,更新和刪除操作。如果你使用測試或syncdb,你還需要能夠創建表和索引(也許是加載sql fixtures的文件權限)。

因此,對於MySQL數據庫,我猜想最佳的一組權限可能是選擇,插入,更新,刪除,創建,索引和文件。如果你想得到真正的實質,你可以有選擇地在表級別(而不是數據庫級別)上授予這些權限。

就我個人而言,我發現grant all ...更容易打字。

+0

謝謝Seth。我也這樣做。但是,我一直在尋找「真正的細節」。我在網絡上看到了一些東西,詳細說明了這一點,看起來很值得加強。遺憾的是我沒有收藏它... – emru 2010-02-24 00:38:37

+1

這不言而喻,但在上述之後:'沖洗特權;' – mlissner 2010-08-14 02:44:24

+0

@mlissner你能解釋爲什麼嗎? – 2012-05-13 23:44:18

-1

配置數據庫級權限的目的是什麼?如果你的服務器受到攻擊,那麼攻擊者就可以對你的數據庫做任何事情(因爲他有登錄/密碼),而且許可證無濟於事。如果你的服務器是安全的,那麼權限是無用的。

如果您的數據庫服務器可從外部世界獲得,權限可能是有意義的,但這樣做並不是一個好主意。

+8

通過添加數據庫權限,您有機會限制SQL注入等攻擊可以實現的功能。如果Web服務器受到損害,DB權限可能會限制損害 - 例如可能沒有任何理由讓Web應用程序登錄可以刪除數據庫等。 – emru 2010-02-24 21:20:09

+1

使用django可以很容易避免SQL注入,並且在清除所有表和刪除數據庫之間沒有看到很大的區別。無論哪種方式,您都會丟失數據,並在消除漏洞後恢復備份中的任何內容。數據庫級權限使您的項目更安全並不明顯。我認爲django沒有內置的數據庫級權限支持,因爲最好是努力解決實際問題:XSS,CSRF,SQL注入等,而不是用一半的手段騙自己。 – 2010-02-25 03:59:09

+1

這裏是微軟對ASP.NET應用程序的建議「......只授予應用程序必須運行的最低權限。」 和SANS「...這種方法應該只授予應用程序運行所需的最低權限。」 等 缺陷可以在應用程序堆棧中的任何級別 - 爲什麼你不想使用每種可能的工具來防止攻擊傳播。 – emru 2010-02-25 04:27:42

7

從Django文檔:

https://docs.djangoproject.com/en/dev/topics/install/

「如果你打算使用Django的manage.py執行syncdb命令來自動創建您的模型數據庫表(後首次安裝Django和創建一個項目),你你需要確保Django有權限創建和修改你正在使用的數據庫中的表;如果你打算手動創建這些表,你可以簡單地授予Django SELECT,INSERT,UPDATE和DELETE權限在某些數據庫上,Django將在syncdb期間需要ALTER TABLE特權,但一旦syncdb創建它就不會在表上發出ALTER TABLE語句。創建數據庫後,我們呃具有這些權限,您將在項目的設置文件中指定詳細信息,請參閱DATABASES以獲取詳細信息。「

2

我剛剛用MySQL測試了初始設置。對於python manage.py migrate你至少需要簡單的操作如下補助(如果喲使用DB-製劑):

  1. CREATE,ALTER,INDEX
  2. SELECT,UPDATE,插圖,DELETE

而且,通過方式 - 安全至關重要。您可以通過限制系統暴露來降低攻擊影響。在這種情況下 - 你可以限制'DROP' - 這是相當大的加。如果你留下一些棘手的漏洞並具備SQL注入的能力 - 你可能會減少損害。我將在未來研究如果它不會損害刪除DELETE關鍵字 - 這也將限制潛在的威脅。只是因爲我們都不時留下錯誤:)

相關問題