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

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):特定のテーブルのみに適用されます。

*.* で付与した権限は、システムデータベース mysqluser テーブルに記録されます。そのため、新しいデータベースを作成するたびに改めて権限を付与し直す必要はありません。ただし、セキュリティの観点からは、必要最小限の範囲に権限を絞って付与することが推奨されます。

  1. PythonでMySQLデータベースへの挿入後にIDを取得する方法

    はじめに PythonからMySQLデータベースへレコードを挿入する際、「今挿入したばかりのレコードのID(AUTO_INCREMENTで自動採番された値)をすぐに取得したい」というケースは非常によくあります。本記事では、pymysqlライブラリを使ってMySQLにデータを挿入し、その直後にIDを取得する具体的な手順を解説します。 前提条件 作業を始める前に、以下の環境が整っていることを確認してください。 MySQL 8.0.12 がインストールされていること Python 3.6.3(32ビット) がインストールされていること pipコマンドで pymysql がインストールされているこ

  2. MySQLデータベースの保存場所を確認する方法|@@datadirでデータディレクトリを調べる

    MySQLデータベースはどこに保存されるのかMySQLでデータベースを作成した際、その実体(データファイル)がどの場所に保存されているのかを確認したい場合があります。そんなときに役立つのが、システム変数「@@datadir」です。この変数を参照することで、MySQLがデータを格納しているディレクトリのパスを簡単に把握できます。@@datadirを使った保存場所の確認方法構文は以下のとおりです。非常にシンプルで、SELECT文でシステム変数を参照するだけです。SELECT @@datadir;実際にMySQLで実行してみましょう。mysql> select @@datadir;実行結果は次