Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 проверить права до выполнения процедуры  [new]
cococo
Guest
идиотская ситуация, не знаю как порешать.
на тестовом сервере имеется несколько баз, одна наша, где я db_owner,
в других имеются права на чтение нужных таблиц.
периодически загружаются данные с продакшена в чужие таблицы,
а наши таблицы заполняют наши же процедуры, drop table + select into.
и вот хотя бы раз в месяц происходит такая фигня:
запускается процедура, чето-то там копируется, вдруг через час вылетает,
потому что, например, делается update таблицы, для которой отработал drop,
а select into не прошел, т.к. на одну из таблиц в соединении нету прав!
они там при переносе данных в чужие базы постоянно теряют наши права.

в процедурах ничего не делается в 1 транзакции, потому что роллбэки не нужны,
пишется лог и если что-то прошло неправильно, все перезапускается.
а вот зато когда вылетает вот так на середине процедуры,
получается бурда из половины таблиц на 1 дату, половины на другую
+ 1 таблицы просто нет.
все останавливается до выдачи потерянных прав.

можно ли как-то проверять права на все имеющиеся в процедуре таблицы, еще до запуска,
чтоб просто не выполнять ничего, если права хоть на что-то "потеряли"?
21 мар 12, 16:25    [12289504]     Ответить | Цитировать Сообщить модератору
 Re: проверить права до выполнения процедуры  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Вот что бы не было
cococo
а вот зато когда вылетает вот так на середине процедуры,
получается бурда из половины таблиц на 1 дату, половины на другую
+ 1 таблицы просто нет.
и используют транзакции.

Проверка прав на объекты перед выполнением процедуры не гарантирует их наличие во время выполнения.
21 мар 12, 16:36    [12289602]     Ответить | Цитировать Сообщить модератору
 Re: проверить права до выполнения процедуры  [new]
овнофанты
Guest
cococo
они там при переносе данных в чужие базы постоянно теряют наши права

наверно потому что такие же фанаты дроп-креэйт?
21 мар 12, 16:46    [12289703]     Ответить | Цитировать Сообщить модератору
 Re: проверить права до выполнения процедуры  [new]
cococo
Guest
а если процедура выполняется час.
все равно ее можно всю в 1 транзакцию запихать?
транзакция длиной в час, это такое бывает?
22 мар 12, 16:26    [12296527]     Ответить | Цитировать Сообщить модератору
 Re: проверить права до выполнения процедуры  [new]
iljy
Member

Откуда:
Сообщений: 8711
cococo
а если процедура выполняется час.
все равно ее можно всю в 1 транзакцию запихать?
транзакция длиной в час, это такое бывает?

И что? Нет, давайте будем невалидные данные клиенту выдавать. А если он в середине выполнения вашей процедуры данные запросит, тогда что будет? И вообще/, проблема не в продолжительности транзакций, а в блокировках и использовании журнала. Надо просто нормальные механизмы заливки данных использовать, например - сначала заливаете в одной (или нескольких, чтоб сразу все не откатывать если что) транзакции все новые данные в отдельные постоянные таблицы (умеючи такие операции с минимальным логгированием идут) , а потом в другой делаете SWITCH в нужные. В этом случае рабочие таблицы блокируются только на время изменения метаданных, а это миллисекунды.
22 мар 12, 16:43    [12296682]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить