多租户应用程序中的Oracle行级安全性/新记录的默认值

时间:2010-02-14 19:52:11

标签: oracle multi-tenant row-level-security

任务

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

方法

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

这就像魅力而不触及SELECT,UPDATE和DELETE

的现有应用程序

问题

插入tenant_id列时未设置,并出现安全性异常。是否有任何像谓词函数一样流畅的方法来始终设置安全相关的字段?我宁愿不为300多个表添加触发器。

1 个答案:

答案 0 :(得分:3)

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

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

实际上解决了我的问题。