在 Ubuntu 上限制 MySQL / MariaDB 的访问,通常可以从 网络层、MySQL 用户权限、防火墙、配置文件 几个方面来做。下面按常见场景说明。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
或(MariaDB):
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
找到:
bind-address = 0.0.0.0
改为:
# 只允许本机访问
bind-address = 127.0.0.1
# 或只允许某个内网 IP
bind-address = 192.168.1.100
重启 MySQL:
sudo systemctl restart mysql
✅ 效果:外部网络无法直接连接 MySQL
SELECT user, host FROM mysql.user;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dbname.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
CREATE USER 'appuser'@'192.168.1.50' IDENTIFIED BY 'password';
GRANT SELECT, INSERT ON dbname.* TO 'appuser'@'192.168.1.50';
DROP USER 'root'@'%';
MySQL 默认端口:3306
sudo ufw deny 3306
sudo ufw allow from 192.168.1.50 to any port 3306
启用防火墙:
sudo ufw enable
UPDATE mysql.user SET host='localhost' WHERE user='root';
FLUSH PRIVILEGES;
或创建专用管理员用户。
不开放 3306 端口,通过 SSH:
ssh -L 3306:127.0.0.1:3306 user@server_ip
本地连接:
127.0.0.1:3306
✅ 生产环境建议:
bind-address = 127.0.0.1root@%如果你能说明:
我可以给你一套针对你场景的具体配置。