web-dev-qa-db-ja.com

MySQL 8.0でrootユーザーにすべての特権を付与する方法

試した

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

取得

エラー1064(42000):SQL構文にエラーがあります。行1で「IDENTIFIED BY 'root' WITH GRANT OPTION」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

注:以前のバージョンで試した場合も同じことが機能します。

また試した

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

取得

エラー1410(42000):GRANTを使用してユーザーを作成することはできません

MySQL(8.0.11.0)ユーザー名/パスワードはroot/rootです。

44
Praveen

MySQL 8以降では、GRANTコマンドを使用して(暗黙的に)ユーザーを作成できなくなりました。代わりに CREATE USER を使用し、その後に GRANT ステートメントを続けます。

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

注意WITH GRANT OPTIONのセキュリティリスクについては、以下を参照してください:

91
Mike Lischke

1)これは私のために働いた。まず、新しいユーザーを作成します。例:pw 'bar.enterコードを含む' foo 'として

> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

2)以下のコードを「foo」のユーザー名に置き換えます。

> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';

注:database_nameは、特権を持たせたいデータベースです。は、すべてを意味します

3)ユーザーfooとしてログイン

mysql> mysql -u foo -p

パスワード:バー

4)Sequelizeからの初期接続がpw barでfooに設定されていることを確認してください。

13
J. Doe

指定されたユーザーはMySQLに存在しません(したがって、MySQLはバージョン8より前にGRANTで作成しようとしていますが、このバージョンで導入された制限で失敗します)。

MySQLはこの時点ではかなり馬鹿げているので、 'root' @ 'localhost'があり、 'root' @ '%'に特権を付与しようとすると、ホスト上のrootユーザーの一般化された概念ではなく、異なるユーザーとして扱われますローカルホスト。

エラーメッセージも誤解を招くものです。

したがって、エラーメッセージが表示される場合は、既存のユーザーを次のように確認してください

SELECT CONCAT("'", user, "'@'", Host, "'") FROM mysql.user;

その後、行方不明のユーザーを作成するか(マイクの助言に従って)、GRANTコマンドを実際の既存のユーザー仕様に合わせて調整します。

1

私の仕様:

mysql --version
mysql  Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)

私のために働いたもの:

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;

両方のクエリの応答:

Query OK, O rows affected (0.10 sec*)

N.B:以前にデータベース(db_name)を作成し、どこかで読んだデフォルトルートユーザーを使用する代わりに、DB内のすべてのテーブルに付与されたすべての特権を持つユーザー資格情報を作成していました。

1
Nuel Makara

これは私のために働いた:

mysql> FLUSH PRIVILEGES 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES
1
ZERO

まあ、私はちょうど同じ問題を抱えていました。ルートに「%」が含まれていても、リモートで接続できませんでした。ここで、my.iniファイル(Windowsの構成ファイル)を見ると、bind-addressステートメントが欠落していました。

それで... bind-address = *の後にこの[mysqld]を入れて、サービスを再起動しました。動作するようになりました!

0
Caos51

主題に関するちょうど2セント。 MySQL Workbenchから接続しようとすると、まったく同じ問題が発生していました。開発用のローカルサンドボックスを設定するために、bitnami-mysql仮想マシンを実行しています。

Bitnamiのチュートリアルでは、「Grant All Privileges」コマンドを実行するように指示されています。

/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";

これは明らかに機能していませんでしたが、ついにマイク・リシュケの答えを使って機能するようになりました。

私が考えたのは、root @%ユーザーに間違った資格情報が関連付けられていたということです。そのため、ユーザーの特権を変更しようとして、運が悪かった場合:

  1. ユーザーをドロップします。
  2. ユーザーを再度作成します。
  3. My.cnf構成ファイルに正しいバインディングがあることを確認してください。私の場合、これはサンドボックス環境用であるため、この行をコメントアウトしました。

Mysqlコンソールから:

ユーザーのリスト(すべてのユーザーを確認するのに役立ちます):

select user, Host from mysql.user;

希望するユーザーを削除:

drop user '{{ username }}'@'%';

ユーザーを作成して権限を付与します。

CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;

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

FLUSH PRIVILEGES;

Mysql構成ファイル「my.cnf」を見つけて、次のような行を探します。

bind-address=127.0.0.1

「#」を使用してコメントします。

#bind-address=127.0.0.1

次に、mysqlサービスを再起動します。

これが同じ問題を抱えている人の助けになることを願っています!

0
Armando Juarez

ユーザー名とドメインは以前に作成したものと同じです。 Mysqlは、ユーザーテーブルの2つの列によってアカウントを選択します。異なる場合、mysqlは、付与によって新しいアカウントを作成したいと考える場合がありますが、8.0バージョン以降はサポートされません。

0
zenglong chen