Mysql(HY000/1045):通过php拒绝访问,但可以通过mac终端访问

Mysql(HY000/1045):通过php拒绝访问,但可以通过mac终端访问,php,mysql,warnings,Php,Mysql,Warnings,reslove:我使用127.0.0.1而不是localhost 我在mac终端使用用户名和密码成功访问mysql数据库globe_bank: Ashlys-MBP:~ Ashly$ mysql -u Webuser -p globe_bank Enter password: mysql> 但是,我不能使用相同的用户名和密码从php登录。以下是浏览器中显示的警告消息: 警告:mysqli_connect():(HY000/1045):拒绝用户访问 中的“webuser”@“local

reslove:我使用127.0.0.1而不是localhost

我在mac终端使用用户名和密码成功访问mysql数据库globe_bank:

Ashlys-MBP:~ Ashly$ mysql -u Webuser -p globe_bank
Enter password: 

mysql>
但是,我不能使用相同的用户名和密码从php登录。以下是浏览器中显示的警告消息:

警告:mysqli_connect():(HY000/1045):拒绝用户访问 中的“webuser”@“localhost”(使用密码:YES) /第6行的Applications/MAMP/htdocs/Globe_bank/private/database.php

这是我的密码:

define("DB_SERVER", "localhost");
define("DB_USER", "Webuser");
define("DB_PASS", "7654321aA!");
define("DB_NAME", "globe_bank");

  function db_connect() { 
    $connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME); //line 6
    return $connection;
  }

  function db_disconnect($connection) {
    if(isset($connection)) {
      mysqli_close($connection);// line 12
    }
  }

我检查了Webuser的授权:

mysql> SHOW GRANTS FOR 'Webuser'@'localhost';
+---------------------------------------------------------------------------+
| Grants for Webuser@localhost                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+---------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `Webuser`@`localhost` WITH GRANT OPTION                                                                                                                                               
| GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,GROUP_REPLICATION_ADMIN,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO `Webuser`@`localhost` WITH GRANT OPTION |

2 rows in set (0.00 sec)
然后

顺便说一下

  • mysql版本是mysql-8.0.22-macos10.15-x86_64

  • 这是我在终端中创建用户的方式:

    Ashlys-MBP:~ Ashly$ mysql -u Webuser -p globe_bank
    Enter password: 
    
    mysql>
    
    mysql>创建由“7654321aA!”标识的用户“Webuser”@“localhost”

  • 我的端口应该是8888,我使用MAMP,当它启动时,它显示 浏览器上的“localhost:8888/MAMP/?language=English”

  • 我重启了mysql,警告依然存在

  • 实际上,还有一条警告消息,我想引起这个警告的原因是因为我首先无法访问mysql数据库。底部显示的另一个警告是(我在上面的php代码中标记了第12行)

警告:mysqli_close()要求参数1为mysqli,bool给定 在线输入/Applications/MAMP/htdocs/Globe_bank/private/database.php 十二,

  • 找到了数据目录| datadir |/usr/local/mysql/data/|,但无法打开“文件夹”data,因为您没有 允许查看其内容。”
我遵循了一些建议,并做了以下几点:

mysql>描述用户

+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                    | Type                              | Null | Key | Default               | Extra |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                     | char(255)                         | NO   | PRI |                       |       |
| User                     | char(32)                          | NO   | PRI |                       |       |
| authentication_string    | text                              | YES  |     | NULL                  |       |
| password_expired         | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed    | timestamp                         | YES  |     | NULL                  |       |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
51 rows in set (0.01 sec)
然后

停止并重新启动Mysql。没有什么变化。同样的警告


我这里做错了什么,如何解决这个问题?

第5行是哪一行?你看过phpAdmin和用户帐户了吗?请在此处检查用户是否存在。请避免说“以前关联的堆栈溢出帖子没有帮助”之类的话,而是链接到对您不起作用的答案,并进一步告诉我们您尝试了什么以及为什么不起作用。可以查看mysql错误日志您是否尝试运行
刷新权限
?另外,为了理智起见,请尝试将密码重置为非常简单的密码。表mysql.user中的user
webuser
上是否有
authentication\u字符串
?查找grant命令中由子句标识的
。哪一行是第5行?你看过phpAdmin和用户帐户了吗?请在此处检查用户是否存在。请避免说“以前关联的堆栈溢出帖子没有帮助”之类的话,而是链接到对您不起作用的答案,并进一步告诉我们您尝试了什么以及为什么不起作用。可以查看mysql错误日志您是否尝试运行
刷新权限
?另外,为了理智起见,请尝试将密码重置为非常简单的密码。表mysql.user中的user
webuser
上是否有
authentication\u字符串
?查找grant命令上由
子句标识的
mysql> FLUSH PRIVILEGES; 
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                    | Type                              | Null | Key | Default               | Extra |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                     | char(255)                         | NO   | PRI |                       |       |
| User                     | char(32)                          | NO   | PRI |                       |       |
| authentication_string    | text                              | YES  |     | NULL                  |       |
| password_expired         | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed    | timestamp                         | YES  |     | NULL                  |       |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
51 rows in set (0.01 sec)
mysql> FLUSH PRIVILEGES;
mysql> UPDATE user SET authentication_string='7654321aA!' WHERE user='Webuser@localhost';