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

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

ただいまの
回答率

90.21%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,434

fukupiyo

score 25

知りたいこと

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

PostgreSQL 9.0.4文書 - 20.4. ロールのメンバ資格を読んでいる限りでは継承の方法は2つあって

  1. set role で明示的にroleを変更
  2. "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作成

postgres=# create role user1 createdb;
CREATE ROLE
postgres=# create role user2 login;
CREATE ROLE

2.継承させる

postgres=# grant user1 to user2;
GRANT ROLE

3.権限確認

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

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

$ psql -U user2 postgres
psql (9.0.23)
Type "help" for help.

postgres=> create database u2db;
ERROR:  permission denied to create database

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

postgres=> set role user1;
SET
postgres=> create database u2db;
CREATE DATABASE
postgres=> \l
                               List of databases
   Name    | Owner  | Encoding |  Collation  |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 postgres  | postgres  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres         +
           |        |          |             |             | postgres=CTc/postgres
 template1 | postgres  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres         +
           |        |          |             |             | postgres=CTc/postgres
 u2db      | user1  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
(9 rows)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

自己解決しました。

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

PostgreSQL 権限の追加

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/12 10:07

    ご回答ありがとうございます。
    grantでroleに権限をつける場合だとwith grant option 指定はなく、代わりにwith admin option指定となるようです。

    現在質問に記載した環境では試せていませんが、centOS7のpostgres9.2.23環境では同様のエラーとなってしまいました。

    引き続き何かありましたらお願いいたします。

    キャンセル

  • 2018/03/12 10:44

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

    キャンセル

  • 2018/03/12 11:42

    ご回答ありがとうございます。

    [grant](https://www.postgresql.jp/document/9.0/html/sql-grant.html)

    先ほど貼るつもりが忘れてしまったので念のためリンクを貼っておきます。

    キャンセル

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

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる