はじめに
アプリケーションとデータベースを接続する際、ほとんどのチュートリアルでは「ユーザーを作成して、権限を付与する」という操作から始まる。
一見すると作業的な手順に見えるが、この操作の背後には重要なセキュリティの考え方がある。
本記事では、以下のポイントについて整理する。
- なぜユーザーを作成して一部の権限だけを与えるのか
-
root
ユーザーの役割 -
GRANT OPTION
とは何か - 「最小権限の原則」とは何か
rootユーザーとは
root
ユーザーは、データベースにおける最上位の管理者。すべてのデータベース・テーブル・ユーザーに対して、あらゆる操作を行うことができる。
特に重要なのが、「他のユーザーに権限を付与する権限」も持っている点。
そのため、ユーザーの作成や権限の設定は、基本的に root で行う。
CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT ON db_name.* TO 'user_name'@'localhost';
このように、ユーザーを作成し、必要な権限のみを与えることが一般的。
なぜ一部の権限だけを与えるのか
背景にあるのは、「最小権限の原則」というセキュリティの基本原則。
ユーザーやプロセスには、必要最低限の権限だけを与えるべきであり、それ以上の権限は持たせるべきではない。
リスクの具体例
- アプリケーションが
root
ユーザーで接続していた場合、万が一バグや乗っ取りが発生すれば、データの削除・上書きなど、取り返しのつかない操作が可能になってしまう。 - 一方で、
SELECT
とINSERT
のみに制限されたユーザーであれば、データの閲覧・登録しかできず、被害を最小限に抑えることができる。
このように、万が一の被害を最小限に抑えるというのが、本質的な目的。
GRANT OPTIONとは何か
通常の GRANT
文は「このユーザーにこの権限を与える」というもの。
GRANT SELECT ON appdb.* TO 'userA'@'localhost';
しかし、次のように WITH GRANT OPTION
を付けると、
GRANT SELECT ON appdb.* TO 'userA'@'localhost' WITH GRANT OPTION;
これは、「userA
に SELECT
権限を与える」だけでなく、「userA が他のユーザーに SELECT
権限を与えられるようにする」という意味になる。
つまり、GRANT OPTION
は「権限を配ることができる権限」。
学びのまとめ
- 必要最小限の権限のみを与える理由は、「最小権限の原則」の原則に基づいた設計に基づいて、万が一の不正アクセス時にも被害を最小化するため。
-
GRANT OPTION
は、他のユーザーに対して権限を再付与するための権限。