|
|
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Суть проблемы. ASA 9.0.2.3581 Есть хранимая процедура, скажем dba.OuterProc. Процедура возвращает result set. Это процедура внутри использует выборку из другой процедуры, скажем ns.InnerProc. Есть пользователь user1. У него есть права на выполнение dba.OuterProc, но нет прав на ns.InnerProc. Так вот, если user1 вызывает процедуру через Код: plaintext Но если вызвать Код: plaintext Что за бред? Это так и должно быть? Навскидку в доке не нашёл упоминания о подобных различиях в трактовке прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2010, 17:21 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
В SA11 тоже самое. Я тоже не вижу никаких упоминаний в BOL про это... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2010, 17:37 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Конкретное место не вспомню, но вычитал в доках, что хитрый оптимизатор простые процедуры состоящие из банального "select .. from .." в запросах заменяет как раз на эти самые запросы...). Т.е. еще на этапе разбора. Так что не удивительно, что ядро потом лезет проверять пермишены. Можно вставить dummy-операции в тело процедуры, чтобы отвадить оптимизатор делать такую подмену. Либо пересмотреть сам подход использования процедур в качестве источников в запросах, заменяя такие конструкции самостоятельными процедурами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2010, 22:37 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун, Во люди пошли. 1 раз сервер обманули и интересутся, почему 2й раз не выходит ))))) Да потому что он дурак. Был бы умным, и 1й раз бы дулю скрутил. Переписывайте правильно. Такие "логические бомбы" могут потом вылезти и при смене версии или даже патча. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 00:11 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
SiemarglВо люди пошли. 1 раз сервер обманули и интересутся, почему 2й раз не выходит ))))) Да потому что он дурак. Был бы умным, и 1й раз бы дулю скрутил. Переписывайте правильно. Такие "логические бомбы" могут потом вылезти и при смене версии или даже патча.Чего-чего? С каких это пор официальный синтаксис стал считаться логической бомбой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 00:15 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
SiemarglВо люди пошли. 1 раз сервер обманули и интересутся, почему 2й раз не выходит ))))) Да потому что он дурак. Был бы умным, и 1й раз бы дулю скрутил. Переписывайте правильно. Такие "логические бомбы" могут потом вылезти и при смене версии или даже патча. Вот как раз по-правильному было бы, если бы и во второй раз пропускал бы. Т.к. извращения оптимизатора не должны влиять на саму суть. А суть такова, если у пользователя есть права на выполнение конкретной процедуры, то вне зависимости от того что она делает, больше никаких прав для ее выполнения требоваться не должно. Во вском случае идеология АСА такова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 01:13 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Вообще идеология защиты - если запрещено одно из вложенных действий - невозможно все. А получается, что вы, имея право войти в зал банка, хотите автоматически получить доступ к банковскому сейфу =) Поменяют оптимизатор - на вложенные проверки для всех случаев и все "сломается". 2 Iller - обычно наследуются запрещения, а не разрешения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 10:23 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
2 Siemargl Вы можете зайти в зал банка и получить деньги через кассу, но к напрямую сейфу у вас доступа нет. Извините за офф ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 11:16 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
А разве не должны проверятся права на InnerProc от хозяина OuterProc?Вроде раньше именно так было(если внутри идёт выборка из таблицы,то давали право select хозяину процедуры,а не пользователю от которого была вызвана процедура) А теперь у меня схожий вопрос только уже по представлениям: есть представление dba.innerview(выборка из таблицы dba.table1); есть представление u.outerview,которое выбирает из представления dba.innerview(но права такого пользователю u не было дано,равно как и на таблицу dba.table1); есть пользователь user1 у которого есть право на u.outerview,но нет на dba.innerview(и нет на таблицу dba.table1) Пользователь user1 легко делает select*from u.outerview,да и не важно что будет написано в этом представлении(можно из dba.table1)-все запросы проходят на ура,лишь бы было право на select из этого представления.Это так и должно быть? Правда у меня до сих пор 11.0.1.2250 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 11:49 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
SiemarglАлександр Гoлдун, Во люди пошли. 1 раз сервер обманули и интересутся, почему 2й раз не выходит ))))) Да потому что он дурак. Был бы умным, и 1й раз бы дулю скрутил. Переписывайте правильно. Такие "логические бомбы" могут потом вылезти и при смене версии или даже патча. Уважаемый! Вы бредите. Либо не поняли смысл моего поста. Моё использование процедур и защиты абсолютно корректное. Это нормальная практика - ограничить права на выполнение каких-либо действий таким способом, чтобы пользователь мог их сделать только при помощи процедуры. И в ASA это задекларировано в документации - процедуры выполняются с правами владельца Для пользователя процедура - черный ящик в плане прав. Тоже самое относится к VIEW, но с оговорками: если есть права непосредственно на VIEW, то права на упоминаемые внутри таблицы необязательны. Если же прав на VIEW нет, то проверяются права как при обычном запросе. Следуя вашей логике, не было бы возможности, скажем, запретить непосредственное удаление из таблицы, но разрешить это делать из процедуры. Описанный мною баг - это однозначно баг до тех пор, пока не доказано иное, а именно не указано, где в документации описано подобное поведение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 14:37 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
escapistА разве не должны проверятся права на InnerProc от хозяина OuterProc? Именно так и должно быть! И так оно происходит, если не селектить из процедур. А вот при выборке из процедур этот механизм не срабатывает, что явно является ошибкой ASA. Вроде раньше именно так было(если внутри идёт выборка из таблицы,то давали право select хозяину процедуры,а не пользователю от которого была вызвана процедура) escapist А теперь у меня схожий вопрос только уже по представлениям: есть представление dba.innerview(выборка из таблицы dba.table1); есть представление u.outerview,которое выбирает из представления dba.innerview(но права такого пользователю u не было дано,равно как и на таблицу dba.table1); есть пользователь user1 у которого есть право на u.outerview,но нет на dba.innerview(и нет на таблицу dba.table1) Пользователь user1 легко делает select*from u.outerview,да и не важно что будет написано в этом представлении(можно из dba.table1)-все запросы проходят на ура,лишь бы было право на select из этого представления.Это так и должно быть? Да, именно так и должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 14:40 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун Уважаемый! Вы бредите. Либо не поняли смысл моего поста. Угу. Брежу. Поскольку не понял из первого поста сразу, что Вы тоже хотите получить два отказа в доступе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 14:57 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
SiemarglВообще идеология защиты - если запрещено одно из вложенных действий - невозможно все. ... 2 Iller - обычно наследуются запрещения, а не разрешения. Вы документацию по ASA читали? Мы обсуждаем тут не "вообще идеологию" и не "обычно наследуются" , а вполне четко задокументированную идеологию, которая на моей памяти благополучно и успешно работала и использовалась со времен SQL Anywhere 5.0, ибо весьма логична и удобна. И мне нужно именно такое использование защиты, и я рассчитывал, что это будет работать корректно, как всегда и как описано в доке. iLLer Можно вставить dummy-операции в тело процедуры, чтобы отвадить оптимизатор делать такую подмену. Спасибо за идею. Помогло. Только сделал не dummy-операцию, а использовал временную таблицу во внешней процедуре: в нее загонялся результат внутренней и уже из нее селектилось. Лишнее доказательство того, что это действительно баг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 14:58 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
SiemarglАлександр Гoлдун Уважаемый! Вы бредите. Либо не поняли смысл моего поста. Угу. Брежу. Поскольку не понял из первого поста сразу, что Вы тоже хотите получить два отказа в доступе) Нет, я хотел корректный вызов внешней процедуры в любых вариантах одинаково БЕЗ отказов в доступе. Именно так, как оно и должно быть. Если вы не знакомы с ASA, то вот ссылки для ознакомления, непосредственно по обсуждаемой теме: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.sqlanywhere.11.0.1/dbadmin_en11/uvproc.html http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.sqlanywhere.11.0.1/dbadmin_en11/perexp.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 15:27 |
|
||
|
Bug ASA 9 - некорректная отработка прав хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Александр ГoлдунСпасибо за идею. Помогло. Только сделал не dummy-операцию, а использовал временную таблицу во внешней процедуре: в нее загонялся результат внутренней и уже из нее селектилось. Лишнее доказательство того, что это действительно баг. Вот , что касаемо переписи запроса оптимизатором. В 9-ке видимо такое тоже было, только в доках об этом молчок. Видимо процедура состояла только из одного запроса, потому оптимизатор и надругался над ней. Это конечно баг, но он тесно связан с этой фичей; багофича или фичебаг.))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2010, 15:45 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=36544842&tid=2010694]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
70ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 406ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...