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