根用户以外的用户'test'@'localhost'的访问被拒绝(使用密码:是)


100

我遇到mysql非root / admin用户的问题,我正在按照以下步骤创建用户及其权限,如果我做错了,请纠正我,

我安装mysqlRHEL 5.7 64bit,包在下面所提到的,一旦我做了rpm install我们

  1. 使用创建MySQL数据库mysql_install_db,然后
  2. 然后启动mysql服务
  3. 使用mysql_upgrade也是我们正在做的服务器。

完成此过程后,我可以root以非root用户身份登录,但无法登录服务器:

[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用户身份登录然后执行吗SELECT * FROM mysql.user
Noam Rathaus 2013年

1
接受对您有用的答案,以便其他用户知道您如何解决您的问题。
不是用户的用户

Answers:


59

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

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

该语句创建一个新用户并为其授予选定的特权。IE浏览器:

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

查看文档以查看所有详细权限

编辑:您可以使用此查询查找更多信息(以“ root”身份登录):

select Host, User from mysql.user;

看看发生了什么


我不同意关于根的说法。是的,你不应该给威利·尼利超级特权。但是,通常您也不应使用共享帐户,因为您在数据库中没有适当的审计线索。如果必须具有共享帐户(例如root),则需要使用其他包装,以确保审核跟踪是完整的。
克拉德

36

如果要使用远程计算机(示例工作台)等连接到MySQL,请使用以下步骤消除在安装了MySQL的OS上的此错误

mysql -u root -p

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

尝试登录到MYSQL实例。
这为我消除了这个错误。


1
即使这样也不起作用,因为即使在运行“ mysql -u root -p”时也会提示错误
MarianKlühspies2015年

25

尝试:

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

甚至更好地使用:mysql_setpermission创建用户


1
这不能解决问题。创建用户'goldy'@'%'由'some_pass'标识;是有效的查询
pratim_b

由于某种原因,他%应该为所有主机工作的他没有解决它。因此,通过指定localhost它应该可以工作。如果该方法有效,则mysql中出现问题
Noam Rathaus

13

看起来您正在尝试使用户'golden'@'%'成为用户,但名称为'golden'@'localhost'的其他用户正在妨碍/具有优先权。

执行此命令以查看用户:

SELECT user,host FROM mysql.user;

您应该看到两个条目:

1)用户=黄金,主机=%

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

执行以下命令:

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

重新启动MySQL Workbench。

然后再次执行原始命令:

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

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

在此处输入图片说明

点击“测试连接”,然后输入密码“密码”。


2
这是我在这里找到的唯一有意义的解决方案。谢谢你,先生。
Sumuk Shashidhar,

8

首先,我使用创建用户:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

谷歌搜索,看到之后这个,我更新了使用用户的密码:

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

然后我可以连接。


3

对于所有提出了所有建议但仍然存在问题的人。

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

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


感谢您使我步入正轨。我什至不知道视图和存储过程的SQL安全设置。我最终在视图上将SQL Security设置为Invoker,以便它使用执行命令的用户而不是创建视图的用户的权限。这是参考链接:dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
贾斯汀

2

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

因此,通过指定 --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1

2

确保用户在用户表中具有本地主机条目。那就是我遇到的问题。例如:

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

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;

0

就我而言,发生同样的错误是因为我试图通过仅键入“ mysql”而不是“ mysql -u root -p”来使用mysql


0

从mysqlworkbench连接服务器,并运行以下命令-> ALTER USER'root'@'localhost'IDENTIFIED BY'yourpassword';


0

搜索此错误消息后,烦人的搜索到达此处:

用户'someuser @ somewhere'的访问被拒绝(使用密码:是)

对我而言,问题不是将密码括在引号中。例如。我需要用-p'password'代替-ppassword


-8

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.