MySQLをセットアップした直後は、「root」ユーザしか存在しません。「root」ユーザは、全権限を保持しているため、そのままDB操作を行いミスなどがあると、思わぬ事態になってしまうことがあります。
そのため、必要な操作権限のみを持つユーザを作成して、普段の作業は、そのユーザで行うようにするべきです。
ユーザを作成するためには、MySQLプロンプトで「CREATE USER」コマンドを使用します。
サンプルとして、ユーザ「Okita_Souji(沖田総司)」を作成します。
CREATE USER 'Okita_Souji'@'Shinsen_gumi' IDENTIFIED BY 'gintama'
『'Okita_Souji'@'Shinsen_gumi'』は、「ユーザ名+@+ドメイン名」を表します。
ドメイン名とは、そのユーザが所属するホスト名(サーバ名)のことです。
このサンプルでは、「Shinsen_gumi(新選組)」ドメインに所属する「Okita_Souji(沖田総司)」という意味になります。
該当するドメインでなければ、ログインできません。
※通常は、ドメイン名に「localhost」を設定します。
『IDENTIFIED BY 'gintama'』の部分でパスワードを指定します。
ユーザ「Okita_Souji」のパスワードを「gintama(銀魂)」に設定します。
権限が何もないユーザは、何もできません。
作成したユーザ「Okita_Souji」に、「GRANT」コマンドで権限を付与します。
GRANT 権限 ON レベル TO user
権限は「どのようなことができるか」という設定です。
「SELECT」、「INSERT」、「UPDATE」、「DELETE」など、多くの種類があります。
レベルは「どの範囲でできるのか」という設定です。
5つのレベルがあります
1.グローバルレベル(G)---すべてのデータベース
2.データベース レベル(D)---特定データベース内のすべてのオブジェクト
3.テーブルレベル(T)---特定テーブル内のすべてのカラム
4.カラムレベル(C)---特定テーブルの特定カラム
5.ルーチンレベル---ストアドルーチン
GRANT CREATE,DROP,SELECT,INSERT,UPDATE,DELETE ON ToukenDB TO 'Okita_Souji'@'Shinsen_gumi'
「Shinsen_gumi(新選組)」ドメインに所属するユーザ「Okita_Souji(沖田総司)」に、「ToukenDB(刀剣DB)」データベースに対する「CREATE,DROP,SELECT,INSERT,UPDATE,DELETE」権限を付与しています。
DROP USER 'user'@'localhost'
ユーザは「mysql」データベースの「user」テーブルで管理されています。
このテーブルをSELECTすることでユーザ一覧を参照できます。「user」テーブルに対する「SELECT」権限を持つユーザのみが参照可能です。
『mysql> select Host, User, Password from mysql.user』
Host | User | Password |
---|---|---|
localhost | root | ********* |
Shinsen_gumi | Okita_Souji | ********* |
localhost |
上記サンプル出力3行目のように、「ユーザ名」が空、「パスワード」設定なし、のようなユーザが存在している場合があります。
MySQLサーバに接続する際には、ユーザ名とパスワードが必要になりますが、MySQLインストール時にデフォルトで「匿名ユーザ」が作成されています。
この「匿名ユーザ」のパスワードは未設定であるため、誰でもログインできてしまう状態になっています。そのため、匿名ユーザのパスワードを設定するか、もしくは、匿名ユーザを削除しておくことが推奨されています。
ユーザ権限を表示する方法として「SHOW GRANTS」コマンドを使用します。
SHOW GRANTS FOR ユーザ名@ホスト名
『mysql> SHOW GRANTS FOR Okita_Souji@Shinsen_gumi』
指定したユーザに対して付与されている権限が GRANTステートメントの形で表示されます。
『mysql> SHOW GRANTS』
ユーザ名を省略すると、現在接続しているユーザの権限が表示されます。
「mysql」データベースの「db」テーブルに対するSELECT文を発行することでも、権限情報を参照できます。
『mysql> SELECT * FROM mysql.db WHERE user = 'Okita_Souji' AND host = 'Shinsen_gumi' AND db = 'ToukenDB' ¥G』
※SQL文の最後に、メタコマンドである「¥G」オプションを付けると、問い合わせ結果が縦に表示され、見やすくできます。
2022年09月28日(金)16:00~16:55 「ビッグデータ処理のデータベースとして MySQL HeatWave が最適な理由 〜AWS Aurora/Redshift、GCP BigQuery との性能&コスト比較〜」 と題したウェビナーが開催されました。 皆様のご参加、誠にありがとうございました。 当日の資料は以下から無料でご覧いただけます。 ご興味のある企業さま、ぜひご...
OSS×Cloud ACCESS RANKING