powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / изменение только одной записи
35 сообщений из 35, показаны все 2 страниц
изменение только одной записи
    #39823647
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно как в Оракле, например, можно дать пользователю возможность работать на изменение только одной записи
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823648
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
триггеры не предлагать, таблиц много и, возможно, будет миграция
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823656
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinинтересно как в Оракле, например, можно дать пользователю возможность работать на изменение только одной записиgrant update on dual
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823666
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinкак в Оракле, например, можно дать пользователю возможность работать на изменение только
одной записи

"В соответствии с документацией на Row Level Security" не предлагать?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823674
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

предлагать
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823675
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
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
    )
;
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823676
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov Row Level
Как на уровне строки узнать, что она не единственная?
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823680
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Dimitry Sibiryakov Row Level
Как на уровне строки узнать, что она не единственная?
unique constraint не предлагать? :)
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823681
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Код: plsql
1.
2.
3.
4.
5.
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
    )
;



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



и грантуете пользователю dropme_v, она updatable
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823686
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovRow Level Security" не предлагать?..


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

SY.
...
Рейтинг: 0 / 0
изменение только одной записи
    #39823922
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYDimitry SibiryakovRow Level Security" не предлагать?..


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

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

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

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

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

SY.
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824064
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYandreymxдать права на вьюху
во вьюхе контекст

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

SY.create UserView as
select * from businessTable
where id = sys_context(www, myId)
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824076
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxcreate UserView as
select * from businessTable
where id = sys_context(www, myId)

21903932
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824079
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxcreate UserView as
select * from businessTable
where id = sys_context(www, myId)

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

Код: plsql
1.
2.
3.
4.
UPDATE some_table
   SET some_column = some_value
   WHERE some_conditions
/



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

SY.
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824083
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousandreymxcreate UserView as
select * from businessTable
where id = sys_context(www, myId)

21903932

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


.....
stax
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824094
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYКак я понимаю задачу,А как её понимает немногословный автор - неважно?
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824161
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSYКак я понимаю задачу,А как её понимает немногословный автор - неважно?поддержу предыдущего оратора
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824210
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxмиграция вкуда?
Обсуждается в MS SQL Server. Но он не потятянет, начальница говорит.
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824213
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinandreymxмиграция вкуда?
Обсуждается в MS SQL Server. Но он не потятянет, начальница говорит.
поэтому решили только по одной записи апдейтить?
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824220
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

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

Задача выросла из предыдущей (разрешить RB делать только селекты) - которая была решена путём создания спец. юзера RB_USER с возможностью только SELECT и создания для RB специального CONNECTION для этого RB_USER.
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824222
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВА,

Юзеры апдейтят по одной записи. Точка. Все BULK LOAD выполняются IT
...
Рейтинг: 0 / 0
изменение только одной записи
    #39824226
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,

Похоже, единственный выход. Жаль, таблиц много.
Делать ENABLE/DISABLE триггеров перед BULK LOAD мы уже умеем
...
Рейтинг: 0 / 0
изменение только одной записи
    #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
35 сообщений из 35, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / изменение только одной записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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