除root用户外,拒绝用户“test”@“localhost”(使用密码:YES)的访问

我面临与MySQL非root / admin用户的问题,我按照以下步骤创build用户及其权限,纠正我,如果我做错了,

我正在安装mysql RHEL 5.7 64bit ,下面提到的包,一旦我完成rpm install我们

  1. 然后使用mysql_install_db创buildmysql数据库
  2. 然后启动mysql服务
  3. 使用mysql_upgrade也是我们对服务器做的。

在这个过程之后,我可以以root身份login,但使用非root用户login到服务器:

 [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) 

这是我面临的问题,有没有解决办法呢?

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

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

这个语句创build一个新的用户并授予它选定的特权。 IE:

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

看看文档 ,看看所有的权限详细

编辑:你可以找这个查询更多的信息(以“根”login):

 select Host, User from mysql.user; 

看看发生了什么事

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

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

尝试login到MYSQL实例。
这对我来说是消除这个错误。

尝试:

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

或者甚至更好地使用: mysql_setpermission来创build用户

对于所有的build议,但问题的任何人仍然存在。

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

当我们将通配符主机(%)更改为IP特定时,我的问题就出现了,这使得数据库更安全。 不幸的是,即使'user''172 ….'在技术上是正确的,仍然有一些视图仍在使用'user'@'%'。

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

因此,我通过指定--host=127.0.0.1来解决它

 mysql -p mydatabase --host=127.0.0.1 

按照创build用户的方式,MySQL解释不同的方式。 例如,如果你创build一个这样的用户:

 create user user01 identified by 'test01'; 

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

不要忘记flush privileges;

但是,如果您通过传递IP地址来创build用户,则必须将其更改为:

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

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

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

它看起来像你试图做一个用户'黄金'@'%',但一个不同的用户的名字'黄金'@'本地主机'是阻碍/优先。

做这个命令看用户:

 SELECT user,host FROM mysql.user; 

你应该看到两个条目:

1)user = golden,host =%

2)user = golden,host = localhost

做这些命令:

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

重新启动MySQL工作台。

然后再次执行您的原始命令:

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

然后,当您尝试loginMySQL时,请像这样input:

在这里输入图像描述

点击“testing连接”并input您的密码“密码”。

在我的情况下,同样的错误发生,因为我试图通过只input“mysql”,而不是“mysql -u root -p”

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