Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PostgreSQLの権限管理 ~ アカウントの操作とRow Level Securityの活...

Avatar for soudai sone soudai sone
October 19, 2022

PostgreSQLの権限管理 ~ アカウントの操作とRow Level Securityの活用 ~ / pgcon2022-tutorial

# PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
https://www.slideshare.net/nttdata-tech/postgresql-roles-osc2022-online-osaka-nttdata
# マルチテナントにおけるRow Level Securityの具体的な実装と注意点
https://soudai.hatenablog.com/entry/2022/11/11/110825

Avatar for soudai sone

soudai sone

October 19, 2022
Tweet

More Decks by soudai sone

Other Decks in Technology

Transcript

  1. 自己紹介
 曽根 壮大(38歳)
 Have Fun Tech LLC 代表社員
 株式会社リンケージ CTO


    
 そ  ね   たけ とも
 • 日本PostgreSQLユーザ会 勉強会分科会 担当
 • 3人の子供がいます(長女、次女、長男)
 • 技術的にはWeb/LL言語/RDBMSが好きです
 • コミュニティが好き
  2. • 9.6 デフォルトロールが追加
 • 10 デフォルトロールから
 定義済みロールに変更
 • 14 定義済みロールが更に追加


    • 15 publicスキーマの権限が変更
 アカウント作成と権限の基本 互換性を壊すような変更は少ないが、 
 新機能の追加や細かい調整は多く入っている 

  3. -- ログイン可能なロールを作成します。 -- ただし、パスワードはありません。 CREATE ROLE jonathan LOGIN; -- パスワード付きのロールを作成します。

    -- CREATE USERはLOGINを意味する点を除き、 -- CREATE ROLEと同一です。 CREATE USER davide WITH PASSWORD 'jw8s0F4'; -- 2004年まで有効なパスワードを持つロールを作成します。 -- 2005年に1秒でも入った時点でパスワードは無効になります。 CREATE ROLE miriam WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01' ; -- データベースを作成でき、かつ、 -- ロールを管理できるロールを作成します。 CREATE ROLE admin WITH CREATEDB CREATEROLE ; CREATE ROLE name [ [ WITH ] option [ ... ] ]
 
 ここでoptionは以下の通りです。
 
 SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid 
 
 公式ドキュメントを読もう https://www.postgresql.jp/document/14/html/sql-createrole.html
  4. -- 現在の設定を確認します SELECT SESSION_USER, CURRENT_USER; session_user | current_user --------------+-------------- peter

    | peter -- 一時的にロールをセットします SET ROLE 'paul'; SELECT SESSION_USER, CURRENT_USER; session_user | current_user --------------+-------------- peter | paul • ロールは一時的に設定することも可能
 • SET ROLE {name} で設定
 • RESET ROLEで元のロールに戻る
 • セッションユーザがメンバ資格を持つロールのみ使用できる 
 • セッションユーザとは、セッションを開始したユーザ
 • スーパーユーザは任意のロールを使用可
 • NONEおよびRESET形式は、現在のユーザ識別子を現在のセッ ションユーザ識別子に戻します。 
 この形式はすべてのユーザが実行することができます。
 公式ドキュメントを読もう https://www.postgresql.jp/document/14/html/sql-set-role.html
  5. -- 現在の設定を確認します SELECT * FROM pg_roles; • ロールの一覧は専用のVIEWが用意されている
 • psqlのメタコマンドでも参照可能


    • 詳細は公式ドキュメントを読みましょう
 公式ドキュメントを読もう https://www.postgresql.jp/document/14/html/view-pg-roles.html
  6. RLSの概要と実際の活用方法 ID NAME ROLE email 1 test admin [email protected] 2

    hoge user [email protected] 3 fuga user [email protected] 4 foo admin [email protected] 5 bar user [email protected] Viewで列を制限 ID NAME ROLE 1 test admin 2 hoge user 3 fuga user 4 foo admin 5 bar user SELECT id,name,role FROM hoge;
  7. RLSの概要と実際の活用方法 ID NAME ROLE email 1 test admin [email protected] 2

    hoge user [email protected] 3 fuga user [email protected] 4 foo admin [email protected] 5 bar user [email protected] RLSで行を制限 SELECT * FROM hoge; 例えばrole=userだけの結果を返す