powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / изменение только одной записи
10 сообщений из 35, страница 2 из 2
изменение только одной записи
    #39824241
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinИ задача - не дать юзеру возможности делать UPRATE ... WHERE 1=1

А если внимательно прочитать про RLS, то можно найти способ добавить к этому (и любому
другому) запросу условие "and ROWNUM = 1".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824261
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov можно найти способ добавить к этому (и любому другому) запросу условие "and ROWNUM = 1"

Я тоже уверен, что можно. Как раз об этом и спросил.
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824262
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinSY,

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


Можно сделать защиту от дурака - но только от неизобретательного ( один из законов Мерфи). Что мешает юзеру запустить много апдейтов в каждом из которых он апдейтит одну строку? Он даже может их автоматически генерить.
Это все похоже на имитацию безопасности, вместо реальной безопасности.
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824271
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если защита не от дурага, а от ошибок компьютера - вполне работает

У нас так баг в программе обнаружили, что иногда процедура удаления, которая предполагалась, что должна работать только по одной записи, запускалась по всей базе. Нашли неизвестную нам "фичу" Forms'ов из-за которой пользователь мог запустить пункт контектного меню не на том блоке ))). Вместо удаления одной записи в detail таблице, вычишалась вся master таблица )))
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824281
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradМожно сделать защиту от дурака - но только от неизобретательного ( один из законов Мерфи).
Что мешает юзеру запустить много апдейтов в каждом из которых он апдейтит одну строку?

Юзер изобретателен, но ленив и незлонамерен.
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824290
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А если внимательно прочитать про RLS, то можно найти способ добавить к этому (и любому
другому) запросу условие "and ROWNUM = 1".


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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
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 выдаст:

Код: plsql
1.
2.
3.
4.
5.
6.
update (select * 
        from   (select * from emp1) 
        where  rownum = 1
       )
  set sal = sal
/



SY.
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824296
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделать схему, дать на неё права только на селект и пускать туда юзверя для произвольных говноселктов?
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824300
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxСделать схему, дать на неё права только на селект и пускать туда юзверя для произвольных говноселктов?

Уже сделал. Но много интересного по ходу узнал. Например, про RLS
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824301
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
А все потому

SY.

С меня ещё одна бутылка
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824313
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinС меня ещё одна бутылка

Macallan 12 double cask. :).

SY.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / изменение только одной записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]