mysql相關指令
- 一. MySQL給用戶添加遠程訪問權限
- 1. 創建或者修改用戶權限
- 方法一:創建用戶并授予遠程訪問權限
- 方法二:修改現有用戶的訪問限制
- 方法三:授予特定數據庫的特定權限
- 2. 修改 MySQL 配置文件
- 3. 安全最佳實踐
- 4. 測試遠程連接
- 5. 撤銷權限或刪除用戶
一. MySQL給用戶添加遠程訪問權限
1. 創建或者修改用戶權限
方法一:創建用戶并授予遠程訪問權限
-- 創建新用戶,允許從任何主機(%)連接
CREATE USER '用戶名'@'%' IDENTIFIED BY '密碼'-- 授予該用戶對所有數據庫的所有權限(生產環境慎用)
GRANT ALL PRIVILEGES ON *.* TO '用戶名'@'%'-- 刷新權限使更改立即生效
FLUSH PRIVILEGES;
語句解釋:
- CREATE USER: 創建新用戶賬戶
- ‘username’@‘%’: 用戶名和允許連接的主機(%表示任何主機)
- IDENTIFIED BY: 設置用戶密碼
- GRANT ALL PRIVILEGES: 授予用戶所有權限
- *.*: 第一個表示所有數據庫,第二個表示所有表
- FLUSH PRIVILEGES: 重新加載權限表,使更改立即生效
方法二:修改現有用戶的訪問限制
-- 查看現有用戶及其訪問權限
SELECT user, host FROM mysql.user;-- 修改用戶的host限制(從localhost改為任意主機)
UPDATE mysql.user SET host='%' WHERE user='username';-- 刷新權限
FLUSH PRIVILEGES;
語句解釋:
-
SELECT user, host: 查看用戶及其允許連接的主機
-
UPDATE mysql.user: 直接修改用戶表
- 將host從’localhost’改為’%'允許遠程連接
-
FLUSH PRIVILEGES: 使更改生效
方法三:授予特定數據庫的特定權限
-- 授予用戶對特定數據庫的特定權限
GRANT SELECT, INSERT, UPDATE, DELETE ON dbname.* TO 'username'@'%';-- 查看已授予的權限
SHOW GRANTS FOR 'username'@'%';-- 刷新權限
FLUSH PRIVILEGES;
語句解釋:
-
GRANT: 授予特定權限
-
SELECT, INSERT, UPDATE, DELETE: 只授予這些操作權限
-
dbname.*: 只對dbname數據庫的所有表有效
-
-
SHOW GRANTS: 查看用戶的權限
-
FLUSH PRIVILEGES: 使更改生效
2. 修改 MySQL 配置文件
-
找到MySQL配置文件位置:
-
Ubuntu/Debian: /etc/mysql/mysql.conf.d/mysqld.cnf
-
CentOS/RHEL: /etc/my.cnf 或 /etc/mysql/my.cnf
-
-
編輯配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
- 找到并修改以下行:
# 原內容可能是
bind-address = 127.0.0.1# 修改為(允許所有IP連接)
bind-address = 0.0.0.0# 或者注釋掉這行
# bind-address = 127.0.0.1
- 重啟MySQL服務:
sudo systemctl restart mysql
# 或
sudo service mysql restart
3. 安全最佳實踐
- 最小權限原則:
-- 只授予必要的最小權限
GRANT SELECT ON dbname.tablename TO 'username'@'specific_ip';
- 限制訪問IP:
-- 只允許特定IP連接
CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'password';
- 定期審計權限:
-- 查看所有用戶權限
SELECT user, host FROM mysql.user;-- 查看特定用戶權限
SHOW GRANTS FOR 'username'@'%';
- 使用SSH隧道(更安全):
ssh -L 3306:localhost:3306 username@mysql-server-ip
- 修改默認端口(可選):
# 在my.cnf中添加
[mysqld]
port = 3307
4. 測試遠程連接
在遠程機器上測試:
mysql -u username -p -h mysql-server-ip
5. 撤銷權限或刪除用戶
-- 撤銷所有權限
REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'%';-- 刪除用戶
DROP USER 'username'@'%';-- 刷新權限
FLUSH PRIVILEGES;