我的公司在服务器上有一个带有IP:10.10.3.39的Perl应用程序。
由于新规则的实现,我必须使用IP:10.10.1.18在服务器中将数据库迁移到10.10.1.18数据库。
我的公司DB管理员已经创建了一个帐户,并授予应用程序用户名:'user'@'10.10.3.39'的访问权限。因此,该帐户只需使用IP 10.10.3.39服务器即可使用。
我使用命令mysql -h 10.10.1.18 -u user -p尝试了服务器中的连接
[hanief@dev39 project]$ mysql -h 10.10.1.18 -u user -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 19484169
Server version: 10.0.15-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>我在Perl中有一个数据库连接脚本test_db.pm,如下所示:
use DBI;
$user = "user";
$pw = 'password';
$dbh = DBI->connect("DBI:mysql:database=mysql;host=10.10.1.18;mysql_enable_utf8=1",$user, $pw, %attr) or die "Cannot connect to MySQL server\n";然后,我尝试使用命令perl test_db.pm运行它,得到了以下错误
[hanief@dev39 project]$ perl test_db.pm
DBI connect('database=mysql;host=10.10.1.18;port=3306;mysql_enable_utf8=1','user',...)
failed: Access denied for user 'user'@'%' to database 'mysql' at test_db.pm line 6.
Cannot connect to MySQL server我不知道为什么账户名突然有@'%'在后面
我尝试将变量$user更改为:
$user = "user\@10.10.3.39";failed: Access denied for user 'user@10.10.3.39'@'10.10.3.39' (using password: YES) at test_db.pm line 6.$user = "user\@'10.10.3.39'";failed: Access denied for user 'user@'10.10.3.39''@'10.10.3.39' (using password: YES) at test_db.pm line 6.$user = "'user'\@'10.10.3.39'";failed: Access denied for user 'user'@'10.10.3.39'@'10.10.3.39' (using password: YES) at test_db.pm line 6.但还是没起作用。服务器仍然无法连接到DB服务器。
我不知道为什么在用户帐户后面有一个额外的
@'10.10.3.39'。不知道为什么%之前突然变成了10.10.3.39
我的案子有什么解决办法吗?
发布于 2021-11-04 11:05:36
我不太清楚这是怎么回事,但我想我可以给你一点启示。
MySQL (因此,也就是MariaDB)有一个不只是依赖用户名和密码的登录系统。它还考虑到连接来自哪个主机。如果您查看mysql.user表,您将看到前三列是Host、User和Password。
Host列很有趣。它可以包含IP地址或主机名,但也可以包含符号'%',意思是“任意主机”。
所以当DBA告诉你他们有:
创建一个帐户并授予应用程序用户名:
'user'@'10.10.3.39'的访问权限
我敢打赌,它们意味着它们已经将user和10.10.3.39值插入到mysql.user表中。
这意味着您的$user变量需要设置为user,而不是user@10.10.3.39,因为MySQL将从传入连接中计算出IP地址。
所以当你看到这样的错误时:
失败:用户“用户@10.10.3.39”@“10.10.3.39”被拒绝访问
第一对引号("user@10.10.3.39")中的位是您试图使用的用户名,第二对引号("10.10.3.39")中的位是MySQL认为您正在连接的IP地址。显然,这是行不通的,因为mysql.users表中不存在这个用户名。
所以,让我们看一下第一个例子:
$dbh = DBI->connect("DBI:mysql:database=mysql;host=10.10.1.18;mysql_enable_utf8=1",$user, $pw, %attr)
or die "Cannot connect to MySQL server\n";这就产生了这个错误:
失败:拒绝用户“用户”@‘%’的访问
现在,此错误使用"%“作为主机名的事实似乎意味着,MariaDB服务器没有将您来自的IP地址识别为您的用户所允许的特定IP地址之一。
所以,在这个例子中,我要反复检查两件事:
mysql.user表中的IP地址,真的是10.10.3.39吗?或者,该值是否包含错误?我知道这不是一个“这是你的问题的解决方案”的帖子,但希望它能解释更多关于正在发生的事情,并为你提供一些调查的途径。
https://stackoverflow.com/questions/69833666
复制相似问题