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

时间:2013-12-03 14:10:01

标签: mysql mysql-error-1045

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

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

  1. 使用mysql_install_db创建mysql数据库,然后
  2. 启动mysql服务然后
  3. 使用mysql_upgrade我们也在服务器上。
  4. 在此过程之后,我可以以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)
    

    这是我面临的问题,有什么解决办法吗?

15 个答案:

答案 0 :(得分:52)

不要将所有数据库的所有权限授予非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;

看看发生了什么

答案 1 :(得分:27)

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

mysql -u root -p

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

尝试登录MYSQL实例 这对我有用,可以消除这个错误。

答案 2 :(得分:21)

尝试:

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

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

答案 3 :(得分:8)

看起来你正试图让一个用户“淘金”&#39;%&#39;%&#39;但是另一个用户名为“金色&#39; @&#39; localhost&#39;正在阻碍/优先考虑。

执行此命令以查看用户:

SELECT user,host FROM mysql.user;

您应该看到两个条目:

1)user = golden,host =%

2)user = golden,host = localhost

执行以下命令:

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

重启MySQL Workbench。

然后再次执行原始命令:

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

然后,当您尝试登录MySQL时,请按以下方式键入:

enter image description here

点击&#39;测试连接&#39;并输入密码&#39;密码&#39;。

答案 4 :(得分:6)

首先我使用:

创建了用户
CREATE user user@localhost IDENTIFIED BY 'password_txt';

在Google上搜索this后,我使用以下内容更新了用户密码:

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

然后我可以连接。

答案 5 :(得分:3)

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

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

当我们将通配符主机(%)更改为特定于IP时,我的问题出现了,使数据库更安全。不幸的是,有些观点仍在使用&#39;用户&#39;%&#39;%&#39;即使用户&#39; @&#39; 172 ....&#39;在技​​术上是正确的。

答案 6 :(得分:1)

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

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

来解决问题
mysql -p mydatabase --host=127.0.0.1

答案 7 :(得分: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;

答案 8 :(得分:1)

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

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

答案 9 :(得分:0)

在我的情况下,同样的错误发生,因为我只是输入&#34; mysql&#34;我试图使用mysql。而不是&#34; mysql -u root -p&#34;

答案 10 :(得分:0)

从mysqlworkbench连接您的服务器并运行此命令 - &gt; 更改用户'root'@'localhost'通过'yourpassword'识别;

答案 11 :(得分:0)

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

  

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

对我来说,问题在于密码未包含在引号中。例如。我需要使用-p'password'而不是-ppassword

答案 12 :(得分:0)

试试这个:

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

因此删除该用户并通过执行此操作创建另一个用户。 查看您当前的用户。

SELECT Host,User FROM mysql.user;

删除用户

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

此后您可以使用正确的密码再次创建用户

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

然后

FLUSH PRIVILEGES;

在访问数据库时,您可能仍会遇到更多错误,如果出现该错误,请运行此程序。

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

答案 13 :(得分:0)

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    

答案 14 :(得分:-5)

只需添加计算机名称,而不是&#39; localhost&#39;在主机名或MySQL主机地址中。