質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

2回答

1262閲覧

roleを継承したとき、親の権限が子にすぐに継承されない

fukupiyo

総合スコア27

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/03/11 06:24

編集2018/03/11 07:20

知りたいこと

grant で role を継承したとき、"親role(以下、user1)" の権限が "子role(以下、user2)" にすぐに継承されません。

PostgreSQL 9.0.4文書 - 20.4. ロールのメンバ資格を読んでいる限りでは継承の方法は2つあって
0. set role で明示的にroleを変更

  1. "GRANT admin TO joe; ", "joeロールで接続するとすぐに、joeはadmin権限を"継承"しますので、"

となっているため、下記検証手番で自動的に継承されるものだと理解しています。
set role を試すと継承できているため、継承の方法が違っているとも思えません。

set role をせずに継承をしたいとき、どのようにしたら継承できるのでしょうか?
それとも、何か根本的な勘違いをしているのでしょうか?
お手数ですがご教示ください。

環境

OS:Ubuntu 16.4 LTS
postgres:
PostgreSQL 9.0.23 on x86_64-unknown-linux-gnu, compiled by GCC gcc (Ubuntu 5.4.1-2ubuntu1~16.04) 5.4.1 20160904, 64-bit

検証手番

1.role作成

SQL

1postgres=# create role user1 createdb; 2CREATE ROLE 3postgres=# create role user2 login; 4CREATE ROLE

2.継承させる

SQL

1postgres=# grant user1 to user2; 2GRANT ROLE

3.権限確認

SQL

1postgres=# \du 2 List of roles 3 Role name | Attributes | Member of 4-----------+--------------------------------------+----------- 5 user1 | Create DB, Cannot login | {} 6 user2 | | {user1}

4.user2でpsqlにログインしてデータベースを作成

sh/SQL

1$ psql -U user2 postgres 2psql (9.0.23) 3Type "help" for help. 4 5postgres=> create database u2db; 6ERROR: permission denied to create database

5."set role" を試すとデータベースが作成できる

SQL

1postgres=> set role user1; 2SET 3postgres=> create database u2db; 4CREATE DATABASE 5postgres=> \l 6 List of databases 7 Name | Owner | Encoding | Collation | Ctype | Access privileges 8-----------+--------+----------+-------------+-------------+------------------- 9 postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | 10 template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + 11 | | | | | postgres=CTc/postgres 12 template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + 13 | | | | | postgres=CTc/postgres 14 u2db | user1 | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | 15(9 rows)

2018.03.11 16:19 タイトルと内容を一部更新。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

自己解決しました。

結論からいうと、継承できる権限は create role/alter role で付与できる権限ではなく、grantで付与できる権限が対象のようでした。(どこかに明記があったわけではありません。)

質問中にリンクを貼っていたマニュアルの1ページ前に、この章で「権限」と呼ぶものの一覧が。

マニュアル中はどちらも「権限」との表記のため混同していましたが、よく考えれば grant で継承できる権限は grant で付与できる権限だなと納得したため、この質問はクローズさせていただきます。

ご回答をくださいましたOrlofsky様、並びにご一考いただきました皆様、ありがとうございました。

投稿2018/03/12 01:06

編集2018/03/13 11:59
fukupiyo

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

grant で role を継承したとき、"親role(以下、user1)" の権限が "子role(以下、user2)" にすぐに継承されません。

WITH GRANT OPTION を使う用途ではないでしょうか?

PostgreSQL 権限の追加

また「WITH GRANT OPTION」を付けて権限を付与された場合、与えられたロールは同じ権限を別のロールに付与することが出来るようになります。(PUBLICには付けることができません)。

投稿2018/03/11 10:43

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fukupiyo

2018/03/12 01:07

ご回答ありがとうございます。 grantでroleに権限をつける場合だとwith grant option 指定はなく、代わりにwith admin option指定となるようです。 現在質問に記載した環境では試せていませんが、centOS7のpostgres9.2.23環境では同様のエラーとなってしまいました。 引き続き何かありましたらお願いいたします。
Orlofsky

2018/03/12 01:44

間違っていましたか。すみません。with admin option だと管理者権限になるから、権限として強過ぎないかちょっと心配な気がします。今動作確認できる環境がないのでお力になれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問