FU420
@FU420

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

GRANT構文を使いユーザーを作成

MySQLでGRANT構文を使いユーザーを作成し、
そのユーザーがMySQLにログインする際のパスワードを設定したいです。

構文がGRANT ALL ON DB名.* TO 'ユーザ名'@'ホスト名';
とありますが、'ユーザ名'の箇所は新規で作成したいユーザー名ですか?
それとも、docker-compose ymlに MYSQL_USER: myappuserとあるのですが、
こちらのmyappuserを使えばいいですか?

またパスワードを設定する際はGRANT構文の後ろにIDENTIFIED BY 'password'とするとサイトで見ましたが、
'password'とそのまま書くのか、それとも独自のパスワードを書けばいいですか?
独自のパスワードを使う際は大文字小文字を使わなければいけないなどルールはありますか?

試したこと

GRANT ALL ON myapp.* TO 'myappuser'@'localhost' IDENTIFIED BY 'password';

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'password'' at line 1

'ユーザ名'をfutsaluserに変更
GRANT ALL ON myapp.* TO futsaluser'@'localhost' IDENTIFIED BY 'password';
同エラー

'ユーザ名'をmyappuser、'password'をsoccerに変更
GRANT ALL ON myapp.* TO 'myappuser'@'localhost' IDENTIFIED BY ‘soccer’;
同エラー

'ユーザ名'をfutsaluser、'password'をsoccerに変更
GRANT ALL ON myapp.* TO ‘futsaluser'@'localhost' IDENTIFIED BY ‘soccer’;
同エラー

現在の状況を確認してみました。

SHOW GRANTS;
GRANT USAGE ON . TO myappuser@%

GRANT ALL PRIVILEGES ON myapp.* TO myappuser@%

何故%なのか、以前作ったものなのか分かりませんが、一度削除を試みましたがエラーでした。
REVOKE ALL PRIVILEGES ON . FROM myappuser@%;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' at line 1

%をlocalhostに変更
REVOKE ALL PRIVILEGES ON . FROM myappuser@localhost;
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

他に何か試せることはありますか?
また上記の疑問も教えていただけると幸いです。

0

1Answer

エキスパートではありませんが、分かる範囲で回答します。

構文がGRANT ALL ON DB名.* TO 'ユーザ名'@'ホスト名';
とありますが、'ユーザ名'の箇所は新規で作成したいユーザー名ですか?

GRANTは権限を与えるために使用します。
ユーザが存在しない場合に作成されるケースもあるようですが、通常は次のように使用します。

通常、データベース管理者は最初に CREATE USER を使用してアカウントを作成し、次に GRANT を使用してその権限や特性を定義します

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';
GRANT USAGE ON *.* TO 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;

それとも、docker-compose ymlに MYSQL_USER: myappuserとあるのですが、
こちらのmyappuserを使えばいいですか?

MYSQL_USERオプションで新しいユーザを作成するなら、パスワードを設定するためのMYSQL_PASSWORDオプションが一緒にあります。

'password'とそのまま書くのか、それとも独自のパスワードを書けばいいですか?

任意のパスワードです。
passwordと書くとそれがそのままパスワードになります。

独自のパスワードを使う際は大文字小文字を使わなければいけないなどルールはありますか?

MySQLや一般的には「パスワードに○○を使わなければならない」というルールは無いと思います。
業務等で従うべきガイドラインがあるならばそれに沿って決めてください。
そういったものが特に無ければ、例えばIPA情報セキュリティ対策のしおりでは次のようなパスワードが推奨されています。

  • 大文字・小文字・数字・記号の組み合わせ
  • 長いパスワード(推奨は8桁以上)
  • 推測しづらく自分が忘れないパスワード 等

1Like

Comments

  1. @FU420

    Questioner

    ご回答ありがとうございます。
    解決できました、ありがとうございます!

Your answer might help someone💌