MySQL Error #1133 - Can't find any matching row in the user table

后端 未结 9 968
时光说笑
时光说笑 2020-12-08 04:06

Unable to set password for a user using 3.5.2.2 - phpMyAdmin for 5.5.27 - MySQL. When trying to set the password while logged onto ph

相关标签:
9条回答
  • 2020-12-08 04:12

    To expound on Stephane's answer.

    I got this error when I tried to grant remote connections privileges of a particular database to a root user on MySQL server by running the command:

    USE database_name;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
    

    This gave an error:

    ERROR 1133 (42000): Can't find any matching row in the user table
    

    Here's how I fixed it:

    First, confirm that your MySQL server allows for remote connections. Use your preferred text editor to open the MySQL server configuration file:

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    

    Scroll down to the bind-address line and ensure that is either commented out or replaced with 0.0.0.0 (to allow all remote connections) or replaced with Ip-Addresses that you want remote connections from.

    Once you make the necessary changes, save and exit the configuration file. Apply the changes made to the MySQL config file by restarting the MySQL service:

    sudo systemctl restart mysql
    

    Next, log into the MySQL server console on the server it was installed:

    mysql -u root -p
    

    Enter your mysql user password

    Check the hosts that the user you want has access to already. In my case the user is root:

    SELECT host FROM mysql.user WHERE user = "root";
    

    This gave me this output:

    +-----------+
    | host      |
    +-----------+
    | localhost |
    +-----------+
    

    Next, I ran the command below which is similar to the previous one that was throwing errors, but notice that I added a password to it this time:

    USE database_name;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password';
    

    Note: % grants a user remote access from all hosts on a network. You can specify the Ip-Address of the individual hosts that you want to grant the user access from using the command - GRANT ALL PRIVILEGES ON *.* TO 'root'@'Ip-Address' IDENTIFIED BY 'my-password';

    Afterwhich I checked the hosts that the user now has access to. In my case the user is root:

    SELECT host FROM mysql.user WHERE user = "root";
    

    This gave me this output:

    +-----------+
    | host      |
    +-----------+
    | %         |
    | localhost |
    +-----------+
    

    Finally, you can try connecting to the MySQL server from another server using the command:

    mysql -u username -h mysql-server-ip-address -p
    

    Where u represents user, h represents mysql-server-ip-address and p represents password. So in my case it was:

    mysql -u root -h 34.69.261.158 -p
    

    Enter your mysql user password

    You should get this output depending on your MySQL server version:

    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 4
    Server version: 5.7.31 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    

    Resources: How to Allow Remote Connections to MySQL

    That's all.

    I hope this helps

    0 讨论(0)
  • 2020-12-08 04:17

    grant all on newdb.* to newuser@localhost identified by 'password';

    0 讨论(0)
  • 2020-12-08 04:18

    This error can occur if trying to grant privileges for a non existing user.

    It is not clear to me what MySQL considers a non existing user. But I suspect MySQL considers a user to exist if it can be found by a name (column User) and a host (column Host) in the user table.

    If trying to grant privileges to a user that can be found with his name (column User) but not by his name and host (columns User and Host), and not provide a password, then the error occurs.

    For example, the following statement triggers the error:

    grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx';
    

    This is because, no password being specified, MySQL cannot create a new user, and thus tries to find an existing user. But no user with the name myuser and the host xxx.xxx.xxx.xxx can be found in the user table.

    Whereas providing a password, allows the statement to be executed successfully:

    grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx' identified by 'mypassword';
    

    Make sure to reuse the same password of that user you consider exists, if that new "MySQL user" is the same "application user".

    Complete the operation by flushing the privileges:

    flush privileges;
    
    0 讨论(0)
  • 2020-12-08 04:21

    It turns out, the error is very vague indeed!

    1) Password was setting while logged on as root, as it was updating the user/password field in the users table under MySql.

    2) When logged on as user, password was in fact not changing and even though there was one specified in the users table in MySql, config.inc.php file allowed authentication without password.

    Solution:

    Change following value to false in the config.inc.php.

    $cfg['Servers'][$i]['AllowNoPassword'] = true;
    

    So that it reads

    $cfg['Servers'][$i]['AllowNoPassword'] = false;
    

    Change user's host from Any or % to localhost in MySql users table. This could easily be achieved via phpMyAdmin console.

    These two changes allowed me to authenticate as user with it's password and disallowed authentication without password.

    It also allowed user to change its password while logged on as user.

    Seems all permissions and the rest was fixed with these two changes.

    0 讨论(0)
  • 2020-12-08 04:23

    I think the answer is here now : https://bugs.mysql.com/bug.php?id=83822

    So, you should write :

    GRANT ALL PRIVILEGES ON mydb.* to myuser@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'mypassword';

    And i think that could be work :

    SET PASSWORD FOR myuser@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'old_password' = PASSWORD('new_password');

    0 讨论(0)
  • If you're using PHPMyAdmin you have to be logged in as root to be able to change root password. in user put root than leave password blank than change your password.

    0 讨论(0)
提交回复
热议问题