这应该很简单,但我不能让它为我的一生工作。我只是想远程连接到我的MySQL服务器。
连接方式:mysql-u根-h本地主机-p工作正常,但尝试:mysql-uroot-h'这里的任何ip地址'-p失败,错误为:错误1130(00000):主机“xxx.xx.xxx.xxx”不允许连接到此MySQL服务器
在mysql.user表中,主机为“localhost”的用户“root”的条目与主机为“%”的用户完全相同。
我束手无策,不知道该怎么办。欢迎提出任何想法。
这应该很简单,但我不能让它为我的一生工作。我只是想远程连接到我的MySQL服务器。
连接方式:mysql-u根-h本地主机-p工作正常,但尝试:mysql-uroot-h'这里的任何ip地址'-p失败,错误为:错误1130(00000):主机“xxx.xx.xxx.xxx”不允许连接到此MySQL服务器
在mysql.user表中,主机为“localhost”的用户“root”的条目与主机为“%”的用户完全相同。
我束手无策,不知道该怎么办。欢迎提出任何想法。
当前回答
这适用于任何未来的远程mysql连接!
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
导航到以bind address指令开头的行。应该是这样的:
bind-address = 0.0.0.0
以root终端身份登录mysql
mysql -u root -p
-- root password
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
最后,使用以下命令授予该计算机远程连接到数据库的独占权限。
sudo ufw allow from remote_IP_address to any port 3306
其他回答
只需使用MySql的GUI工具(SQLyog)提供的界面:
单击用户管理器:
现在,如果您想授予任何其他远程PC的访问权限,只需确保,正如下图所示,主机字段值为%(这是通配符)
可能是安全预防措施。您可以尝试添加新的管理员帐户:
mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
-> WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
-> WITH GRANT OPTION;
尽管正如Pascal和其他人所指出的那样,让一个拥有这种访问权限的用户访问任何IP都不是一个好主意。如果您需要管理用户,请使用root,并将其保留在localhost上。对于任何其他操作,请精确指定所需的权限并限制用户的可访问性,正如Pascal在下面所建议的那样。
编辑:
从MySQL常见问题解答:
如果你不明白为什么访问被拒绝,从用户中删除表中包含主机的所有条目包含通配符的值(条目包含“%”或“_”字符)。A.非常常见的错误是插入新的主机=“%”且用户=“some_User”,认为这允许您将localhost指定为从同一台计算机连接。这个这不起作用的原因是默认权限包括带有Host='localhost'和用户=“”。因为该条目具有主机值'localhost',大于特定于“%”,它用于新条目的首选项从本地主机连接!正确的过程是插入第二个条目主机=“本地主机”且用户=“some_User”,或删除带有Host='localhost'和用户=“”。在删除条目之后,记住要发布FLUSH特权语句重新加载授权表。另请参见第5.4.4节“通道”控制,第1阶段:连接验证”。
如果您使用的是MySQL WorkBench,则可以轻松实现:
从菜单中,选择服务器->用户和权限在左下方,单击“添加帐户”用用户名、主机匹配(%表示每个主机)和密码填写表单单击右下方的“应用”
之后你就可以走了。然后,如果要优化配置,可以使用“管理角色”选项卡设置用户可以使用的命令(SELECT、ALTER等),使用“架构权限”选项卡将用户交互限制为特定的架构。
1.从终端将您连接到MySQL运行容器
docker exec -it your_container_name_or_id bash
2.在容器中,将您连接到MySQL数据库
mysql -u your_user -p
输入密码以连接到数据库。
3.执行此SQL脚本以列出所有现有数据库用户:
SELECT host, user FROM mysql.user;
结果如下:
host | user |
---|---|
127.0.0.1 | root |
::1 | root |
localhost | mysql.sys |
localhost | root |
您应该添加新行:
host | user |
---|---|
% | root |
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
我的错误消息类似,说“主机XXX不允许连接到此MySQL服务器”,即使我使用的是root。以下是如何确保root用户具有正确的权限。
我的设置:
Ubuntu 14.04 LTSMySQL v.5.37
解决方案
打开etc/mysql/my.cnf下的文件检查:端口(默认为端口=3306)绑定地址(默认情况下,这是绑定地址=127.0.0.1;如果您想向所有人打开,那么只需注释掉这一行。例如,我会说实际服务器在10.1.1.7上)现在在您的实际服务器上访问MySQL数据库(假设您的远程地址是123.123.123.123,端口3306为用户根,我想更改数据库“数据输入”的权限。请记住将IP地址、端口和数据库名称更改为您的设置)mysql-u根-p输入密码:<输入密码>mysql>GRANT ALL ON*.*to root@'123.123.123.123'IDENTIFIED BY'put your password';mysql>FLUSH特权;mysql>退出sudo服务mysqld重启现在您应该能够远程连接到数据库。例如,我使用MySQL Workbench并输入“主机名:10.1.1.7”、“端口:3306”、“用户名:root”