在日常使用 MySQL 数据库时,我们一般设置为root用户远程登录,但是有时候我们确实需要远程访问,所以我们需要配置非 root 用户进行远程访问。这样做不仅可以增强数据库的安全性,还能更灵活地管理数据库访问权限。下面是一个详细的指南,帮助你设置非 root 用户远程登录 MySQL。
第一步:登录 MySQL
首先,使用具有管理员权限的用户(如 root)登录 MySQL。
mysql -u root -p
输入 root 用户的密码以登录 MySQL 命令行界面。
第二步:创建新用户
使用 CREATE USER 命令创建一个新用户,并指定该用户可以从哪些主机进行连接。为了允许远程登录,将主机名指定为 %,表示允许从任何主机连接,或者设置你本地的固定的ip。
CREATE USER 'newuser'@'%' IDENTIFIED BY 'user_password';
在上述命令中,将 newuser 替换为你想要创建的用户名,并将 user_password 替换为用户的密码。
第三步:授予权限
使用 GRANT 命令授予新用户适当的权限。可以根据需要授予全局权限、数据库级权限或特定表的权限。
授予全局权限:
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' WITH GRANT OPTION;
. 这两个 * 分别代表数据库和数据库中的表。授予特定数据库权限(例如,授予 mydatabase 数据库的所有权限):
GRANT ALL PRIVILEGES ON mydatabase.* TO 'newuser'@'%';
第四步:刷新权限
为了使所做的权限更改生效,运行以下命令:
FLUSH PRIVILEGES;
第五步:配置 MySQL 监听所有 IP 地址
这一步容易忽略,有时候权限,防火墙,认证插件改来改去,还是不能访问,实际就是这里绑定的127.0.0.1,需要修改为0.0.0.0。 确保 MySQL 服务器配置为监听所有 IP 地址,而不仅仅是 localhost。编辑 MySQL 的配置文件 my.cnf(通常位于 /etc/mysql/my.cnf 或 /etc/my.cnf):
[mysqld]
bind-address = 0.0.0.0
保存更改并重启 MySQL 服务:
sudo service mysql restart
第六步:配置防火墙
确保防火墙允许从外部主机连接到 MySQL 的 3306 端口。
使用 iptables 开放 3306 端口:
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
sudo netfilter-persistent save
总结
通过以上步骤,你可以成功配置一个非 root 用户远程登录 MySQL 服务器。这不仅增强了数据库的安全性,还能更灵活地管理用户访问权限。以下是完整的步骤总结:
登录 MySQL:使用管理员用户(如 root)登录 MySQL。 创建新用户:使用 CREATE USER 命令创建新用户并允许远程连接。 授予权限:使用 GRANT 命令授予新用户适当的权限。 刷新权限:运行 FLUSH PRIVILEGES 使权限更改生效。 配置 MySQL:编辑 my.cnf 确保 MySQL 监听所有 IP 地址。 配置防火墙:使用 iptables 开放 3306 端口以允许远程连接。 通过这些配置,你的 MySQL 服务器将允许非 root 用户进行远程访问,从而提高管理的灵活性和安全性。