Ограничить просмотр таблицы между определенными периодами времени с помощью оператора sysdate в Oracle - PullRequest
1 голос
/ 23 марта 2012

Мне нужно ограничить представление таблицы между определенным временем для определенного пользователя.Я не могу найти информацию о том, как это сделать.

Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Вы можете использовать политику Virtual Private Database (VPD) , чтобы обеспечить это, или более просто предоставить пользователям доступ к представлению вместо таблицы, где представление выглядит примерно так:

create view data_vw as
select * from data
where (to_char(sysdate,'HH24MI') between '0800' and '1730'
      or user = 'CERTAINUSER'
      );

В любом случае пользователи по-прежнему будут иметь доступ, но таблица / представление иногда не будет возвращать строки.

1 голос
/ 23 марта 2012

Как насчет чего-то вроде

CREATE OR REPLACE VIEW SOME_VIEW AS
  SELECT FIELD1, FIELD2, FIELD_ETC
    FROM REAL_TABLE
    WHERE USER = 'MY_BUDDY' AND
          TO_NUMBER(TO_CHAR(SYSDATE, 'HH')) BETWEEEN 8 AND 16
  UNION ALL
  SELECT NULL AS FIELD1, NULL AS FIELD2, NULL AS FIELD_ETC
    FROM DUAL
    WHERE USER <> 'MY_BUDDY' OR
          TO_NUMBER(TO_CHAR(SYSDATE, 'HH24')) NOT BETWEEEN 8 AND 16;

Это позволило бы пользователю MY_BUDDY просматривать данные из REAL_TABLE с 08:00 до 16:59 каждый день.

Делиться и наслаждаться.

...