知りたいこと
grant で role を継承したとき、"親role(以下、user1)" の権限が "子role(以下、user2)" にすぐに継承されません。
PostgreSQL 9.0.4文書 - 20.4. ロールのメンバ資格を読んでいる限りでは継承の方法は2つあって
0. set role で明示的にroleを変更
- "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 タイトルと内容を一部更新。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。