はじめに
OSS-DB Silver試験対策として、どの操作に対して権限を付与・削除できるのかをまとめました。
対象者
- OSS-DB Silverを受験する方
GRANTとREVOKEについて
GRANT
権限付与のコマンドです。
権限付与には2種類あります。1
- データベースオブジェクト(テーブル、列、ビュー、外部テーブル、シーケンス、データベース、外部データラッパ、外部サーバ、関数、手続き言語、スキーマ、テーブル空間)に対する権限の付与
- ロール内のメンバ資格の付与(グループに対して権限を付与)
書式
データベースオブジェクトに対する権限付与
GRANT { 権限 [, ...] | ALL [PRIVILEGES] }
ON { オブジェクト種類 } オブジェクト名 [, ...]
TO { ロール名 | PUBLIC } [, ...]
[WITH GRANT OPTION];
ロールに対するメンバーシップ付与
GRANT ロール名 [, ...]
TO ロール名 [, ...]
[WITH ADMIN OPTION];
REVOKE
テーブルに設定されたアクセス権限を削除します。
REVOKE [GRANT OPTION FOR]
{権限 [, ...] | ALL [PRIVILEGES]}
ON {オブジェクト種類} オブジェクト名 [, ...]
FROM {ロール名 | PUBLIC} [, ...]
[CASCADE | RESTRICT];
-- aliceからSELECT権限を剥奪
REVOKE SELECT
ON TABLE sample
FROM alice;
権限一覧(主要オブジェクト)
| オブジェクト | 権限 | 内容 |
|---|---|---|
| テーブル / ビュー | SELECT | 行を読み取る |
| INSERT | 行を追加 | |
| UPDATE | 行を更新(列単位可) | |
| DELETE | 行を削除 | |
| TRUNCATE | テーブル全体を一括削除 | |
| REFERENCES | 外部キー参照の対象にする | |
| TRIGGER | トリガ作成を許可 | |
| シーケンス | SELECT |
currval() などの利用 |
| UPDATE |
nextval() による増加 |
|
| USAGE | シーケンス参照許可 | |
| ALL | 上記すべて | |
| データベース | CREATE | 新しいスキーマ作成 |
| CONNECT | 接続許可 | |
| TEMP | 一時テーブル作成 | |
| スキーマ | CREATE | スキーマ内にオブジェクト作成 |
| USAGE | 参照可能(中のオブジェクト利用には別途権限必要) | |
| 関数 / プロシージャ | EXECUTE | 実行許可 |
| 言語 | USAGE | 関数をその言語で作成可能 |
| テーブルスペース | CREATE | その領域にDBオブジェクトを作成可能 |
| 外部サーバ | USAGE | 外部データラッパ(あるデータベースからその外部のデータへのアクセスを行うための仕組み)の利用許可 |
GRANT/REVOKEで扱えない操作
DBシステムを管理する権限は GRANT/REVOKEでは付与できません。
これらは ロール属性の指定(CREATE ROLE/ALTER ROLE)やスーパーユーザでのみ付与できます。
| 操作 | 例 | 付与できない理由 |
|---|---|---|
| データベース削除・作成 |
DROP DATABASE / CREATE DATABASE
|
データベース自体の管理は所有者または CREATEDB 権限を持つロール専用。GRANT対象は「既存DBの利用」に限られる。 |
| ロール作成・削除・管理 |
CREATE ROLE / DROP ROLE / ALTER ROLE
|
ユーザ管理はシステムレベルの仕事。GRANTではオブジェクト権限しか渡せない。ロール属性 CREATEROLE が必要。 |
| スーパーユーザ権限 | SUPERUSER |
これはシステム管理者専用。GRANTで配ると世界が終わるので不可。ロール作成時の属性でしか付与できない。 |
| サーバ設定変更 |
ALTER SYSTEM, pg_reload_conf()
|
設定はクラスタ全体に影響するため、DB利用者に与える権限ではない。スーパーユーザのみ。 |
| オブジェクト定義の変更・削除 |
ALTER TABLE, DROP TABLE
|
これらはオブジェクトの所有者かスーパーユーザのみ可能。GRANTは「使う権限」だけ渡せる。 |
結論
-
GRANT・REVOKEで権限操作できるもの→「データベースオブジェクトを使う操作」
(SELECT, INSERT, EXECUTE, CONNECT, USAGE…) -
GRANT・REVOKEで権限操作できないもの→「DBシステムを管理する操作」
(CREATE/DROP DATABASE, CREATE/DROP ROLE, SUPERUSER, ALTER SYSTEM, ALTER/DROP TABLE…)