rootユーザーを除くユーザー 'test' @ 'localhost'(パスワード:YESを使用)のアクセスが拒否されました


100

mysqlの非root / adminユーザーの問題に直面しています。ユーザーとその権限を作成するために以下の手順に従います。間違っている場合は修正してください。

私はインストールしていますmysql上のRHEL 5.7 64bit私が行ったらパッケージは、以下に記載されている、rpm install私たちは

  1. を使用してmysql dbを作成し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

1
他のユーザーがあなたの問題をどのように解決したかを知っているように、あなたのために働いた答えを受け入れます。
ユーザーではないユーザー

回答:


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;

何が起こったのかを見るために


ルートについてのその意見には同意しません。はい、あなたは気ままな特権をスーパーに与えるべきではありません。ただし、DB内に適切な監査証跡がないため、通常は共有アカウントを使用しないでください。ルートなどの共有アカウントが必要な場合は、監査証跡が完全であることを確認するために、他のものがラップされている必要があります。
クラド

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ühspies

25

試してください:

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

またはさらに良い使い方:mysql_setpermissionユーザーを作成する


1
これは問題を解決しません。CREATE USER 'goldy' @ '%' IDENTIFIED BY 'some_pass'; 有効なクエリです
pratim_b 2013

何らかの理由で、%すべてのホストで機能するはずの彼はそれを解決していません。したがって、指定するlocalhostことで機能するはずです。それが機能しない場合、mysqlで問題が発生しています
Noam Rathaus

13

ユーザーを 'golden' @ '%'にしようとしているようですが、 'golden' @ 'localhost'という名前の別のユーザーが優先されています。

次のコマンドを実行して、ユーザーを表示します。

SELECT user,host FROM mysql.user;

2つのエントリが表示されます。

1)ユーザー=ゴールデン、ホスト=%

2)user =ゴールデン、host = localhost

次のコマンドを実行します。

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

MySQL Workbenchを再起動します。

次に、元のコマンドをもう一度実行します。

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

次に、MySQLにサインインしようとするときに、次のように入力します。

ここに画像の説明を入力してください

「接続のテスト」をクリックして、パスワード「password」を入力します。


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セキュリティをInvokerに設定することになりました。参照用のリンクは次のとおり
Justin

2

私にも同様の問題があり、後でホスト名を変更したことが原因であることがわかりました(ではありませんlocalhost)。

したがって、私はそれを指定することで解決されます --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1

2

ユーザーのユーザーテーブルにlocalhostエントリがあることを確認します。それが私が抱えていた問題でした。例:

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 -u root -p」の代わりに「mysql」と入力するだけでmysqlを使用しようとしたため、同じエラーが発生します。


0

mysqlworkbenchからサーバーに接続し、次のコマンドを実行します。-> ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'yourpassword';


0

このエラーメッセージを検索した後で迷惑な検索が行われる場合:

ユーザー 'someuser @ somewhere'のアクセスが拒否されました(パスワードを使用:YES)

私にとっての問題は、パスワードを引用符で囲むことではありませんでした。例えば。-p'password'代わりに使用する必要がありました-ppassword


-8

ホスト名またはMySQLホストアドレスに「localhost」の代わりにコンピューター名を追加するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.