11.4.?唯一性约束推理控制

如果表存在主键或者unique约束条件,那么可能通过插入时的报错,猜测出表中含有的主键值,uxdb的解决办法是让主键或者unique约束条件包含行级控制时添加的三个伪列(plcol, plcol_level, plcol_scope)。

uxdb通过对表添加一个选项multilevel_unique_index,如果为true表示这张表创建主键或者unique index时必须包含三个伪列。

列如test_infer表,如果创建主键为id1,那么创建时包含的列为四个:id1, plcol, plcol_level, plcol_scope。

  1. uxop创建测试表:

    create table public.test_unique(id1 int,id2 int);
  2. 打开multilevel_unique_index开关:

    alter table test_unique set(multilevel_unique_index = true);
  3. 测试表添加主键(包含三个伪列):

    alter table test_unique add primary key(id1,plcol,plcol_level,plcol_scope);
  4. 打开行级保护开关,并把测试表权限放开:

    select mac_apply_row_policy('public','test_unique','pl2');
    grant all on test_unique to public;
  5. 不同写保护标记用户插入相同的数据:

    insert into test_unique values(1,1);

    manager:

    developer:

    不同写保护用户插入相同数据可以正常插入。

  6. 不同用户分别查看测试表的数据:

    select * from test_unique;

    manager:

    developer:

    可以看出manager可以看到两行值相同但是标记不同的数据。

XML 地图 | Sitemap 地图