我想使用命令提示符从Windows连接到Linux上的MySQL服务器,并使用以下命令:
prompt>mysql -u root -p -h remote_hostname连接、端口、用户帐户和凭据都很好。但是它抛出了以下错误:
错误1130 (HY000):不允许主机'my_hostname‘连接到此MySQL服务器
我想知道是否可以通过Windows命令提示符与Linux通信?或者,在设计提示符时,根本不需要连接到Linux进行任何远程操作吗?或者它在MySQL的情况下是特别的。
我注意到,我可以从Linux连接到Windows,但正如我前面解释的那样,当我尝试时,情况就不可能相反了。
有人知道对此的理论解释吗?
发布于 2012-10-09 13:34:59
您说“连接、端口、用户帐户和凭据都很好”,但我有疑问。
提到来自文档的确切错误:
当尝试从运行误差服务器的主机以外的主机连接时发生,这意味着用户表中没有与客户端主机匹配的主机值行
查看Linux服务器上的mysql.user表,了解windows计算机的用户/主机组合的用户条目:
SELECT User, Host FROM mysql.user WHERE User='my_user' AND Host='windows_ip';如果不返回结果,则需要添加该用户。如果它确实返回了一个结果,你能把它加到你的问题中吗?
发布于 2017-10-12 13:35:56
迟到了5年,但唯一的答案出现在这里,而准确的让我感到不满意。
原因是评论中的OP问“如果我必须指定要连接的单个ip地址,用通配符"%”创建用户有什么意义?我是否限制服务器允许从指定主机连接到用户的给定权限,用户可以在任何地方进行连接?“
在几个问题上似乎有些混淆,包括绑定地址的用途以及从vs连接到的连接之间的区别。
从医生那里..。“MySQL服务器在一个网络套接字上监听TCP/IP连接。这个套接字绑定到一个地址,但是一个地址可以映射到多个网络接口上。”
简单地说,服务器绑定到一个并且只有一个地址。客户端只能连接到服务器正在侦听连接尝试的地方。客户端连接到服务器。服务器接收来自客户端的连接尝试。如果客户端从client.com连接,那么如果连接要成功,服务器必须允许该主机-- client.com --在授予表中。
这就是为什么德里克·唐尼说:
查看Linux服务器上的mysql.user表中是否有一个用户条目,其中包含windows机器的用户/主机组合:选择User,Hostfrommysql.user,其中User='my_ user‘和Host='windows_ip';如果没有返回结果,则需要添加该用户。
因此,"lo“是一个接口,它是与localhost/127.0.0.1相关联的接口。localhost被映射到/etc/host中的127.0.0.1 --尽管有些发行版添加了一些新的构造,我将在这里不进行介绍。eth0曾经是一个以太网接口,现在它类似于enp5s0 (至少在ubuntu上是这样)。该接口与其他地址(如192.168.0.2或101.25.45.107 )相关联,通常与物理网络接口卡(NIC)相关联。
当客户端想要连接时,它指定要连接到的位置--什么地址和端口。服务器正在侦听绑定地址和配置端口(默认情况下为3306)。由于地址可以映射到多个网络接口上,所以服务器可以监听与所述接口相关联的多个IP地址。
接下来是拨款表。授权表指定允许哪些客户端连接--这就是添加客户端的位置。如果只允许user@localhost,则远程连接将失败。OP声明他尝试了用户@%作为测试,因此这表明OP的问题在其他地方。我不是一个安全专家,但我认为这可能是安全的(作为用户的密码安全),只要您不使用根用户或其他特权用户作为您的“用户”。否则,有人可以打你的帐户远程。如果您有安全意识,最好指定特定的主机来允许。
我猜您的表中有一个匿名用户,您的客户端首先匹配这个用户。解决方案:删除该用户。使用"SELECT User,Host FROM mysql.user“查看表中的用户。你可能会对你所看到的感到惊讶。确保您理解为什么每行都在表中。
这篇文章在这一点上太长了,所以找其他地方来确保你的安装安全。这是一个很好的起点,但现在已经5年了,当然比OP使用的版本要晚:https://dev.mysql.com/doc/refman/5.7/en/default-privileges.html提供了更多关于匿名用户的详细信息。下面是从https://dev.mysql.com/doc/refman/5.7/en/server-options.html复制的
MySQL服务器在单个网络套接字上侦听TCP/IP连接。此套接字绑定到单个地址,但地址可以映射到多个网络接口。若要指定地址,请在服务器启动时使用--= addr选项,其中addr是IPv4或IPv6地址或主机名。如果addr是主机名,则服务器将名称解析为IP地址并绑定到该地址。服务器将不同类型的地址处理为:如果地址为*,服务器在所有服务器主机IPv6上接受TCP/IP连接,如果服务器主机支持IPv6则接受IPv4接口,或者在所有IPv4地址上接受TCP/IP连接。使用此地址可以在所有服务器接口上同时使用IPv4和IPv6连接。此值是默认值。如果地址为0.0.0.0,则服务器在所有服务器主机IPv4接口上接受TCP/IP连接。如果地址为::,则服务器在所有服务器主机IPv4和IPv6接口上接受TCP/IP连接。如果地址是IPv6 4映射的地址,则服务器以IPv4或IPv6格式接受该地址的TCP/IP连接。例如,如果服务器绑定到::ffff:127.0.0.1,则客户机可以使用--host=127.0.0.1或--host=::ffff:127.0.0.1进行连接。如果地址是“常规”IPv4或IPv6地址(例如127.0.0.1或:1),服务器只接受该IPv4或IPv6地址的IPv4/IP连接。如果要将服务器绑定到特定地址,请确保mysql.user授予表包含一个具有管理权限的帐户,您可以使用该帐户连接到该地址。否则,您将无法关闭服务器。例如,如果将服务器绑定到*,则可以使用所有现有帐户连接到它。但是,如果将服务器绑定到:1,它只接受该地址上的连接。在这种情况下,首先要确保‘root’@:1‘帐户存在于mysql.user表中,以便您仍然可以连接到服务器来关闭它。
https://dba.stackexchange.com/questions/25675
复制相似问题