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

MySQL 安全性指南 (三):無 GRANT 版本手動修改授權表與權限管理腳本

     編輯:MySQL 資料庫相關知識

適用版本

MySQL < 3.22.11 (無 GRANT/REVOKE 指令)

核心原理

GRANT 內部實際執行 INSERT/UPDATE 授權表。理解對應關係即可手工操作。

關鍵差異:密碼加密

  • GRANT 自動呼叫 PASSWORD() 加密
  • INSERT 需手動指定 PASSWORD('plaintext')

操作後必須重載

mysqladmin flush-privileges
# 或
mysqladmin reload

否則 Server 不知變更,權限不生效。

實戰範例

建立超級使用者 (等同 GRANT ALL ... WITH GRANT OPTION)

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

注意:欄位數需符合當前版本 user 表結構 (用 SHOW COLUMNS FROM user 確認)。

建立單一 RELOAD 權限使用者

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

其他權限欄位自動填預設 N。

資料庫級權限 (等同 GRANT ALL ON sample.* TO boris@localhost IDENTIFIED BY "ruby")

-- 1. user 表建立連線記錄 (無全域權限)
INSERT INTO user (Host, User, Password) 
VALUES ("localhost", "boris", PASSWORD("ruby"));

-- 2. 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

表/欄位級權限

操作 tables_priv、columns_priv,Table_priv/Column_priv 為 SET 型別:

-- 表級 SELECT + INSERT
UPDATE tables_priv SET Table_priv = 'Select,Insert' WHERE ...

修改現有使用者權限

  • 增/減權限:UPDATE 對應表
  • 刪除使用者:從所有授權表 DELETE 該使用者記錄

輔助工具

  • mysqlaccess:權限分析工具
  • mysql_setpermission:互動式權限設定腳本 (Perl)

附錄:小測驗

新安裝 MySQL,執行:GRANT ALL ON samp_db.* TO fred@*.snake.net — 請分析產生的授權記錄分佈。

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