sql >> データベース >  >> RDS >> Mysql

MySQLエラー1045(28000):ユーザー'bill' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)

    おそらく匿名ユーザー''@'localhost' または''@'127.0.0.1'

    マニュアル による :

    複数の一致が可能な場合、サーバーはそれらのどれを使用するかを決定する必要があります。この問題は次のように解決されます:(...)

    • クライアントが接続を試みると、サーバーは[テーブルmysql.user]の行を調べます。 ソートされた順序で。
    • サーバーは、クライアントのホスト名とユーザー名に一致する最初の行を使用します。

    (...)サーバーは、最も具体的なホスト値が最初にある行を並べ替える並べ替えルールを使用します 。文字通りのホスト名['localhost'など] とIPアドレスが最も具体的です。

    したがって、このような匿名ユーザーは、'[any_username]'@'%'のような他のユーザーを「マスク」します。 localhostから接続する場合 。

    'bill'@'localhost' 'bill'@'%'と一致します 、ただし一致します(例:''@'localhost' 事前に。

    推奨される解決策は、この匿名ユーザーを削除することです(これは通常、とにかく行うのが良いことです)。

    以下の編集は、主な質問とはほとんど関係ありません。これらは、このスレッド内の他のコメントで提起されたいくつかの質問に答えることのみを目的としています。

    編集1

    'bill'@'%'として認証 ソケットを介して。

        [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
        Welcome to the MySQL monitor (...)
    
        mysql> SELECT user, host FROM mysql.user;
        +------+-----------+
        | user | host      |
        +------+-----------+
        | bill | %         |
        | root | 127.0.0.1 |
        | root | ::1       |
        | root | localhost |
        +------+-----------+
        4 rows in set (0.00 sec)
    
        mysql> SELECT USER(), CURRENT_USER();
        +----------------+----------------+
        | USER()         | CURRENT_USER() |
        +----------------+----------------+
        | [email protected] | [email protected]%         |
        +----------------+----------------+
        1 row in set (0.02 sec)
    
        mysql> SHOW VARIABLES LIKE 'skip_networking';
        +-----------------+-------+
        | Variable_name   | Value |
        +-----------------+-------+
        | skip_networking | ON    |
        +-----------------+-------+
        1 row in set (0.00 sec)
    
    

    編集2

    ネットワークを再アクティブ化したことを除いて、まったく同じセットアップで、匿名ユーザー''@'localhost'を作成します。 。

        [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
        Welcome to the MySQL monitor (...)
    
        mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
        Query OK, 0 rows affected (0.00 sec)
    
        mysql> Bye
    
        [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
            --socket=/tmp/mysql-5.5.sock
        ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
        [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
            -h127.0.0.1 --protocol=TCP
        ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
        [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
            -hlocalhost --protocol=TCP
        ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    
    

    編集3

    編集2と同じ状況で、匿名ユーザーのパスワードが提供されます。

        [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
        Welcome to the MySQL monitor (...)
    
        mysql> SELECT USER(), CURRENT_USER();
        +----------------+----------------+
        | USER()         | CURRENT_USER() |
        +----------------+----------------+
        | [email protected] | @localhost     |
        +----------------+----------------+
        1 row in set (0.01 sec)
    
    

    結論1、編集1から:'bill'@'%'として認証できます ソケットを介して。

    結論2、編集2から:TCP経由で接続するか、ソケット経由で接続するかは、認証プロセスに影響を与えません(ただし、'something'@'localhost'以外の人として接続することはできません)。 明らかに、ソケットを介して)。

    結論3、編集3から:-ubillを指定しましたが 、匿名ユーザーとしてアクセスを許可されました。これは、上記の「ソートルール」によるものです。ほとんどのデフォルトのインストールでは、パスワードなし、匿名ユーザーが存在します (そして、保護/削除する必要があります。)



    1. SQLスクリプトからシェルスクリプトへの戻り値

    2. Postgresにモジュールをインポートしたり拡張機能をインストールしたりするにはどうすればよいですか?

    3. MSSQLServerでスタックしたプロセスの自動削除

    4. クエリ内の式がいつ評価されるかを評価する