我正在使用XAMPP设计一个测试页面,该页面使用验证方法登录.到目前为止,我一直使用"根"帐户来判断试图登录的用户是否确实存在(如果我试图以登录用户的身份连接,但它不存在或密码不匹配,它会立即抛出致命错误),但这当然会使根帐户容易受到攻击,因为密码显示在代码中.因此,我考虑创建一个只有SELECT个权限的新用户,并使用它来判断登录用户.然而,每当我try 运行代码时,它也会抛出致命错误.

出现错误的代码: $conn = new mysqli('localhost', "test_conn", "1234", "mysql");

错误消息:

Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'test_conn'@'localhost' (using password: YES) in C:\[path]\sesion.php:41 Stack trace: #0 C:\[path]\sesion.php(41): mysqli->__construct('localhost', 'test_conn', Object(SensitiveParameterValue), 'mysql') #1 {main} thrown in C:\[path]\sesion.php on line 41

用户在phpMyAdmin上 Select (缩写,其余值为"N"或空):

 Host   User    Password    Select_priv
%   test_conn   *A4B6157319038724E3560894F7F932C8886EBFCF   Y
localhost   test_conn       Y

已try 可能的解决方案:

  • 将‘localhost’替换为‘127.0.0.1’
  • 将‘host’列更改为‘localhost’(我创建的用户将‘%’作为主机,如SELECT语句所示)
  • 将‘Localhost’替换为‘%’

推荐答案

名为mysql的数据库是保留的数据库,只能使用用户root访问.

我认为您可以将某些权限授予您的用户.但是使用根目录会更明智!

GRANT ALL PRIVILEGES ON *.* TO 'test_conn'@'%';
FLUSH PRIVILEGES;

或者您错误地使用了数据库名称!

您必须创建一个数据库并在php代码中使用它的名称!

$conn = new mysqli('localhost', "my_user", "1234", "my_db_name");

对于MySQL部件:

CREATE SCHEMA my_db_name; 
GRANT ALL PRIVILEGES ON my_db_name.* TO 'my_user'@'%' IDENTIFIED BY '1234';
FLUSH PRIVILEGES;

这段代码创建了一个名为my_db_name的数据库,然后使用密码1234创建了一个名为my_user的用户,并为该用户提供了对创建的数据库的所有权限!

Mysql相关问答推荐

返回50%的随机结果

MySQL binlog事件上的并发事务行为

了解MySQL_stmt_BIND_NAMED_Param()-MySQL C API

MySQL中的where语句会 destruct 全外连接.

如何将多个字符串插入变量

MySQL 可以用于将列表排序为三分之三吗?

使用索引进行查询优化

高效的 SQL 查询,用于计算半小时时间序列中已发生的行的一部分

0000-00-00 00:00:00 表中的日期设置为 NOT NULL

需要按总金额检索前 3 个供应商,每个类别 - 子类别

MySQL 中的 LATERAL 语法 - 是否只是说左表首先执行以便下一个可以引用它?

MySQL中两个时间字段的分钟差

Laravel $q->where() 日期之间

如何在 MySQL 中为用户设置默认架构

在 MySQL Workbench EER 图中的多个列上创建唯一约束

如何存储重复日期牢记夏令时

由于在 MySQL 中使用保留字作为表名或列名导致的语法错误

utf8mb4_unicode_ci 与 utf8mb4_bin

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'

MySql 两个时间戳之间的天数差异?