我发现了很多关于此错误的帖子,尝试了所有但仍然得到相同的错误。我正在尝试从我的远程应用程序和mysql客户端连接到ubuntu服务器上的mysql。让我发布我已经采取的任何步骤:
答案 0 :(得分:4)
"用户访问被拒绝' @' ip'(使用密码:是)"是一个MySQL错误。
这意味着在网络级别一切正常,因为要拒绝作为给定用户访问 ,服务器必须了解您是哪个用户尝试连接为。因此,网络,防火墙,路由等等,必须全部正常工作;服务器必须正在监听等。
问题出在"简单"在身份验证。
尝试本地连接到数据库(以覆盖身份验证)并检查权限表:
USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';
请记住,您感兴趣的行是提及IP的行(因为错误消息指定IP ,不主机名 - 在这种情况下,它可能是一个DNS问题;主机名是服务器认为你来自的主机名,而不是你真正来自的主机名。)
用户/主机匹配为from more specific to less specific。所以如果你已经有了:
user host password
test 1.2.3.4 foo
然后跑了,
GRANT... TO test@'%' ... PASSWORD bar
...此赠款可以在任何地方使用除 1.2.3.4之外,其中密码将保留为' foo'。
从手册(上面的链接):
服务器使用排序规则来排序具有最特定性的行 主机值首先。文字主机名和IP地址最多 具体。 (文字IP地址的特殊性不受影响 是否有网络掩码,所以192.168.1.13和 192.168.1.0/255.255.255.0被认为是同样具体的。)模式'%'意思是“任何主人”,并且是最不具体的。空字符串 ''也意味着“任何东道主”,但在'%'之后排序。具有相同主机的行 值首先按最具特定的用户值排序(空白 用户值表示“任何用户”,并且最不具体)。对于行 同等特定的主机和用户值,顺序是不确定的。
你可能被迫做
USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
确保授权表中没有任何虚假行,引用用户'测试'。
(另外,GRANT应该是,我认为,
GRANT ALL PRIVILEGES ON databasename.*
)
上面的手册说:文字IP地址的特殊性不受其是否具有网络掩码的影响,因此192.168.1.13和192.168.1.0/255.255.255.0被认为是同等特定的。 / p>
现在乍一看127.0.0.1/0.0.0.0
似乎对 localhost 非常具体(且无害)。网络掩码,如果我没有弄错的话,确保它等同于%
,,除非它非常具体并且将首先运行。因此
test bar %
test localfoo 127.0.0.1/0.0.0.0
表示test
的密码来自任何地方{&#34}}" bar"根本就是" localfoo"。
没有人会错误地插入这样的补助金,但有错误和错误。
答案 1 :(得分:1)
首先检查 - 它的网络/防火墙问题与否。 使用--skip-grant-tables启动MySql服务器,然后尝试连接到它。
答案 2 :(得分:0)
当尝试连接到我的MariaDb数据库时,.net核心控制台应用程序上出现了相同的错误。 我终于发现我的连接字符串中的uid不正确,因为它区分大小写! 即使我觉得自己很愚蠢,也可能会有所帮助...