本文へスキップ
BecomeCoder

SQL テーブル設計 (DDL)コース · 第6章 権限とアクセス制御 · レッスン21

ロールと最小権限の原則

ローカル実施

導入

社員が100人いたら、1人ずつに GRANT を書くのは大変で、付け忘れ・剥がし忘れの温床です。そこで実務では、権限を役割(ロール)にまとめて管理します。あわせて、セキュリティの土台となる「最小権限の原則」を押さえましょう。

説明

ロール(role) は、権限の「束」に名前を付けたものです。「経理ロール」「閲覧専用ロール」などを作り、そこに権限をまとめて付けておき、人にはロールを割り当てます。

-- 閲覧専用ロールを作り、必要な参照権限をまとめて付与
CREATE ROLE viewer;
GRANT SELECT ON products TO viewer;
GRANT SELECT ON orders   TO viewer;

-- 人にはロールを割り当てるだけ
GRANT viewer TO tanaka;
GRANT viewer TO suzuki;

こうしておけば、閲覧範囲を変えたいときはロールを直すだけで全員に反映されます。1人ずつ触る必要がありません。

flowchart TB
    P1["SELECT on products"] --> R["viewer ロール"]
    P2["SELECT on orders"] --> R
    R --> U1["田中"]
    R --> U2["鈴木"]
    R --> U3["…(増えてもロールを割り当てるだけ)"]

最小権限の原則(least privilege)。「その人・そのアプリが仕事をするのに必要な最小限の権限だけを与える」という、セキュリティの基本方針です。「とりあえず全部許可」は、アカウントが乗っ取られたときの被害を最大化します。たとえば、

  • 表示だけのアプリ → SELECT だけ。
  • 注文を受けるアプリ → orders への INSERT と、必要な SELECT だけ。DROP は絶対に与えない。

権限設計は「便利さ」ではなく「万一のときの被害の小ささ」で決める――これが堅牢なシステムの考え方です。テーブル設計(この章までのDDL)と権限設計(DCL)がそろって、はじめて「安心して使えるデータベース」になります。

まとめ

  • ロール=権限の束。人ではなくロールに権限を付け、人にはロールを割り当てると管理が楽。
  • 最小権限の原則=必要な操作だけを与える。乗っ取り時の被害を最小化する。
  • DDL(器の設計)と DCL(誰に触らせるか)の両輪で、データベースの安全性が決まる。