【问题标题】:How to protect timestamp column from user update如何保护时间戳列不被用户更新
【发布时间】:2013-04-05 15:30:51
【问题描述】:

我创建了一个触发器来放置两个时间戳,插入和更新。我希望创建的时间戳永远被冻结,但我发现用户可以使用常规的 SQL UPDATE 语句直接更新它(在正常插入之后)。如何保护 tsCreated 免受用户更新?

这里是触发器

CREATE OR REPLACE TRIGGER AAAjob_timing
    before insert or update
    on AAAJOB
    for each row
begin
    CASE
        WHEN INSERTING THEN
            :new.tsCreated := sysdate;
            :new.tsUpdated := :new.tsCreated;
        WHEN UPDATING THEN
            :new.tsUpdated := sysdate;
    END CASE; 
    end;
/

【问题讨论】:

    标签: oracle timestamp


    【解决方案1】:

    当用户尝试更新此列中的值时,在触发器中引发异常。

    【讨论】:

    • 将此作为约束(更新后)并将其安装为普通用户无法成为的用户(例如 sysadmin),至少不容易
    【解决方案2】:

    怎么样

    CREATE OR REPLACE TRIGGER AAAJOB_TRIGGER
      BEFORE INSERT OR UPDATE ON AAAJOB
      FOR EACH ROW
    BEGIN
      IF INSERTING THEN
        :NEW.TSCREATED := SYSDATE;
        :NEW.TSUPDATED := SYSDATE;
      ELSIF UPDATING THEN
        :NEW.TSCREATED := :OLD.TSCREATED;
        :NEW.TSUPDATED := SYSDATE;
      ENDIF;
    END AAJOB_TRIGGER;
    

    分享和享受。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 2023-04-09
      • 2016-12-07
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多