我們最近從SQL Server切換到MySQL用於新項目,並且我仍然努力爭取讓自己的頭腦安全模型。具有清除權限的MySQL用戶仍然可以訪問數據庫
我們的應用程序中有一個名爲MyApplicationUser的MySQL用戶。爲了方便起見,當我第一次開發這個應用程序時,我給了用戶我認爲是必需的特權。
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON MyApplication.* TO 'MyApplicationUser'@'%';
而且它似乎工作,所以我沒有想到更多關於它。在某些時候,我調整了這個列表,這樣用戶也可以創建索引,儘管我不能再記得我曾經這樣做過的代碼。
作爲安全審計的一部分,我認爲將這些權限僅限於用戶實際需要的權限是明智的。所以我查了一下它的運行情況:
select * from information_schema.user_privileges where grantee like '%MyApplicationUser%';
其中有一個相當長的名單。然後,我跑到下面的代碼:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'MyApplicationUser'@'%';
GRANT SELECT, INSERT, EXECUTE, UPDATE ON MyApplication.* TO 'MyApplicationUser'@'%';
FLUSH PRIVILEGES;
現在,當我從user_privileges運行選擇我只得到一個行 - 用法。文檔說這只是基本的使用權限。所以看起來我的GRANT命令沒有起作用。更令人震驚的是,當我運行應用程序時,它似乎仍然具有讀取和更改數據的能力 - 表明該帳戶擁有除user_privileges中列出的權限以外的權限。
我試過重新啓動MySQL服務以確保它「新鮮」,但用戶仍然有權限訪問應用程序。
試圖爲「MyApplicationUser」運行秀補助@「%」似乎表明先前執行GRANT語句列表,不包括我的初步GRANT:
GRANT USAGE ON *.* TO 'MyApplicationUser'@'%'
GRANT SELECT, INSERT, UPDATE, EXECUTE ON `dataportal`.* TO 'MyApplicationUser'@'%'
所以:我怎麼能找出什麼特權我的MyApplicationUser帳戶實際上有?如果它真的只是用法,那麼應用程序如何繼續工作?顯示授權與user_privileges有什麼不同?