2015-07-13 143 views
0

我正在编写一个应用程序,我想知道是否有可能在数据库端(Oracle)而不是应用程序端获得此数据权限配置。如何在Oracle上获取此数据权限配置?

它基本上涉及到一些表具有存储不能被编辑的一天,他们被输入后的历史数据...

表:X

领域:

  • 什么为VARCHAR2
  • 指明MyDate为DATETIME

˚F或每行,如果(当前日期= MyDate),则允许编辑。否则,号码

请问可能吗?我是否需要使用Oracle Label Security?

我正在寻找一些可以作为访问权限(授予/撤销...)进行管理的东西管理员可以为用户或角色创建,授予或撤销这样的权限。

谢谢。

+1

如果您的条件未得到满足,您可以在表格上放置更新前触发器,以拒绝更新... – StevieG

+0

谢谢。我虽然关于它,但我正在寻找可以作为访问权限(授予/撤销...)进行管理的东西。使用方法是管理员可以创建,授予或撤销对用户或角色的此类权限 –

+0

实际上,有些用户将被允许做这样的事情,但不是其他人... –

回答

0

一个行级别的触发器应该做的伎俩。

create or replace trigger my_trigger 
    before update on my_table 
    for each row 
begin 
    -- Only compare the date part (trunc removes the time) 
    if trunc(:old.mydate)!=trunc(sysdate) 
    then raise_application_error(-20000,'Updates only allowed on the day of entry'); 
    end if; 
end; 

当然,午夜前添加的条目编辑时间很短。 此外,你应该以某种方式禁用更新mydate字段的可能性。触发器中的一些额外的行将照顾到这一点。

+0

谢谢。我虽然关于它,但我正在寻找可以作为访问权限(授予/撤销...)进行管理的东西。使用方法是,管理员可以创建,授予或撤销对用户或角色的这种权限。 –

+0

实际上,一些用户将被允许执行此类操作,但不允许其他用户执行此操作。 –

+0

您可以将其应用到触发器中。测试用户是否具有某种角色并允许/禁止更新。 – Rene