Изменение графика работы пользователя
Спецификация
::={ALWAYS | график по времени | график по дням}
::=::=::=::=::=::=::=::=Синтаксические правила
-
<График по времени>задается по Гринвичу и округляется в меньшую сторону до ближайшего получасового интервала. -
Значение '00:00', заданное в качестве конца диапазона времени, рассматривается как окончание суток.
Общие правила
-
Конструкция
ENABLE LOGINразрешает,DISABLE LOGINзапрещает пользователю доступ к БД в указанные периоды времени. -
Опция
ALWAYSустанавливает (ENABLE LOGIN) или запрещает (DISABLE LOGIN) ежедневный круглосуточный период доступа к БД в течение всего времени её существования (при создании пользователя задаётсяENABLE LOGIN ALWAYS). -
Если опция
FROM <время начала работы>не задана, по умолчанию используется начало суток. -
Если опция
TO <время окончания работы>не задана, по умолчанию используется конец суток. -
Если опция
FOR <дни работы>не задана, по умолчанию используется все дни недели.
Примеры
! 1)
alter user GUEST enable login for 'MON','WED','SUN' since '16.06.2010' until '20.06.2010' from '12:50' to '16:45';
! 2) Установка доступности к БД сотрудника GUEST на время испытательного срока c 01.04.2018 по 01.06.2018
alter user GUEST enable login since '01.04.2018';
alter user GUEST enable login until '01.06.2018';
! Посмотреть период и длительность испытательного срока
select rowid from $$$usr where $$$s34='GUEST';
44
select cast getraw($$$s35,88,16) as date,
cast getraw($$$s35,104,16) as date
from $$$usr where rowid=44;
01.04.2018:00:00:00 01.06.2018:00:00:00
! 3) Посмотреть маску запрещенных для доступа дней недели
alter user U1 disable login for 'SAT','SUN';
! Битовая маска
select 'Доступ запрещен: ' ||
(case when (GetByte($$$S35,120) & 0x1) = 0
then '0' else '1' end) ||
(case when (GetByte($$$S35,120) & 0x2) = 0
then '0' else '1' end) ||
(case when (GetByte($$$S35,120) & 0x4) = 0
then '0' else '1' end) ||
(case when (GetByte($$$S35,120) & 0x8) = 0
then '0' else '1' end) ||
(case when (GetByte($$$S35,120) & 0x10) = 0
then '0' else '1' end) ||
(case when (GetByte($$$S35,120) & 0x20) = 0
then '0' else '1' end) ||
(case when (GetByte($$$S35,120) & 0x40) = 0
then '0' else '1' end)
from LINTER_SYSTEM_USER.$$$USR
where $$$S32=0 and $$$S34 like 'GUEST';
|Доступ запрещен: 0000011|
! 4) Посмотреть ограничение доступа к БД по дням недели
create or replace user guest identified by '12345678';
alter user GUEST DISABLE LOGIN
FROM '01:45' TO '02:15' for 'MON', 'FRI';
select
case d when 0 then 'MON' when 1 then 'TUE' when 2 then 'WED'
when 3 then 'THU' when 4 then 'FRI' when 5 then 'SAT'
when 6 then 'SUN' end, /* день */
to_char(
cast (cast (to_date ('30', 'MI') as decimal) * sh as date),
'HH:MI') /* время начала */ || '-' ||
to_char(to_date('00:30', 'HH:MI') +
cast (cast (to_date ('30', 'MI') as decimal) * sh as date),
'HH:MI') /* время окончания */
from
(select level-1 d from $$$usr
start with rowid=1 connect by level < 7), /* дни */
(select level-1 sh from $$$usr
start with rowid=1 connect by level < 48),
/* получасовые промежутки */
LINTER_SYSTEM_USER.$$$USR
where
$$$S32=0 and $$$S34 like 'GUEST' and
((GetByte($$$S35,18+d*6+sh/8) &
cast (power(2,mod(sh,8)) as int)) <> 0);
MON 01:30-02:00
FRI 01:30-02:00