Magnus Jungsbluth
Magnus Jungsbluth

Reputation: 91

Oracle Row Level Security in multi-tenant app / default values for new records

Task

Retrofit an existing application to use a multi-tenant approach. It shall be possible to create tenants and each user's session should reference exactly one active tenant. Each tenant should only be able to see and update his partition of the database schema.

Approach

This works like a charm without touching the existing application for SELECT, UPDATE and DELETE

Question

When inserting the tenant_id column doesn't get set and a security exception comes up. Is there any way that is as sleek as the predicate function to always set security related fields? I'd rather not add triggers to 300+ tables.

Upvotes: 3

Views: 872

Answers (1)

Magnus Jungsbluth
Magnus Jungsbluth

Reputation: 91

Sometimes asking a question provides the answer. I wasn't aware that you may use non-constant expressions in column's default values, so

alter table XXX
add column tenant_id default sys_context('tenant_context', 'tenant_id');

actually solves my problem.

Upvotes: 4

Related Questions