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

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

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

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

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


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

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

У нас так баг в программе обнаружили, что иногда процедура удаления, которая предполагалась, что должна работать только по одной записи, запускалась по всей базе. Нашли неизвестную нам "фичу" 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
Сообщений: 9563
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

Откуда: Запорожье
Сообщений: 52330
Сделать схему, дать на неё права только на селект и пускать туда юзверя для произвольных говноселктов?
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
Сообщений: 9563
Victor Cookin
С меня ещё одна бутылка


Macallan 12 double cask. :).

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