2010-07-31 35 views
2

假設您創建了一個博客應用程序,並且它的數據存儲在MySQL數據庫中。在您的應用程序配置您的數據源名稱設置爲myBlog用戶root密碼現在whatever在MySQL中設置應用程序權限

,當用戶開始使用您的博客訪問,張貼,並在螺紋評論,等等...我假設他們連接爲root通過應用myblog ...

所以......用戶連接到應用myBlog誰又連接到MySQL作爲用戶root,使用密碼whatever ---這不是真的被連接到MySQL的用戶,它的應用。正確?

是不是有一個安全問題,這種做法?我應該在MySQL中爲具有特定權限的應用程序myBlog創建新的用戶名,並且僅爲管理數據庫留下root

回答

6

是,應用程序連接到數據庫。你應該爲你的應用程序創建一個新的mysql用戶,做類似

CREATE DATABASE myblog_env; 
CREATE USER 'myblogenv-user'@'%' IDENTIFIED BY 'your pw'; 
GRANT ALL PRIVILEGES ON myblog_env.* TO 'myblogenv-user'@'%' WITH GRANT OPTION; 

類似上面的東西應該這樣做。上述的「ENV」部分是,如果你想創建一個新的分貝差的環境中,如開發,分期,督促,無論....

這樣你的應用程序的用戶有其數據庫的完全訪問權限,但在mysql實例中沒有其他dbs。

+2

謝謝!但是,授予數百人使用的應用程序的所有權限不是一個壞主意嗎? – Mohamad 2010-07-31 17:32:02

+2

@Mel,在這種情況下,'GRANT ALL'意味着由於'ON'子句給予所有數據庫級別的權限。 – 2010-07-31 17:54:06

2

首先,你永遠不應該使用MySQL數據庫的root帳戶爲別的,然後管理員的工作。 其次,從理論上講,你的博客的用戶是你的mysql數據庫中的「根」,但希望在執行任何查詢之前有很多sanatizing和清理你的博客代碼......其他任何東西要知道作爲一個「SQL注入」

1

簡短的回答是:是的。

龍回答

安全:你應該有你的應用程序不同的用戶比你爲自己做的administator。該應用程序用戶應該只需讀取(並在必要時寫入)特定數據庫上的權限即可訪問。此外,它不應具有特權授予權限,也不應具有刪除表權限,也不具有數據庫創建/刪除特權,也不具有爲您保留的任何其他內容。

便利性:如果您需要更改密碼,則不需要更改應用程序,反之亦然。

+0

謝謝。所以,基本上,不應該授予這個表(http://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html)中說「服務器管理」(第三列,底部)的任何內容? – Mohamad 2010-07-31 17:46:03

+1

一般來說,是的。有時候人們會選擇更具限制性的特權。例如,應用程序很可能不需要創建或刪除表,因此您不會授予這些權限,但它確實需要執行select或insert操作,因此應授予這些權限。 – 2010-07-31 17:52:46

2

你是完全正確的。這被稱爲principle of least privilege。您應該爲應用程序提供完成作業所需的最低訪問權限。這不會是根。