Запретить доступ к строке в таблице

 
0
 
Oracle
ava
Marriage | 18.06.2004, 22:47
Как запретить доступ к строке в таблице ???
То есть ...
Есть запрос ...
Select * from TTable where fk_id=123...
Нужно сделать так, чтобы с другого клиента не могли получить доступ к этой строке (delete,update,insert)
Comments (13)
ava
Kesh | 18.06.2004, 22:03 #
Посмори методы Lock|UnLock... Подробнее сейчас не могу сказать Oracle не запущен...
ava
LSD | 18.06.2004, 22:09 #
select for update но это черевато тем что если не снимешь блокировку таблица будет в ступоре.
ava
Marriage | 18.06.2004, 22:14 #
Lock|Unlock - не подойдет ...
Это на всю таблицу ...
А мне на опред строку ...
select for update ---
Пробовал ..., только там прикол ...
Ппросто изменения в базе поступают в очередь ...
И как только блокировка снимается (курсор закрывается , происходят изменения в базе ...)
ava
Marriage | 21.06.2004, 21:19 #
Спасибо LSD ...
Натолкнул на мыслю ...
НУжно еще nowait добавить
Select * from TTable where ---- for update nowait
ava
<Spawn> | 22.06.2004, 08:24 #
А GRANT, REVOKE не подойдет? Хотя сам я пока этими командами не пользовался и толком по ним ни чего сказать не могу.
ava
MuToGeN | 22.06.2004, 09:40 #
AFAIK с помощью GRANT / REVORE можно ограничить доступ от силы к таблице. На уровне рядов не поможет.
ava
LSD | 28.06.2004, 20:17 #
Как запретить доступ вроде разобрались, а вот как выбрать те строки которые в данный момент не заблокированны?
ava
<Spawn> | 29.06.2004, 10:16 #
LSD А что мешает добавить поле идентифицирующее, что запись заблокирована? Либо создать связаную таблицу, котора содержала бы ключ модифицируемой записи и пользователя.

Тогда выборка была бы такой:

SELECT * 
  FROM Table
 WHERE not primary_key in
   (SELECT ref_key FROM LockTable)

added later:
А блокировать примерно так:

create or replace function Lock(p_key in Table.primary_key%type) return boolean
is
pragma autonomous_transaction;
begin
INSERT INTO LockTable (ref_key, lock_user)
VALUES (p_key, USER);
commit;
return true;
exception
when others then
return false;
end;
ava
LSD | 29.06.2004, 18:52 #
Ничто не мешает, это скорее теоретический вопрос, если есть встроенные механизмы, то почему бы их не использовать.
Из надежных источников smile я узнал, что есть функция которая позволяет проврить строку на предмет блокировки. Но к сожалению этот источник затруднился сообщить, как эта функция называется. Так что придется поискать самому. :(
ava
Vaulter | 20.01.2005, 16:24 #
сформулирую вопрос, мучающий меня на протяжении последнего полгода:
можно ли, в одной таблице, держать записи с различными правами чтения (ну и изменения) для различных пользователей.
так что бы

по запросу SELECT * выбиралисьтолько записи что попадают в WHERE_CLAUSE и те, на которые ЕСТЬ права на чтения, того пользователя что сейчас делает этот запрос.
вот...
фух...
спасибо за ответ.
smile :qstn
ava
LSD | 20.01.2005, 19:43 #
В таблице нет, а вот во вьюере можно. Почитай про Virtual Private Database.
ava
AntonSaburov | 24.01.2005, 19:54 #
Я после лет 10 проектирования баз решил, что доступ напрямую к таблицам пользователям давать вообще нельзя. Лучше через StoreProcedure или View на крайний случай.
И тогда проблем нет.
ava
Paradox | 11.10.2006, 14:56 #
нечаяно наткнулся на тему и вопрос Vaulter
Цитата


можно ли, в одной таблице, держать записи с различными правами чтения (ну и изменения) для различных пользователей.


наверное отвечать поздно, но тем не менее позволю себе добавить, может кому нибудь будет интересно :)

ответ МОЖНО!
делается это с помощью политик - копайте в сторону dbms_rls.ADD_POLICY

можно не только ограничить доступ к строкам, но и к столбцам
то есть по сути можно дать пользователю права на определенные действия (в том числе и селект) вообще для единственной ячейке в таблице.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit