web-dev-qa-db-ja.com

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

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

RHEL 5.7 64bitmysqlをインストールしています。rpm installを完了したら、パッケージを以下に示します。

  1. mysql_install_dbを使用してmysql 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)

これは私が直面している問題ですが、これに対する解決策はありますか?

83
user3061726

すべてのデータベースに対するすべての特権を非rootユーザーに付与しないでください。安全ではありません(そして、その役割を持つ "root"が既に存在します)

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

この文は新しいユーザーを作成し、それに選択された特権を付与します。 I.E:

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

すべての権限の詳細を確認するには、 のドキュメント をご覧ください。

編集:あなたはこのクエリでより多くの情報を探すことができます( "root"としてログイン):

select Host, User from mysql.user;

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

51
Alberto Megía

リモートマシン(サンプルワークベンチ)などを使用してMySQLに接続している場合は、MySQLがインストールされているOSでこのエラーを解決するために次の手順を使用します。

mysql -u root -p

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

MYSQLインスタンスにログインしてみてください。
これは私にとってこのエラーを解消するのに役立ちました。

28

試してください:

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

あるいはmysql_setpermissionを使ってユーザーを作成することもできます。

21
nrathaus

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

ユーザーを表示するには、このコマンドを実行します。

SELECT user,Host FROM mysql.user;

2つのエントリが表示されるはずです。

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

2)ユーザー=ゴールデン、ホスト=ローカルホスト

これらのコマンドをして下さい:

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

「接続テスト」をクリックして、パスワード「password」を入力してください。

8
Gene

最初に、私は以下を使ってユーザーを作成しました:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

グーグルで見て これ を見た後、私はユーザーのパスワードを更新しました:

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

あとで接続できました。

6
ako

すべてのアドバイスをしたが問題がまだ解決しない他の誰にとっても。

ストアドプロシージャを確認し、DEFINERSを表示します。それらの定義者はもう存在しないかもしれません。

私の問題は、ワイルドカードホスト(%)をIP固有に変更したときに発生し、データベースのセキュリティが強化されました。残念ながら、 'user' @ '172 ....'が技術的に正しい場合でも、まだ 'user' @ '%'を使用しているビューがいくつかあります。

3
Yorro

ユーザーがusersテーブルにlocalhostエントリを持っていることを確認してください。それが私が抱えていた問題でした。例:

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

ユーザーの作成方法に応じて、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;
1
Antonio Marcos

私も同様の問題を抱えています、そして後で私がそれを発見したのは私が私のホスト名を変えたからです(localhostではありません)。

したがって、私はそれを--Host=127.0.0.1を指定することによって解決します

mysql -p mydatabase --Host=127.0.0.1
1
4af2e9eb6

私の場合、同じエラーが起こるのは、 "mysql -u root -p"の代わりに "mysql"とタイプしてmysqlを使おうとしていたからです。

0
lfvv

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

0
Sachin

このエラーメッセージを検索した後にここに着く迷惑な検索のために:

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

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

0
routeburn