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

Откуда:
Сообщений: 7
День добрый,

Нужно сделать триггер на удаление из таблицы, который бы запрещал удалени из таблицы для чужого пользователя.

Каким образом это можно сделать?
30 ноя 07, 12:37    [4986806]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 100617
Есть такая переменная user ...
30 ноя 07, 12:38    [4986812]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
raise вставить
30 ноя 07, 12:38    [4986813]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 100617
2Jannny: Все правильно, нам надоело отвечать одинаково и мы теперь
отвечаем "пополам"
30 ноя 07, 12:40    [4986826]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
sadgin
Member

Откуда:
Сообщений: 7
А можно пример?
30 ноя 07, 12:46    [4986874]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
ant74
Member

Откуда: DE
Сообщений: 161
А grant на delete чужому пользователю не давать слишком просто?
30 ноя 07, 12:49    [4986896]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
sadgin
Member

Откуда:
Сообщений: 7
Задача стоит именно сделать это через триггеры
30 ноя 07, 12:51    [4986921]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
sadgin
А можно пример?

CREATE OR REPLACE TRIGGER trg_del 
before delete on tbl_name for each row
begin 
if  user <> 'puper_user' then 
  raise_application_error(-20003,'Нет удалениям во всем мире!');
end if;
end trg_del;
30 ноя 07, 12:53    [4986942]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
sadgin
Member

Откуда:
Сообщений: 7
Спасибо :)
30 ноя 07, 13:04    [4987041]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9237
semenar
sadgin
А можно пример?

CREATE OR REPLACE TRIGGER trg_del 
before delete on tbl_name for each row
begin 
if  user <> 'puper_user' then 
  raise_application_error(-20003,'Нет удалениям во всем мире!');
end if;
end trg_del;


And why for each row?

SY.
30 ноя 07, 16:14    [4988679]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
SY
semenar
sadgin
А можно пример?

CREATE OR REPLACE TRIGGER trg_del 
before delete on tbl_name for each row
begin 
if  user <> 'puper_user' then 
  raise_application_error(-20003,'Нет удалениям во всем мире!');
end if;
end trg_del;


And why for each row?

SY.

Согласен, смостырил из того что было под рукой.
30 ноя 07, 16:22    [4988752]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
SY
semenar
sadgin
А можно пример?

CREATE OR REPLACE TRIGGER trg_del 
before delete on tbl_name for each row
begin 
if  user <> 'puper_user' then 
  raise_application_error(-20003,'Нет удалениям во всем мире!');
end if;
end trg_del;


And why for each row?

SY.

У меня просто в каждой строке службное поле usr и конструкция с ипользованием
:new. or :old.
30 ноя 07, 16:29    [4988800]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
alexia
Member

Откуда: Санкт-Петербург
Сообщений: 460
Вопрос в в тему:
  raise_application_error(<-число>, <сообщение>)
Каким образом подбирается значение для <число>? От фонаря или правило какое-то есть?
16 янв 08, 12:25    [5159271]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
Gallagher
Member

Откуда: ( ͡°◞ʖ◟ ͡°)
Сообщений: 542
Ещё правильнее сравнивать не со строкой (которая в случае с именем пользователя должна быть в апперкейсе) а с овнером таблицы имхо
16 янв 08, 12:29    [5159285]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
Madness
Member

Откуда: Москва
Сообщений: 648
alexia
Вопрос в в тему:
  raise_application_error(<-число>, <сообщение>)
Каким образом подбирается значение для <число>? От фонаря или правило какое-то есть?
А в доку глянуть? Defining Your Own Error Messages
16 янв 08, 12:31    [5159305]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
tru55
Member

Откуда: СПб
Сообщений: 19718
alexia
Вопрос в в тему:
  raise_application_error(<-число>, <сообщение>)
Каким образом подбирается значение для <число>? От фонаря или правило какое-то есть?


PL/SQL User’s Guide and Reference


Defining Your Own Error Messages: Procedure RAISE_APPLICATION_ERROR

To call RAISE_APPLICATION_ERROR, use the syntax

raise_application_error(error_number, message[, {TRUE | FALSE}]);

where error_number is a negative integer in the range -20000 .. -20999 and
message is a character string up to 2048 bytes long.
16 янв 08, 12:33    [5159323]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
alexia
Member

Откуда: Санкт-Петербург
Сообщений: 460
Про диапазон я знаю.
Хорошо, вот пример: допустим, выбрал я число -20100. Где гарантия того, что это число уже где-то используется, но для других целей?
16 янв 08, 12:38    [5159361]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
alexia
Member

Откуда: Санкт-Петербург
Сообщений: 460
ошибся немного:
alexia

Хорошо, вот пример: допустим, выбрал я число -20100. Где гарантия того, что это число уже где-то не используется для других целей?
16 янв 08, 12:40    [5159381]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
tru55
Member

Откуда: СПб
Сообщений: 19718
alexia
Про диапазон я знаю.
Хорошо, вот пример: допустим, выбрал я число -20100. Где гарантия того, что это число уже где-то используется, но для других целей?


Гарантии нет, это вопрос проектирования. Если ошибка выдается наружу и не перехватывается, вопрос числа - десятый. Если ты в своей процедуре (серверной или клиентской) обрабатываешь исключение, ты должен просмотреть все вызываемые процедуры...
16 янв 08, 12:42    [5159393]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Запрет на удаление  [new]
SAS2014
Member

Откуда: Сталинград
Сообщений: 2658
Как запретить для определенной схемы удалять любую таблицу даже если эта таблица находится в этой же схеме?
5 окт 18, 06:12    [21695937]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28495
SAS2014
Как запретить для определенной схемы удалять любую таблицу даже если эта таблица находится в этой же схеме?
revoke create session
5 окт 18, 07:40    [21695947]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
Alexander_Ttl
Member

Откуда: Новосибирск
Сообщений: 151
SAS2014, разместить все таблицы в другой схеме и пользоваться синонимами
5 окт 18, 07:56    [21695955]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
SAS2014
Member

Откуда: Сталинград
Сообщений: 2658
Alexander_Ttl
SAS2014, разместить все таблицы в другой схеме и пользоваться синонимами

не вариант
5 окт 18, 08:01    [21695959]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
SAS2014
Member

Откуда: Сталинград
Сообщений: 2658
база производственная информация привязана к схеме и таблицы
5 окт 18, 08:10    [21695961]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
MirnyiAtom
Member

Откуда:
Сообщений: 24
Создать системный триггер на drop table?
5 окт 18, 08:20    [21695963]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
-2-
Member

Откуда:
Сообщений: 14115
MirnyiAtom
Создать системный триггер на drop table?
Если в базе работают вредители, обойдут без проблем.
5 окт 18, 08:34    [21695967]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5923
SAS2014
база производственная информация привязана к схеме и таблицы

И все ходят под владельцем схемы, явно знают его пароль и имеют возможность выполнить произвольный запрос в БД?

Ах как вы себе заботливо грабли разложили-то! А вот и дробовичок для выстрела в свою ногу рядышком лежит.
5 окт 18, 11:43    [21696151]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1419
env,

для создания "системного триггера" не нужны особые права?

.....
stax
5 окт 18, 12:06    [21696218]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5923
Stax,

-2- уже ответил. Если есть желание навредить, то и это обойдут.
Подойдёт в качестве защиты от дурака-разработчика, выдавшего объектные права в доступные рядовому пользователю.
5 окт 18, 12:12    [21696227]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1419
env,

я б не смог обойти

.....
stax
5 окт 18, 12:19    [21696237]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5149
-2-
MirnyiAtom
Создать системный триггер на drop table?
Если в базе работают вредители, обойдут без проблем.
В общем случае? Как?
5 окт 18, 14:24    [21696408]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
-2-
Member

Откуда:
Сообщений: 14115
dbms_photoshop
-2-
Если в базе работают вредители, обойдут без проблем.
В общем случае? Как?
Если триггер на схема.drop, именно дропнуть не получится. Получить схожий результат можно через rename, alterом удалить поля и накрыть truncateом.
Может быть получится создать партиционную таблицу, сделать exchange и дроп партиции.
5 окт 18, 15:30    [21696498]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9237
-2-,

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

SY.
5 окт 18, 15:52    [21696536]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28495
SY
Оригинальный (ооочень древний) вопрос был про запрет удаления данных таблицы а вот сегодняшний про запрет удаления самих таблиц. Конечно, с точки зрения бизнеса те же яйца, но с технической...
Виной тому, в немалой степени, косноязычие продолжателя:
SAS2014
удалять таблицу
5 окт 18, 15:59    [21696545]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5149
-2-
Может быть получится создать партиционную таблицу, сделать exchange и дроп партиции.
Ну да, 12.2 вроде позволяет ковертировать в секционированную
alter table ... modify partition by ... online
Так что, наверное, можно подропать секции и даже транкейт не пригодится.
5 окт 18, 16:13    [21696561]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9237
dbms_photoshop
Так что, наверное, можно подропать секции и даже транкейт не пригодится.


Последнюю сигарету не стреляют

SQL> select partition_name from user_tab_partitions where table_name = 'LIST_PART_TAB';

PARTITION_NAME
---------------------------------------------------------------------------------------
PART_AA

SQL> alter table list_part_tab drop partition part_aa;
alter table list_part_tab drop partition part_aa
                                         *
ERROR at line 1:
ORA-14083: cannot drop the only partition of a partitioned table


SQL> 


SY.
5 окт 18, 16:29    [21696587]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
SAS2014
Member

Откуда: Сталинград
Сообщений: 2658
столько слов столько много, а толку нет
и ни один из типа "экспертов" так и не написал команду, которую я просил.

А просил я просто, мне надо запретить определенному пользователю удалять таблицы

пробовал не работает
revoke drop any table from test
8 окт 18, 09:51    [21697728]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
SAS2014
Member

Откуда: Сталинград
Сообщений: 2658
причем любые таблицы
8 окт 18, 09:51    [21697730]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
-2-
Member

Откуда:
Сообщений: 14115
SAS2014
столько слов столько много, а толку нет
и ни один из типа "экспертов" так и не написал команду, которую я просил.

А просил я просто, мне надо запретить определенному пользователю удалять таблицы
Чтобы дать команду кому-то, важны не конкретные слова, а командный голос.
8 окт 18, 10:05    [21697742]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5923
SAS2014
и ни один из типа "экспертов" так и не написал команду, которую я просил.

Берёшь доку и внимательно читаешь про права владельца схемы.

Решение тебе уже дали - синонимов вполне хватит. Но, т.к. думать ты не желаешь, и продолжаешь ждать чуда в виде волшебной заплатки для кривой архитектуры, то окромя стёба дать тебе практически нечего.
Вариант с системным триггером, защищающим от кривых рук разработчика, тоже уже предложили.
8 окт 18, 11:01    [21697799]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9237
SAS2014
причем любые таблицы


Чужие таблицы удалить можно только имея DROP ANY TABLE (хаки не обсуждаем). Свою таблицу мoжно грохнуть всегда. Поэтому таблицы которые юзер не должен грохать должны быть чужими таблицами. Можно конечно создать триггер (при уcловии юзер не имеет ADMINISTER DATABASE TRIGGER) или, например, создать дочернюю таблицу в другой схеме если таблицы которые юзер не должен грохать имеют PK/UK но все это плохая архитектура.

SY.
8 окт 18, 16:30    [21698345]     Ответить | Цитировать Сообщить модератору
 Re: Запрет на удаление  [new]
SAS2014
Member

Откуда: Сталинград
Сообщений: 2658
SY
SAS2014
причем любые таблицы


Чужие таблицы удалить можно только имея DROP ANY TABLE (хаки не обсуждаем). Свою таблицу мoжно грохнуть всегда. Поэтому таблицы которые юзер не должен грохать должны быть чужими таблицами. Можно конечно создать триггер (при уcловии юзер не имеет ADMINISTER DATABASE TRIGGER) или, например, создать дочернюю таблицу в другой схеме если таблицы которые юзер не должен грохать имеют PK/UK но все это плохая архитектура.

SY.


значит как бы не замарачиватся то в своей схеме юзер может удалить все и запретить ему нельзя, кроме как писать pl\sql код
9 окт 18, 01:10    [21698794]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Oracle Ответить