Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
интересно как в Оракле, например, можно дать пользователю возможность работать на изменение только одной записи
6 июн 19, 17:53    [21903872]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
триггеры не предлагать, таблиц много и, возможно, будет миграция
6 июн 19, 17:53    [21903874]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
-2-
Member

Откуда:
Сообщений: 14912
Victor Cookin
интересно как в Оракле, например, можно дать пользователю возможность работать на изменение только одной записи
grant update on dual
6 июн 19, 18:02    [21903888]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48426

Victor Cookin
как в Оракле, например, можно дать пользователю возможность работать на изменение только
одной записи

"В соответствии с документацией на Row Level Security" не предлагать?..

Posted via ActualForum NNTP Server 1.5

6 июн 19, 18:12    [21903906]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
Dimitry Sibiryakov,

предлагать
6 июн 19, 18:25    [21903920]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17676
create table dropme_t(id number primary key, val varchar2(100)
    , usr varchar2(100) default sys_context('USERENV','SESSION_USER') check (usr=sys_context('USERENV','SESSION_USER'))
      unique
    )
;
6 июн 19, 18:27    [21903922]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
-2-
Member

Откуда:
Сообщений: 14912
Dimitry Sibiryakov
Row Level
Как на уровне строки узнать, что она не единственная?
6 июн 19, 18:28    [21903923]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17676
-2-
Dimitry Sibiryakov
Row Level
Как на уровне строки узнать, что она не единственная?

unique constraint не предлагать? :)
6 июн 19, 18:34    [21903930]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17676
andrey_anonymous
create table dropme_t(id number primary key, val varchar2(100)
    , usr varchar2(100) default sys_context('USERENV','SESSION_USER') check (usr=sys_context('USERENV','SESSION_USER'))
      unique
    )
;


Забыл дополнить:
create view dropme_v as select id, val from dropme_t where usr=sys_context('USERENV','SESSION_USER') with check option;


и грантуете пользователю dropme_v, она updatable
6 июн 19, 18:35    [21903932]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9597
Dimitry Sibiryakov
Row Level Security" не предлагать?..


RLS не сработает если UPDATE с WHERE clause.

SY.
6 июн 19, 18:46    [21903941]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52565
SY
Dimitry Sibiryakov
Row Level Security" не предлагать?..


RLS не сработает если UPDATE с WHERE clause.

SY.
дать права на вьюху
во вьюхе контекст
7 июн 19, 11:32    [21904339]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1340
Victor Cookin
триггеры не предлагать


Тем не менее, предложу триггер instead of. Генерация кода, в т.ч. миграционного, поддается автоматизации.

Кроме того, процедурный подход.
7 июн 19, 13:53    [21904496]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52565
Victor Cookin
триггеры не предлагать, таблиц много и, возможно, будет миграция
миграция вкуда?
7 июн 19, 14:13    [21904531]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9597
andreymx
дать права на вьюху
во вьюхе контекст


И как контекст разрешит изменение только одной строки?

SY.
7 июн 19, 14:32    [21904559]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52565
SY
andreymx
дать права на вьюху
во вьюхе контекст


И как контекст разрешит изменение только одной строки?

SY.
create UserView as
select * from businessTable
where id = sys_context(www, myId)
7 июн 19, 14:33    [21904562]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17676
andreymx
create UserView as
select * from businessTable
where id = sys_context(www, myId)


21903932
7 июн 19, 14:46    [21904579]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9597
andreymx
create UserView as
select * from businessTable
where id = sys_context(www, myId)


Как я понимаю задачу, юзер формирует любой запрос типа:

UPDATE some_table
   SET some_column = some_value
   WHERE some_conditions
/


и его необходимо "зарубить" если изменяется > 1 строки.

SY.
7 июн 19, 14:49    [21904582]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
andrey_anonymous
andreymx
create UserView as
select * from businessTable
where id = sys_context(www, myId)


21903932


імхо
sys_context('USERENV','SESSION_USER') перебор. ограничение сработает для всех юсеров
надо выборочно (пользователю)


.....
stax
7 июн 19, 14:55    [21904586]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29297
SY
Как я понимаю задачу,
А как её понимает немногословный автор - неважно?
7 июн 19, 15:04    [21904603]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52565
Elic
SY
Как я понимаю задачу,
А как её понимает немногословный автор - неважно?
поддержу предыдущего оратора
7 июн 19, 16:25    [21904703]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
andreymx
миграция вкуда?

Обсуждается в MS SQL Server. Но он не потятянет, начальница говорит.
7 июн 19, 17:44    [21904788]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
DВА
Member

Откуда:
Сообщений: 5415
Victor Cookin
andreymx
миграция вкуда?

Обсуждается в MS SQL Server. Но он не потятянет, начальница говорит.

поэтому решили только по одной записи апдейтить?
7 июн 19, 17:47    [21904792]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
SY,

Всё верно. Именно такая задача и стоит. Потому что через приложение юзер изменяет/добавляет.удаляет всегда только ОДНУ запись. А в RB ему дадена возможность исполнять любые скрипты в области своей видимости. И задача - не дать юзеру возможности делать UPRATE ... WHERE 1=1

Задача выросла из предыдущей (разрешить RB делать только селекты) - которая была решена путём создания спец. юзера RB_USER с возможностью только SELECT и создания для RB специального CONNECTION для этого RB_USER.
7 июн 19, 17:54    [21904804]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
DВА,

Юзеры апдейтят по одной записи. Точка. Все BULK LOAD выполняются IT
7 июн 19, 17:56    [21904806]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
dmdmdm,

Похоже, единственный выход. Жаль, таблиц много.
Делать ENABLE/DISABLE триггеров перед BULK LOAD мы уже умеем
7 июн 19, 18:01    [21904810]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48426

Victor Cookin
И задача - не дать юзеру возможности делать UPRATE ... WHERE 1=1

А если внимательно прочитать про RLS, то можно найти способ добавить к этому (и любому
другому) запросу условие "and ROWNUM = 1".

Posted via ActualForum NNTP Server 1.5

7 июн 19, 18:13    [21904828]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
Dimitry Sibiryakov
можно найти способ добавить к этому (и любому другому) запросу условие "and ROWNUM = 1"


Я тоже уверен, что можно. Как раз об этом и спросил.
7 июн 19, 18:31    [21904853]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Valergrad
Member

Откуда:
Сообщений: 674
Victor Cookin
SY,

Всё верно. Именно такая задача и стоит. Потому что через приложение юзер изменяет/добавляет.удаляет всегда только ОДНУ запись. А в RB ему дадена возможность исполнять любые скрипты в области своей видимости. И задача - не дать юзеру возможности делать UPRATE ... WHERE 1=1


Можно сделать защиту от дурака - но только от неизобретательного ( один из законов Мерфи). Что мешает юзеру запустить много апдейтов в каждом из которых он апдейтит одну строку? Он даже может их автоматически генерить.
Это все похоже на имитацию безопасности, вместо реальной безопасности.
7 июн 19, 18:31    [21904854]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7934
Если защита не от дурага, а от ошибок компьютера - вполне работает

У нас так баг в программе обнаружили, что иногда процедура удаления, которая предполагалась, что должна работать только по одной записи, запускалась по всей базе. Нашли неизвестную нам "фичу" Forms'ов из-за которой пользователь мог запустить пункт контектного меню не на том блоке ))). Вместо удаления одной записи в detail таблице, вычишалась вся master таблица )))
7 июн 19, 18:38    [21904863]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
Valergrad
Можно сделать защиту от дурака - но только от неизобретательного ( один из законов Мерфи).
Что мешает юзеру запустить много апдейтов в каждом из которых он апдейтит одну строку?


Юзер изобретателен, но ленив и незлонамерен.
7 июн 19, 18:48    [21904877]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9597
Dimitry Sibiryakov

А если внимательно прочитать про RLS, то можно найти способ добавить к этому (и любому
другому) запросу условие "and ROWNUM = 1".


А если внимательно вникнуть как работает RLS то:

create table emp1 as select * from emp
/
create or replace
  function one_row_only(
                        p_schema varchar2,
                        p_tab varchar2
                       )
    return varchar2
    is
    begin
        return 'rownum = 1';
end;
/
begin
    dbms_rls.add_policy(
                        object_schema => 'SCOTT',
                        object_name => 'EMP1',
                        policy_name => 'ONE_ROW_ONLY',
                        function_schema => 'SCOTT',
                        policy_function => 'ONE_ROW_ONLY',
                        statement_types => 'UPDATE'
                       );
end;
/
update emp1 set sal = sal
/
SQL> update emp1 set sal = sal
  2  /
update emp1 set sal = sal
       *
ERROR at line 1:
ORA-01732: data manipulation operation not legal on this view


SQL> 


А все потому что в отличие от SELECT где RLS просто бы добавил AND ROWNUM = 1 к WHERE в случае UPDATE/SELETE/INSERT это не так. RLS выдаст:

update (select * 
        from   (select * from emp1) 
        where  rownum = 1
       )
  set sal = sal
/


SY.
7 июн 19, 19:14    [21904895]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52565
Сделать схему, дать на неё права только на селект и пускать туда юзверя для произвольных говноселктов?
7 июн 19, 19:34    [21904903]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
andreymx
Сделать схему, дать на неё права только на селект и пускать туда юзверя для произвольных говноселктов?


Уже сделал. Но много интересного по ходу узнал. Например, про RLS
7 июн 19, 19:51    [21904911]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
SY

А все потому

SY.


С меня ещё одна бутылка
7 июн 19, 19:52    [21904912]     Ответить | Цитировать Сообщить модератору
 Re: изменение только одной записи  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9597
Victor Cookin
С меня ещё одна бутылка


Macallan 12 double cask. :).

SY.
7 июн 19, 20:52    [21904935]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Oracle Ответить