MySQL: Access denied for user 'test'@'localhost' (using password: YES) except root user

I am facing problem with mysql non root/admin user, I am following the below steps for creating user and its privileges, correct me if i am doing wrong,

i am installing mysql on RHEL 5.7 64bit, packages are mentioned below, once i done the rpm install we are

  1. creating mysql db using mysql_install_db, then
  2. starting the mysql service then
  3. using mysql_upgrade also we are doing to the server.

After this process i can login as root but with a non-root user I am not able to log into the server:

[root@clustertest3 ~]# rpm -qa | grep MySQL
MySQL-client-advanced-5.5.21-1.rhel5
MySQL-server-advanced-5.5.21-1.rhel5




[root@clustertest3 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1


# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


[root@clustertest3 ~]# ls -ld /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Nov  30 11:09 /var/lib/mysql/mysql.sock


mysql> CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)


mysql> GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';
Query OK, 0 rows affected (0.00 sec)


mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)


mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)


[root@clustertest3 ~]# mysql -ugolden -p
Enter password:
ERROR 1045 (28000): Access denied for user 'golden'@'localhost' (using password: YES)

This is the problem I am facing, is there any solution to this?

706310 次浏览

试试:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost';
FLUSH PRIVILEGES;

或者更好地使用: mysql_setpermission来创建用户

不要将所有数据库的所有权限授予非 root 用户,这样做是不安全的(并且您已经拥有该角色的“ root”)

GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

此语句创建一个新用户并向其授予选定的权限。 例如:

GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

查看 docs以查看所有特权的详细信息

编辑: 您可以通过这个查询查找更多信息(以“ root”登录) :

select Host, User from mysql.user;

看看发生了什么

对于任何其他人谁做了所有的建议,但问题仍然存在。

检查存储过程并查看 DEFINERS。这些定义器可能不再存在。

当我们将通配符主机(%)更改为特定于 IP 的,从而使数据库更加安全时,出现了问题。不幸的是,有些视图仍然使用“ user”@“%”,尽管“ user”@“172... .”在技术上是正确的。

如果您使用远程机器(例如工作台)等连接到 MySQL,请使用以下步骤来消除安装 MySQL 的操作系统上的此错误

mysql -u root -p


CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>';
GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%';
FLUSH PRIVILEGES;

Try logging into the MYSQL instance.
这样我就消除了这个错误。

只需在主机名或 MySQL 主机地址中添加计算机名,而不是“ localhost”。

我也有类似的问题,后来我发现这是因为我改变了我的主机名(而不是 localhost)。

Therefore I get it resolved by specifying the --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1

根据您创建用户的方式,MySQL 解释了一种不同的方式:

create user user01 identified by 'test01';

MySQL 希望您使用 grant all on <your_db>.* to user01;提供一些特权

别忘了 flush privileges;

但是,如果您创建这样的用户(通过传递一个 IP 地址) ,您必须将其更改为:

create user 'user02'@'localhost' identified by 'teste02';

所以,为了给你一些特权,你必须这样做:

grant all on <your_db>.* to user02@localhost;
flush privileges;

在我的例子中,同样的错误发生了,因为我试图通过输入“ mysql”而不是“ mysql-u root-p”来使用 mysql

看起来您正在尝试创建一个用户“ gold”@’%”,但是另一个名为“ gold”@‘ localhost”的用户阻碍了/具有优先级。

执行以下命令查看用户:

SELECT user,host FROM mysql.user;

您应该会看到两个条目:

用户 = 黄金,主机 =%

用户 = 黄金,主机 = 本地主机

执行以下命令:

DROP User 'golden'@'localhost';
DROP User 'golden'@'%';

重新启动 MySQL 工作台。

然后再次执行原来的命令:

CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';

然后当你尝试登录 MySQL 时,像这样输入:

enter image description here

点击“测试连接”并输入密码“密码”。

从 mysqlworkbench 连接服务器并运行以下命令-> 用户‘ root’@‘ localhost’标识为‘ yourpassword’;

首先,我使用以下方法创建用户:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

在谷歌和看到 这个之后,我更新了用户的密码:

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('password_txt');

然后我就可以和他交流了。

确保用户在 users 表中有一个 localhost 条目:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

对于在搜索此错误消息后到达这里的烦人搜索:

拒绝访问用户‘ somuser@where’(使用密码: YES)

我的问题是没有将密码放在引号中,例如,我需要使用 -p'password'而不是 -ppassword

试试这个:

如果您已经创建了用户,那么您可能使用错误的密码创建了用户。

因此,删除该用户并通过这样做创建另一个用户。 查看当前用户

SELECT Host,User FROM mysql.user;

To drop the user

DROP User '<your-username>'@'localhost';

After this you can create the user again with the correct password

CREATE USER '<your-username>'@'localhost' IDENTIFIED WITH mysql_native_password BY '<correct password>';

那么

FLUSH PRIVILEGES;

在访问数据库时,您可能仍然会遇到一些更多的错误,如果您运行此错误的话。

GRANT ALL PRIVILEGES ON *.* to '<your-username>'@'localhost';

ERROR 1045 (28000): Access denied for user的错误可能并不总是与特权问题有关,而是与存在 在命令结束时缺少 -p这一事实有关:

# Will prompt us a mysql terminal in case there are no privilages issues
mysql -u root -p


# Will fail with the mentioned ERROR 1045
mysql -u root

在尝试使用下面的命令将特权授予已经存在的用户时遇到了类似的问题:

use my-db;
GRANT ALL PRIVILEGES ON my-database.* TO 'my-user'@'%' IDENTIFIED BY 'my-password';

我是这样解决这个问题的:

这与两个问题有关:

  1. 已经退出的用户的密码与 GRANT ALL PRIVILEGES命令中提供的密码不同。我必须使用已经存在的用户的正确密码重新运行 GRANT ALL PRIVILEGES

  2. 连接到数据库时提供的数据库服务器的主机名不正确。我在一个特定的数据库服务器上创建了数据库和用户,我试图连接到另一个不同于创建数据库和用户的数据库服务器的数据库服务器。我必须得到正确的数据库服务器主机名,我用它来连接。

在对所有这些进行排序之后,我能够使用凭据连接到数据库。

问题是 my-user已经拥有了我想授予它的特权。

You can check to see the privileges that you've granted your user using:

SHOW GRANTS FOR 'your-user'@'%';

或者

SHOW GRANTS FOR 'your-user'@'localhost';

仅此而已。

有时,它可能只是一个错误的密码。请记住你的密码,包括他们的敏感性。

我遇到了一个问题,结果被一个笨蛋解决了。 由于某些原因,“ locahost”没有解析任何内容,所以使用它的本地 IP 使它工作。

所以你会改变

mysql -h localhost -P 33061

致:

mysql -h 127.0.0.1 -P 33061