Slide 31
Slide 31 text
© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved.
初期設計時に PostgreSQL ⾏レベルセキュリティ
(RLS) を候補に⼊れる
instance
database
schema
tenant_id user_id username
tenant1 1 Suzuki
tenant1 2 Sato
tenant2 1 Nakamura
tenant2 2 Takahashi
tenant3 1 Yamada
user_id username
user_id username
1 Yamada
user_id username
1 Suzuki
2 Sato
-- Tenant1
SET app.current_tenant = ‘tenant1’;
SELECT user_id,username
FROM users
WHERE tenant_id = ‘tenant1’;
-- Create Table
CREATE TABLE users(
tenant_id VARCHAR(20),
user_id INT,
username VARCHAR(20),
PRIMARY KEY(tenant_id,user_id));
-- Insert Data
INSERT INTO users VALUES('tenant1',1,'Suzuki’);
INSERT INTO users VALUES('tenant1',2,'Sato’);
INSERT INTO users VALUES('tenant2',1,'Nakamura’);
INSERT INTO users
VALUES('tenant2',2,'Takahashi’);
INSERT INTO users VALUES('tenant3',1,'Yamada’);
-- Create Policy
CREATE POLICY tenant_isolation_policy ON users
USING (tenant_id =
current_setting('app.current_tenant’)::varchar);
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
Aurora PostgreSQL の RLS 設定
※ PostgreSQL 9.5 以降
users table
PostgreSQL の⾏レベルのセキュリティを備えたマルチテナントデータの分離
-- Tenant2
SET app.current_tenant = ‘tenant2’;
SELECT user_id,username
FROM users
WHERE tenant_id = ‘tenant1’;
-- Tenant3
SET app.current_tenant = ‘tenant3’;
SELECT user_id,username
FROM users;
※プライマリキーには数値シーケンスを使⽤し、
⼤規模なデータセットのスケーラビリティとパ
フォーマンスを向上させることを推奨