カテゴリ: PostgreSQL 更新日: 2026/02/23

PostgreSQLの権限管理を完全解説|スキーマ単位で理解するデータベースセキュリティの基礎

PostgreSQLの権限管理(スキーマ単位)を理解する
PostgreSQLの権限管理(スキーマ単位)を理解する

先生と生徒の会話形式で理解しよう

生徒

「PostgreSQLを勉強していたら“権限”って言葉が出てきたんですが、何ができて何ができないのかよく分かりません……」

先生

「権限は、誰がどのデータを触っていいかを決めるためのルールです。家でいうと、部屋に入っていい人、引き出しを開けていい人を決める鍵のようなものです。」

生徒

「スキーマ単位で管理できるって聞いたんですが、それって何が便利なんですか?」

先生

「スキーマ単位で権限を決めると、テーブルをまとめて安全に管理できます。今日は、パソコン初心者でも分かるように、スキーマ権限の考え方と使い方を説明します。」

1. SQLとは何か?

1. SQLとは何か?
1. SQLとは何か?

SQLは、データベースという「情報をたくさん保存する箱」に対して命令を出すための言語です。名簿から人を探したり、新しい情報を書き足したり、不要な情報を消したりする操作を行います。

PostgreSQLでは、このSQLを使って、データ操作だけでなく「誰が操作してよいか」という権限の設定も行います。

2. PostgreSQLの権限管理とは?

2. PostgreSQLの権限管理とは?
2. PostgreSQLの権限管理とは?

権限管理とは、「この人は見ていい」「この人は変更していい」といったルールを決めることです。もし誰でも自由に変更できたら、データはすぐに壊れてしまいます。

PostgreSQLでは、ユーザーごとに細かく権限を設定できます。特に重要なのが、スキーマ単位での権限管理です。

3. スキーマ単位で権限を管理する理由

3. スキーマ単位で権限を管理する理由
3. スキーマ単位で権限を管理する理由

スキーマは、テーブルを整理するための入れ物です。用途ごとにスキーマを分けておくと、まとめて権限を設定できます。

例えば、「一般ユーザー用のデータ」「管理者専用のデータ」を別スキーマに分けると、一般ユーザーには管理者用スキーマを見せない、という設定が可能になります。

4. 権限確認の前にテーブルの状態を見てみよう

4. 権限確認の前にテーブルの状態を見てみよう
4. 権限確認の前にテーブルの状態を見てみよう

ここでは、memberスキーマにあるusersテーブルを例にします。まずはテーブルの中身を確認します。


id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 高橋次郎   | 22  | jiro@example.com

SELECT *
FROM member.users;

 id | name       | age | email
----+------------+-----+-------------------
 1  | 山田太郎   | 25  | taro@example.com
 2  | 佐藤花子   | 19  | hanako@example.com
 3  | 鈴木一郎   | 30  | ichiro@example.com
 4  | 高橋次郎   | 22  | jiro@example.com

5. スキーマに対する基本的な権限の種類

5. スキーマに対する基本的な権限の種類
5. スキーマに対する基本的な権限の種類

スキーマに対して設定できる主な権限は以下の2つです。

  • USAGE:スキーマの中を見ることができる
  • CREATE:スキーマの中にテーブルなどを作れる

USAGEがないと、そのスキーマにあるテーブルは存在していても使えません。

6. スキーマに権限を付与する方法(GRANT)

6. スキーマに権限を付与する方法(GRANT)
6. スキーマに権限を付与する方法(GRANT)

権限を与えるときは、GRANTというSQLを使います。例として、app_userというユーザーにmemberスキーマの使用権限を与えます。


GRANT USAGE
ON SCHEMA member
TO app_user;

GRANT

これで、app_userはmemberスキーマの中身を使えるようになります。

7. テーブル操作を許可する権限の設定

7. テーブル操作を許可する権限の設定
7. テーブル操作を許可する権限の設定

スキーマを使えるだけでは、テーブルの中身は操作できません。次に、テーブルの操作権限を付与します。


GRANT SELECT
ON member.users
TO app_user;

GRANT

この設定により、app_userはusersテーブルを「見るだけ」できるようになります。

8. 権限を取り消す方法(REVOKE)

8. 権限を取り消す方法(REVOKE)
8. 権限を取り消す方法(REVOKE)

不要になった権限は、REVOKEで取り消します。間違って権限を与えた場合も、すぐに元に戻せます。


REVOKE SELECT
ON member.users
FROM app_user;

REVOKE

これで、usersテーブルを参照する権限は失われます。スキーマ権限とテーブル権限は別物なので、それぞれ意識することが重要です。

カテゴリの一覧へ
新着記事
New1
PostgreSQL
PostgreSQLのLIMIT・OFFSETとパフォーマンス問題を完全解説|初心者でもわかる安全な使い方
New2
MySQL
MySQLのUPDATE文でデータを更新する基本を徹底解説|SQL初心者でもわかるデータベース更新入門
New3
PostgreSQL
PostgreSQLのOFFSET完全入門|並び替えと組み合わせてデータをスキップする方法を初心者向けに解説
New4
MySQL
MySQLで複数行INSERTを行う方法と注意点を徹底解説|SQL基礎から学ぶデータベース入門
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのDISTINCT完全ガイド|SQLで重複データを除外する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLのLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLスキーマ設計のベストプラクティス完全ガイド|初心者でもわかるデータベース整理術
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎