3

任务

改造现有应用程序以使用多租户方法。应该可以创建租户,并且每个用户的会话应该准确引用一个活动租户。每个租户应该只能看到和更新他的数据库模式分区。

方法

  • 创建一个包含租户 ID 的 Oracle 应用程序上下文
  • 将租户 id 列添加到应限定范围的任何表中
  • 创建一个谓词函数,为 SELECT、INSERT、UPDATE 和删除返回 "tenant_id = sys_context('tenant_context', 'tenant_id')"
  • 通过 dbms_rls 添加适当的策略来注册谓词函数

这就像一个魅力,而无需触及 SELECT、UPDATE 和 DELETE 的现有应用程序

问题

插入tenant_id 列时未设置并且出现安全异常。有什么方法可以像谓词函数一样流畅地始终设置安全相关字段?我宁愿不向 300 多个表添加触发器。

4

1 回答 1

4

有时提出问题可以提供答案。我不知道您可以在列的默认值中使用非常量表达式,所以

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

实际上解决了我的问题。

于 2010-02-14T19:56:25.747 回答