質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

758閲覧

MySQLでユーザーにDBへのアクセス権限を与えたい

ppap115

総合スコア11

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1グッド

1クリップ

投稿2020/03/12 08:47

実現したいこと

MySQLでユーザーにDBへのアクセス権限を与えたいです。
GRANT文でエラーが出るのですが、どこが原因か分かりません。

###エラーメッセージ

エラーメッセージ #42000You are not allowed to create a user with GRANT

該当のソースコード

--DB作成(testdb) CREATE DATABASE testdb; --ユーザー作成(username) CREATE USER 'username' IDENTIFIED BY 'password'; --アクセス権限付与 GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'localhost';

試したこと

下記を試しましたが同じくエラーでした。

GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'localhost'; FLUSH PRIVILEGES;

よろしくお願いします。

s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

使用している MySQL は 8.0 ですか?

前段の create user で作っているのが 'username' なので、これは 'username'@'localhost' とは違うユーザーです。('username'@'%' と同じ意味)

MySQL は GRANT するときにユーザーアカウントがない場合、暗黙にユーザーを作成していたのですが、この処理は MySQL 8.0 で行われなくなりました。
「先に create user してから grant するのが当然だよね」と注意書きされています。

Normally, a database administrator first uses CREATE USER to create an account and define its nonprivilege characteristics such as its password, whether it uses secure connections, and limits on access to server resources, then uses GRANT to define its privileges. ALTER USER may be used to change the nonprivilege characteristics of existing accounts. For example:

create user と grant で指定するユーザーアカウントを同じにしてください。

投稿2020/03/12 09:06

編集2020/03/12 09:11
tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppap115

2020/03/12 09:35

回答ありがとうございます。 使用しているのはMySQL8.0 です。 どちらもユーザー名を同じにすることで実行できました。 'username'@'%' の意味が分からないのですが、ホスト名はどういった場合に指定が必要なのでしょうか?
tacsheaven

2020/03/13 00:17

あるホストからのアクセスに限り接続を許可する、といったセキュリティ対策のためです。 例えば root は localhost 以外からだと接続を受け付けないとか。 ※DB に対する全権限を持つアカウントが、どこからでも使えたら危険でしょう? なおホスト名の % は、SQL の LIKE 演算子の指定と同じで、「任意の文字列とマッチする」を意味しています。つまり「どんなホストからでも受け付ける」の意味になります。 ※ただし MySQL のアクセス権決定ロジックでは、ホスト名がマッチングするものがあったらそちらが優先されて、% 指定は「他に該当するマッチがないとき」に限り使用されます
ppap115

2020/03/13 02:49

ありがとうございます! 非常に勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問