<form id="fjn3d"></form>

<address id="fjn3d"></address>

            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可以看到兩行值相同但是標記不同的數據。

            91竞彩之家