MySQLデータベースサーバーの権限を制御する5つの権限テーブルとは?
MySQLサーバーをインストールすると、「mysql」という名前のデータベースが自動的に作成されます。このmysqlデータベースには5つの主要な権限テーブル(グラントテーブル)が含まれており、MySQLサーバーはこれらのテーブルを通じてデータベースへのアクセス権限を細かく制御しています。
本記事では、それぞれの権限テーブルの役割と特徴について詳しく解説します。
userテーブル(ユーザーアカウントとグローバル権限)
userテーブルには、ユーザーアカウント情報とグローバルレベルの権限が格納されています。MySQLサーバーは、このテーブルを参照してホストからの接続を受け入れるか拒否するかを判断します。
userテーブルで付与された権限は、そのMySQLサーバー上のすべてのデータベースに適用されるため、最も影響範囲の広い権限テーブルです。
dbテーブル(データベースレベルの権限)
dbテーブルには、データベースレベルの権限が格納されています。MySQLはこのテーブルを使って、ユーザーがどのデータベースに、どのホストからアクセスできるのかを判定します。
dbテーブルで付与された権限は、対象のデータベースおよびそこに属するすべてのオブジェクト(テーブル、トリガー、ビュー、ストアドプロシージャなど)に適用されます。
table_privテーブル(テーブルレベルの権限)
table_privテーブルには、テーブルレベルの権限が格納されています。ここで付与された権限は、特定のテーブルとそのすべてのカラムに適用されます。
columns_privテーブル(カラムレベルの権限)
columns_privテーブルには、カラムレベルの権限が格納されています。ここで付与された権限は、テーブル内の特定のカラムのみに適用されるため、よりきめ細かなアクセス制御が可能になります。
procs_privテーブル(ストアドプログラムの権限)
procs_privテーブルには、ストアドファンクションやストアドプロシージャに対する実行権限が格納されています。
まとめ:権限の適用範囲の階層構造
これら5つの権限テーブルは、グローバル(user)→ データベース(db)→ テーブル(table_priv)→ カラム(columns_priv)→ ストアドプログラム(procs_priv)という順に、段階的に細かい粒度で権限を管理できるよう設計されています。各レベルに応じて適切に権限を付与することで、安全性と柔軟性を兼ね備えたアクセス制御を実現できます。
-
MySQLでデータベース内のテーブル数を表示するクエリの書き方
INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す
-
MySQLサーバーへの接続に使えるコマンドオプション徹底解説
MySQLサーバーへの接続オプションとはMySQLクライアントプログラムには、サーバーへの接続方法を制御するためのさまざまなコマンドラインオプションが用意されています。これらのオプションを使うことで、接続先のホストやポート番号、認証方式のほか、接続を暗号化するかどうか、圧縮するかどうかといった設定まで細かく指定できます。これらのオプションは、コマンドラインから直接指定できるだけでなく、オプションファイル(my.cnf / my.ini)に記述しておくことも可能です。主な接続関連オプション--default-auth: 使用する認証プラグインを指定します。--host: MySQLサーバーが稼働