MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLデータベースにスーパー権限(SUPER権限)を追加する方法をわかりやすく解説

MySQLでは、特定のユーザーに対して強力な管理権限である「SUPER権限」を付与できます。この記事では、DESCコマンドで権限テーブルの構造を確認しながら、スーパー権限を追加する具体的な手順を解説します。

SUPER権限とは

SUPER権限を持つユーザーは、他のクライアントセッションの強制終了、サーバーの動的な設定変更、レプリケーション関連の操作など、一般ユーザーには許可されていない管理操作を実行できます。非常に強力な権限のため、付与対象は信頼できる管理者ユーザーに限定することをおすすめします。

手順1:DESCコマンドで権限テーブルの構造を確認する

まず、DESCコマンドを使ってMySQLの権限管理テーブル「mysql.db」の構造を確認してみましょう。

mysql>DESC mysql.db;

実行すると、以下のような出力が得られます。

+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| User                  | char(32)      | NO   | PRI |         |       |
| Select_priv           | enum('N','Y') | NO   |     | N       |       |
| Insert_priv           | enum('N','Y') | NO   |     | N       |       |
| Update_priv           | enum('N','Y') | NO   |     | N       |       |
| Delete_priv           | enum('N','Y') | NO   |     | N       |       |
| Create_priv           | enum('N','Y') | NO   |     | N       |       |
| Drop_priv             | enum('N','Y') | NO   |     | N       |       |
| Grant_priv            | enum('N','Y') | NO   |     | N       |       |
| References_priv       | enum('N','Y') | NO   |     | N       |       |
| Index_priv            | enum('N','Y') | NO   |     | N       |       |
| Alter_priv            | enum('N','Y') | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y') | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y') | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y') | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y') | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y') | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y') | NO   |     | N       |       |
| Execute_priv          | enum('N','Y') | NO   |     | N       |       |
| Event_priv            | enum('N','Y') | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y') | NO   |     | N       |       |
+-----------------------+---------------+------+-----+---------+-------+
22 rows in set (0.06 sec)

手順2:UPDATE文でユーザーにスーパー権限を付与する

続いて、UPDATE文で「mysql.user」テーブルのSuper_privカラムを「Y」に更新し、対象ユーザーへスーパー権限を付与します。

mysql> UPDATE mysql.user SET Super_Priv='Y' WHERE user='Manish' AND host='%';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

更新後、DESCコマンドでmysql.userテーブルを表示すると、付与された権限の状態を確認できます。

mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | caching_sha2_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_role_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_role_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Password_reuse_history | smallint(5) unsigned              | YES  |     | NULL                  |       |
| Password_reuse_time    | smallint(5) unsigned              | YES  |     | NULL                  |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
49 rows in set (0.01 sec)

上記の出力にある「Super_priv」カラムが、スーパー権限の有無を表す項目です。この値が「Y」になっていれば、そのユーザーにスーパー権限が付与されています。

手順3:GRANT文でスーパー権限を付与する

スーパー権限を追加する際の基本構文は以下のとおりです。

mysql> GRANT SUPER ON *.* TO user@'localhost' IDENTIFIED BY 'passwordName';

なお、MySQL 5.7以前では上記のようにGRANT文の中でIDENTIFIED BY句によりパスワードを指定できましたが、MySQL 8.0以降ではこの書き方が廃止されています。8.0以降の場合は、まずCREATE USER文でユーザーとパスワードを作成してから、GRANT SUPER ON *.* TO ユーザー名@ホスト名; の形式で権限のみを付与してください。

最後にFLUSH PRIVILEGESを実行する

UPDATE文などでmysql.userテーブルを直接編集した場合は、変更を確実に反映させるために、必ず以下のコマンドで締めくくります。

FLUSH PRIVILEGES;

このコマンドにより、メモリ上に保持されている権限情報が再読み込みされ、新しく付与した権限がすぐに有効になります。GRANT文で権限を付与した場合には自動的に反映されるため、FLUSH PRIVILEGESは不要です。

権限が正しく付与されたかどうかは、SHOW GRANTS FOR 'ユーザー名'@'ホスト名'; を実行すれば簡単に確認できます。

  1. phpMyAdminでMySQLデータベースのカラムにAUTO_INCREMENT(自動採番)を追加する方法

    MySQLデータベースのカラムにAUTO_INCREMENT(自動インクリメント)を追加したい場合、ALTERコマンドを使用することで簡単に実現できます。本記事では、SQLコマンドによる方法と、phpMyAdminの画面操作による方法の2つをわかりやすく解説します。ALTERコマンドでAUTO_INCREMENTを追加する基本構文AUTO_INCREMENTを追加するには、以下のような構文を使用します。ALTER TABLE テーブル名 MODIFY カラム名 INT NOT NULL AUTO_INCREMENT;この構文では、既存のカラム定義をMODIFY句で変更し、NOT NULL制約と

  2. MySQLコマンドラインでデータベースを作成する方法を初心者向けに解説

    MySQLコマンドラインでデータベースを作成する手順 この記事では、WindowsのコマンドプロンプトからMySQLに接続し、データベースを作成する一連の手順をスクリーンショット付きで解説します。初心者の方でも迷わず進められるよう、順番に見ていきましょう。 1. コマンドプロンプトを開く まず、コマンドプロンプトを起動します。キーボードのショートカット「Windows + R」キーを押すと、「ファイル名を指定して実行」ダイアログが表示されます。 2. 「CMD」と入力してOKをクリック 表示された入力欄に CMD と入力し、「OK」ボタンをクリックしてください。 3. コマンドプロンプトが