MySQL 帳號由三元組構成:用戶名 + 密碼 + 來源位置。同一用戶名從不同來源連線可擁有不同權限。
GRANT SELECT ON db1.* TO 'abc'@'server1' IDENTIFIED BY 'pass1';
GRANT SELECT ON db2.* TO 'abc'@'server1' IDENTIFIED BY 'pass2';
用戶 abc 連 db1 用 pass1,連 db2 用 pass2,實現庫級密碼隔離。
mysql.user 表mysql.db、mysql.tables_priv 等判斷庫/表級權限| 權限 | 說明 | 風險等級 |
|---|---|---|
| SELECT | 查詢資料 | 低 |
| INSERT/UPDATE/DELETE | 增刪改資料 | 中 |
| INDEX | 建立/刪除索引 | 中 |
| ALTER | 修改表結構 | 高 |
| CREATE | 建立資料庫/表 | 高 |
| GRANT | 授權給他人 | 極高 |
| REFERENCES | 外鍵引用 | 中 |
| RELOAD | FLUSH 操作 | 高 |
| SHUTDOWN | 關閉服務 | 極高 |
| PROCESS | 查看/殺死執行緒 | 高 |
| FILE | LOAD DATA INFILE | 極高(可讀寫伺服器任意檔案) |
| SUPER | 殺死任意查詢、修改全域變數 | 極高 |
have_openssl=YES)mysql> SHOW VARIABLES LIKE 'have_openssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl | YES |
+---------------+-------+
[mysqld]
ssl-ca=/etc/mysql/ca.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem
# 建立帳號要求 SSL
GRANT SELECT ON db.* TO 'user'@'%' IDENTIFIED BY 'pass' REQUIRE SSL;
# 連線指定憑證
mysql -h host -u user -p --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem
DELETE FROM mysql.user WHERE User='';UPDATE mysql.user SET Host='localhost' WHERE User='root';DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test%';