我在Web服务器上有一个perl脚本,它使用以下代码连接到远程服务器上的数据库:
my $dbusername='myname';
my $dbpassword='mypassword';
my $dbdatabasename='mydatabase';
my $driver = "mysql";
my $host='x.x.x.x'; # the actual ip of the mysql server
my $port='1010'; # the port it listens on
my $dsn = "DBI:$driver:database=$dbdatabasename;host=$host;port=$port";
$dbh = DBI->connect($dsn,$dbusername,$dbpassword, {
PrintError => 0, RaiseError => 1, });
一切正常。现在我想把perl脚本移到与数据库相同的机器上。所以我用$host='localhost'替换了上面的$host ip;
我还在数据库上创建了一个新用户(称为“webuser”),它与主机“localhost”匹配,而不是“%”,并且在新脚本中使用该连接的用户名和密码(我可以使用mysql工作台上的用户连接到数据库)。
但是当我运行scrpt时,我总是得到“拒绝访问用户'webuser'@'localhost'”
我还需要做什么?
它看起来确实像是权限问题(感谢ikegami),如果密码不正确的话,这和我预期的错误是一样的。但是我仔细检查了它,我可以使用完全相同的参数从命令行成功连接:mysql-uwebuser-pmypassword-hlocalhost-p1010 mydbname
mysql.exe程序和dbi模块使用的mysql驱动程序之间会有细微的区别吗?
稍后:我发现的一个区别是,当我从命令行连接时,我必须指定服务器正在侦听的端口号。如果不这样做,则会出现错误“无法连接到'localhost'上的mysql服务器”。
但是在perl程序中,无论我使用什么作为端口号,或者如果我根本没有指定端口,我都会得到“拒绝访问用户'webuser'@'localhost'”。事实上,如果我指定一个不存在的数据库名,我会得到相同的结果。
我想知道sql server是否拒绝访问,因为请求来自Web服务器区域(public\u html)中的程序。有可能吗?
暂无答案!
目前还没有任何答案,快来回答吧!