首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL安全性指南(三):無GRANT環境下手動操作授權表與匿名用戶陷阱實測

     編輯:MySQL 資料庫相關知識

針對MySQL 3.22.11前不支援GRANT的版本,本文詳細說明如何手動INSERT授權表達到同等效果,並深度剖析匿名用戶導致本地連線失敗的經典案例與修復方案。

手動操作授權表四大原則

  1. GRANT自動加密密碼,手動INSERT**必須**使用PASSWORD()函數。
  2. 修改授權表後**必須**執行FLUSH PRIVILEGES或mysqladmin reload重載生效。
  3. 權限分佈:全域權限存user表,資料庫級存db表,表/欄級存tables_priv/columns_priv。
  4. tables_priv.Table_priv與columns_priv.Column_priv為SET型別,值以逗號分隔(如'Select,Insert')。

三種典型手動授權範例

1. 超級用戶(含GRANT OPTION)

INSERT INTO user VALUES ('localhost','anyname',PASSWORD('passwd'),
    'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

注意:早期版本權限欄位少於14個,需用SHOW COLUMNS FROM user確認後調整。

2. 單一管理權限用戶(RELOAD)

INSERT INTO user (Host, User, Password, Reload_priv)
VALUES ('localhost','flush',PASSWORD('flushpass'),'Y');

其餘權限欄位自動預設'N'。

3. 資料庫級權限用戶

-- user表建立連線帳號
INSERT INTO user (Host, User, Password) VALUES ('localhost','boris',PASSWORD('ruby'));
-- db表授予資料庫權限
INSERT INTO db VALUES ('localhost','sample_db','boris',
    'Y','Y','Y','Y','Y','Y','N','Y','Y','Y');

倒數第二欄'N'為Grant_priv,若需WITH GRANT OPTION改為'Y'。

附錄:匿名用戶導致本地連線失敗的根因與修復

現象

GRANT ALL ON samp_db.* TO fred@%.snake.net IDENTIFIED BY 'cocoa';
% mysql -u fred -pcocoa samp_db
ERROR 1045: Access denied for user: 'fred@localhost'

根因分析

  1. mysql_install_db建立初始user表含兩匿名記錄:(localhost,'')、(pit.snake.net,'')。
  2. 新增fred@%.snake.net後,伺服器啟動時按Host排序(具體值優於萬用字元),再按User排序(非空優於空)。
  3. 排序結果:(localhost,root)、(localhost,'')、(pit.snake.net,root)、(pit.snake.net,'')、(%.snake.net,fred)。
  4. fred從localhost連線,**優先匹配(localhost,'')匿名記錄**,該記錄密碼為空,導致密碼不符拒絕連線。

徹底修復

DELETE FROM user WHERE User='';
-- 同步清理db、tables_priv、columns_priv中匿名記錄
DELETE FROM db WHERE User='';
DELETE FROM tables_priv WHERE User='';
DELETE FROM columns_priv WHERE User='';

附錄:新安裝MySQL安全基線清單

  1. 設定root密碼:mysqladmin -u root password 'yourpass'(3.22+)或手動UPDATE user SET Password=PASSWORD('yourpass') WHERE User='root'。
  2. 執行mysqladmin -u root status驗證,若仍免密登入則mysqladmin -u root reload重載。
  3. 刪除所有匿名用戶記錄(見上)。

理解授權表結構、排序規則與手動操作細節,是排查疑難權限問題、應對舊版本環境的核心能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved