MySQLで*.*に権限を付与した場合、付与後に作成されたデータベースにも適用されるのか?
結論:はい、グローバル権限なので適用されます
*.* を指定した権限付与はグローバル権限(サーバー全体に対する権限)であるため、付与後に新しく作成されたデータベースにも自動的に適用されます。実際にMySQLで動作を確認してみましょう。
手順1:テスト用ユーザーを作成する
まず、検証用のユーザーを作成します。
mysql> CREATE USER 'Jace'@'localhost' IDENTIFIED BY 'Jace123'; Query OK, 0 rows affected (0.67 sec)
この CREATE USER 文により、localhostから接続可能な「Jace」というユーザーが作成されました。
手順2:*.* でグローバル権限を付与する
続いて、*.* を指定してSELECT権限を付与します。
mysql> GRANT SELECT ON *.* TO 'Jace'@'localhost'; Query OK, 0 rows affected (0.58 sec)
*.* の1つ目のアスタリスクはデータベース名、2つ目はテーブル名を表します。つまり「すべてのデータベースのすべてのテーブル」が対象となり、将来作成されるデータベースも含まれます。
手順3:付与された権限を確認する
以下のクエリを実行すると、ユーザーに付与されたすべての権限を一覧表示できます。
mysql> show grants for 'Jace'@'localhost';
実行結果は次のとおりです。
+-------------------------------------------+ | Grants for Jace@localhost | +-------------------------------------------+ | GRANT SELECT ON *.* TO `Jace`@`localhost` | +-------------------------------------------+ 1 row in set (0.14 sec)
GRANT SELECT ON *.* という出力から、グローバルレベルでSELECT権限が付与されていることが確認できます。
補足:MySQLの権限レベルの違い
理解を深めるために、MySQLの主な権限レベルを整理しておきましょう。
- グローバルレベル(*.*):サーバー上のすべてのデータベースに適用されます。後から作成されたデータベースにも有効です。
- データベースレベル(db_name.*):特定のデータベース内のすべてのテーブルに適用されます。
- テーブルレベル(db_name.table_name):特定のテーブルのみに適用されます。
*.* で付与した権限は、システムデータベース mysql の user テーブルに記録されます。そのため、新しいデータベースを作成するたびに改めて権限を付与し直す必要はありません。ただし、セキュリティの観点からは、必要最小限の範囲に権限を絞って付与することが推奨されます。
-
PythonでMySQLデータベースへの挿入後にIDを取得する方法
はじめに PythonからMySQLデータベースへレコードを挿入する際、「今挿入したばかりのレコードのID(AUTO_INCREMENTで自動採番された値)をすぐに取得したい」というケースは非常によくあります。本記事では、pymysqlライブラリを使ってMySQLにデータを挿入し、その直後にIDを取得する具体的な手順を解説します。 前提条件 作業を始める前に、以下の環境が整っていることを確認してください。 MySQL 8.0.12 がインストールされていること Python 3.6.3(32ビット) がインストールされていること pipコマンドで pymysql がインストールされているこ
-
MySQLデータベースの保存場所を確認する方法|@@datadirでデータディレクトリを調べる
MySQLデータベースはどこに保存されるのかMySQLでデータベースを作成した際、その実体(データファイル)がどの場所に保存されているのかを確認したい場合があります。そんなときに役立つのが、システム変数「@@datadir」です。この変数を参照することで、MySQLがデータを格納しているディレクトリのパスを簡単に把握できます。@@datadirを使った保存場所の確認方法構文は以下のとおりです。非常にシンプルで、SELECT文でシステム変数を参照するだけです。SELECT @@datadir;実際にMySQLで実行してみましょう。mysql> select @@datadir;実行結果は次