【OSS-DB Silver対策】GRANT文とPUBLICの意味
OSS-DB Silver試験対策シリーズ、今回は権限付与を行うSQL文、`GRANT`で使用される特殊なキーワード「PUBLIC」について解説します。誰に対して権限を与えているのか、その範囲を正確に把握しましょう。
1. GRANT文におけるPUBLICとは
【 基本 】 `GRANT SELECT ON TABLE1 TO PUBLIC` のように記述した場合、この「PUBLIC」は、現在および将来のすべてのユーザ(ロール)を指す特殊なグループとして機能します。
★ 全ユーザが対象:個別に権限を与えていないユーザも含め、すべてのユーザが対象となります。
★ 自動適用:PUBLICに権限を付与した後に作成された「新しいユーザ」にも、自動的にその権限が適用されます。
★ 暗黙のグループ:PUBLICという名前の特定のユーザが存在するわけではなく、一種の「全員参加のグループ」として扱われます。
2. 試験対策問題:4択チェック
【 問題 】 次のSQL文を実行した場合の「PUBLIC」の説明として、最も適切なものはどれですか?
GRANT SELECT ON TABLE1 TO PUBLIC;
問題:GRANT文の付与対象に指定された「PUBLIC」が指す範囲を選びなさい。
1. データベースを作成した所有者(オーナー)のみを指す。
2. システム管理権限(スーパーユーザ)を持つユーザのみを指す。
3. その時点で存在するユーザのみを指し、後から作成されたユーザは含まれない。
4. すべてのユーザ(ロール)を指し、将来作成される新しいユーザも含まれる。
3. 正解と解説
【 解説 】
1. 理解のコツ: `PUBLIC` は「全員」という意味です。PostgreSQLでは、個々のユーザに権限を割り当てる手間を省くために、全ユーザに共通の権限を与えたい時にこれを使用します。
2. 復習の視点: 逆に権限を取り消したい場合は `REVOKE SELECT ON TABLE1 FROM PUBLIC;` と記述します。デフォルトで一部のオブジェクトにはPUBLICに権限が割り当てられていることもあるため、セキュリティ設定の際にも重要な知識となります。
4. まとめ
「PUBLIC = 全ユーザ(未来のユーザも含む)」。このシンプルな定義を覚えておけば、SQLの権限問題で迷うことはありません。試験では「既存のユーザのみ」というひっかけ選択肢がよく出るので、注意してくださいね!