0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データベースユーザーと権限設計の本質を理解する

Posted at

はじめに

アプリケーションとデータベースを接続する際、ほとんどのチュートリアルでは「ユーザーを作成して、権限を付与する」という操作から始まる。

一見すると作業的な手順に見えるが、この操作の背後には重要なセキュリティの考え方がある。

本記事では、以下のポイントについて整理する。

  • なぜユーザーを作成して一部の権限だけを与えるのか
  • 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 ユーザーで接続していた場合、万が一バグや乗っ取りが発生すれば、データの削除・上書きなど、取り返しのつかない操作が可能になってしまう。
  • 一方で、SELECTINSERT のみに制限されたユーザーであれば、データの閲覧・登録しかできず、被害を最小限に抑えることができる。

このように、万が一の被害を最小限に抑えるというのが、本質的な目的。

GRANT OPTIONとは何か

通常の GRANT 文は「このユーザーにこの権限を与える」というもの。

GRANT SELECT ON appdb.* TO 'userA'@'localhost';

しかし、次のように WITH GRANT OPTION を付けると、

GRANT SELECT ON appdb.* TO 'userA'@'localhost' WITH GRANT OPTION;

これは、「userASELECT 権限を与える」だけでなく、「userA が他のユーザーに SELECT 権限を与えられるようにする」という意味になる。

つまり、GRANT OPTION は「権限を配ることができる権限」。

学びのまとめ

  • 必要最小限の権限のみを与える理由は、「最小権限の原則」の原則に基づいた設計に基づいて、万が一の不正アクセス時にも被害を最小化するため。
  • GRANT OPTION は、他のユーザーに対して権限を再付与するための権限。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?