MySQL - 権限

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

権限とは、ユーザがデータベースで実行することを許可されるアクションのことである。

セキュリティ上の理由から、一般的には、特定のユーザとしてデータを作成して、処理を行うことが望ましいとされている。

MySQLのユーザの権限を以下に示す。

  • All PRIVILEGES
    データベースへのフルアクセス権を持つ。
  • SELECT
    データベースの情報を読み取ることができる。
  • UPDATE
    テーブルの行を更新することができる。
  • INSERT
    テーブルへのレコードの挿入ができる。
  • DELETE
    テーブルからレコードの削除ができる。
  • CREATE
    新規にテーブルやデータベースを作成することができる。
  • DROP
    テーブルやデータベース全体を削除することができる。
  • GRANT
    他のユーザの権限を変更することができる。



権限の付与

ユーザにどの程度の権限を付与するかどうかに応じて、以下の権限のうち1つ、または、複数を付与することができる。

MySQLサーバに接続する。

mysql -u <ユーザ名> -p


ユーザに権限を付与するために使用される基本的なシンタックスを示す。

 GRANT <権限の種類> ON *.* TO '<ユーザ名>'@'<ホスト名またはIPアドレス>';
 GRANT <権限の種類> ON <データベース名>.<テーブル名> TO '<ユーザ名>'@'<ホスト名またはIPアドレス>';
 
 -- 例: 全てのデータベースおよびテーブルに対して、hogeユーザにInsert権限を付与する場合
 GRANT INSERT ON *.* TO 'hoge'@'localhost';
 
 -- 例: piyoデータベースの全てのテーブルに対して、hogeユーザにInsert権限を付与する場合
 GRANT INSERT ON piyo.* TO 'hoge'@'localhost';
 
 -- 例: piyoデータベースのfugaテーブルに対して、hogeユーザにInsert権限を付与する場合
 GRANT INSERT ON piyo.fuga TO 'hoge'@'localhost';
 
 -- 例: 特定のテーブルに対して、hogeユーザにCRUD権限を付与する場合
 GRANT SELECT, UPDATE, INSERT, DELETE ON <データベース名>.<テーブル名> TO 'hoge'@'localhost';
 
 -- 例:全てのデータベースおよびテーブルに対して、hogeユーザに様々な権限を付与する場合
 GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
       RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, 
       CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, 
       REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, 
       SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, 
       EVENT, TRIGGER 
       ON *.* TO 'hoge'@'localhost' 
       WITH GRANT OPTION;


特定のデータベースに対して、ユーザに全ての権限を付与する。

 GRANT ALL PRIVILEGES ON <データベース名>.* TO '<ユーザ名>'@'<ホスト名またはIPアドレス>';
 FLUSH PRIVILEGES;


全てのデータベースに対して、ユーザに全ての権限を付与する。

 GRANT ALL PRIVILEGES ON *.* TO '<ユーザ名>'@'<ホスト名またはIPアドレス>';
 FLUSH PRIVILEGES;


既存のユーザに管理者権限を付与することも可能である。
*.*は、全てのデータベースと全てのテーブルを対象とする。
WITH GRANT OPTIONは、他のユーザに権限を付与する権限も与える。

 -- 全てのデータベースとテーブルに対する全操作権限
 -- 他のユーザに権限を付与する権限 (WITH GRANT OPTION)
 GRANT ALL PRIVILEGES ON *.* TO '<ユーザ名>'@'<ホスト名またはIPアドレス>' WITH GRANT OPTION;
 FLUSH PRIVILEGES;


ただし、完全にrootユーザと同等の権限を与えるため、注意が必要となる。

  • セキュリティリスク
    rootと同等の権限を持つユーザを作成することは、セキュリティリスクを高める可能性がある。
  • 特定の管理タスク
    一部の管理タスク (例: システムテーブルの直接操作) は、依然としてrootユーザにのみ許可される場合がある。



権限の確認

MySQLサーバに接続する。

mysql -u <ユーザ名> -p


権限を確認するユーザ名とホストを確認する。

 SELECT user, host FROM mysql.user;


ユーザが現在持っている全ての権限を表示する。
最初のレコードはユーザ作成時に自動付与された権限であり、2つ目以降のレコードは後から付与した権限である。

 SHOW GRANTS FOR '<ユーザ名>';
 -- または
 SHOW GRANTS FOR '<ユーザ名>'@'<IPアドレス / ホスト名 / %>'


現在ログインしているユーザの権限を確認する。

 SHOW GRANTS;



権限の削除

特定のユーザから権限を削除する場合、REVOKEコマンドを使用する。
これは、GRANTコマンドと同様のシンタックスである。

 # 全てのデータベースおよびテーブルにおいて、ユーザの権限を削除する
 REVOKE <権限の種類> ON *.* TO '<ユーザ名>'@'<ホスト名またはIPアドレス>';
 
 # 特定のデータベースおよびテーブルにおいて、ユーザの権限を削除する
 REVOKE <権限の種類> ON <データベース名>.<テーブル名> TO '<ユーザ名>'@'<ホスト名またはIPアドレス>';


権限を全て削除する。

 # 全てのデータベースおよびテーブルにおいて、ユーザの全ての権限を削除する
 REVOKE ALL PRIVILEGES ON *.* FROM '<ユーザ名>'@'<IPアドレス / ホスト名 / %>';
 
 # 特定のデータベースおよびテーブルにおいて、ユーザの全ての権限を削除する
 REVOKE ALL PRIVILEGES ON <データベース名>.<テーブル名> FROM '<ユーザ名>'@'<IPアドレス / ホスト名 / %>';