|
|
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
В ASA 9.0.1 убрали префикс для временных таблиц. Как теперь быть с правами доступа? Раньше у нас было так. Временная таблица, заведенная пользователем Z заполнялась в функции Y.f(), заведенной группой Y, потом данные из временной таблицы использовались вне функции Y.f(). Z говорил: declare local temporary table Y.#tbl(...), потом вызывал функцию Y.f() и никаких проблем не возникало. Теперь не работает. При вызове Y.f() ASA говорит что нет прав доступа на таблицу #tbl, которая по-видимому интерпретируется как Z.#tbl. grant для временной таблицы не работает. Что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 01:24 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
Прочитал в BOL по изменениям 9.01: BOL Owner name cannot be specified in DECLARE LOCAL TEMPORARY TABLE statements In previous versions of the software, if an owner name was specified in DECLARE LOCAL TEMPORARY TABLE and the owner was not the same as the current user, it was possible to create more than one temporary table with the same name. A syntax error now occurs if an owner name is specified. Так что по идее просто нужно обращаться ко времянкам без указания владельца и естественно без всяких грантов (все же сессионная таблица). Если же так не работает, то нужно скачать последний EBF, если стоит последний, то значит баг и его нужно им выложить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 01:53 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
Версия: ASA 9.0.1 1862. Дело в том, что все как раз работает согласно документации. Вопрос только как обратиться к временной таблице от имени другого пользователя и при этом не получить ошибку доступа. Раньше можно было просто создать временную таблицу с "owner name" того пользователя, который будет обращаться, а теперь как? Пока решили создавать вызывающую функцию от имени пользователя, который создает временную таблицу. В этом случае с правами все нормально. Хорошо этот пользователь пока один, а если их станет несколько, то на каждого прийдется создавать функцию и эти функции будут одинаковые за исключением "owner name". Это не хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 04:07 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
c127Вопрос только как обратиться к временной таблице от имени другого пользователя и при этом не получить ошибку доступа. Пардон, но временные таблицы доступны только в пределах той сессии, где они были созданы. А если тот другой юзер создаст 10 сессий к БД? Для какой из сессии Вы планируете создать врем. таблицу? На мой взгляд изначально не правильный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 10:32 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
Смоделировал я Вашу ситуацию. В общем дело обстоит так: локальные временные таблицы видны всем группам создавающего их юзера. Т.е. например у меня есть группа DBA и в ней пользователь Test. Соотвествующе если создавать времянку из под пользователя Test, то ее будут видеть ХП, владельцем которых является DBA. Однако если наоборот, времянки создаются в ХП, owner у которых DBA, то процедуры пользователя Test не смогут получить к ним доступа. Отсюда мораль такова - временные таблицы должен делать сам пользователь, е не его группы. А что это - баг или фича: надо думать. IMHO отсюда кстати еще плавно одна мораль вытекает - если у всех обьектов БД один владелец, то и отсутствует лишний геммор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 10:46 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
А global temporary table не подойдет? Хотя не знаю, мы их не юзаем. Вообще-то логика на мой взгляд не очень верна (по крайней мере с точки зрения TSQL), временная таблица все-таки индивидуальная штука. Создается на коннект, а не для пользователя или тем более группы. Для таких целей лучше использовать постоянные таблицы с дополнительной колонкой "USER", или что-нибудь в этом роде. Так рекомендовлось делать в ранних версиях Oracle (до 8-ки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 12:36 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
michael_А global temporary table не подойдет? Хотя не знаю, мы их не юзаем. Нет, конечно не подойдут. Они отличаются от локальных временных таблиц только тем, что их достаточно определить один раз. Можно считать, что глобальная временная таблица имеет в себе невидимую колонку - ID транзакции. Если мы открываем транзакцию, пишем что-то в глобальную таблицу, все добавленые строки будет содержать в себе этот ID. Ближайший COMMIT/ROLLBACK автоматически убъет все данные добавленые в данной транзакции в глобальную временную таблицу. Ни какой другой пользователь или другая сессия к этим данным не сможет добраться. Лично я использую глобальные временные таблицы как место передачи параметров в ХП. Например у нас есть несколько ХП которые должны обрабатывать пачку накладных. Сколько и каких конкретно - решит пользователь. Клиентская программа выдает на экран список накладных, юзер ставит галочки напротив нужных тыкает кнопку "Делай". Клиентская программа открывает транзакцию, записывает в глобальную временную таблицу ID выбранных накладных и запускает нужные ХП. ХП создает локальную временную таблицу и заполняет ее на основе ID прочитаных из глобальной. Последняя команда ХП: "select * from #rep;" Клиентская программа получает этот резалтсет и делает rollback. Глобальная таблица автоматически очищается, локальные таблицы убиваются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 17:57 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы, будем бороться. Поясняю. Имеет место OLTP система, все ходят через одного пользователя, поэтому сессий много. Локальная временная таблица создается внутри сессии, заполняется процедурой, потом используется в относительно сложном запросе. Это все вместо отсутсвующего на сегодняшний день full text search. Таблица хранит id слов, введенных пользователем, а процедура сопоставляет словам их id согласно словаря и заполняет таблицу. Запрос получается статический. Все это конечно в пределах одной сессии. Поскольку сессий у пользователя много, локальных временных таблиц тоже много, но они для этого и были придуманы, чтоб эффективно хранить и обрабатывать временные данные, так что в этом смысле вроде бы все правильно. Временные таблицы создаются-убиваются хорошо, даже не прописываются в основные служебные таблицы. Слова поступают в процедуру по одному, т.е. процедура вызывается много раз, поэтому воспользоваться советом White Owl, к сожалению не получится: если создать таблицу в процедуре то при выходе она убъется. Можно использовать обычную таблицу и id сессии, он у нас есть. Но тогда изменения будут писаться в лог, это ни к чему, мне казалось что с временными таблицами будет быстрее. Плюс запросы получаются проще. 2 ASCRUS Поскольку система OLTP, то строилась с постоянной мыслью о безопасности, хоть сервер и спрятан глубоко внутри системы. Поэтому групп пользователей несколько, по одной на каждый класс допустимых действий в базе: одна для веб сервера с middle tier, одна для нашего файл сервера. Права этих пользователей ограничены, каждый имеет доступ только к своим объектам БД (точнее только своей группы), функциональность которых тоже ограничена соответсвенно. Пусть теперь о безопасности болит голова у сервера. По-моему это проще чем запоминать в базе кому на какую функцию или представление выдать права, по крайней так мере привычнее для меня. Группы были введена чтоб потом не морочить себе голову с доступами отдельного пользователя - добавил пользователя в группу и все. Пока что пользователь в веб серверной группе один, скорее всего так и останется, так что наше временное решение будет нормально работать и в будущем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 01:39 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
c127 Слова поступают в процедуру по одному, т.е. процедура вызывается много раз, поэтому воспользоваться советом White Owl, к сожалению не получится: если создать таблицу в процедуре то при выходе она убъется. Не совсем так. Локальная таблица созданная в процедуре при выходе убивается не до конца. Если последняя команды процедуры selec * from #local_temp_table; то эти данные можно получить снаружи процедуры. Так же, если создать локальную таблицу перед вызовом процедуры, но в той же сессии - процедура эту таблицу увидит. И сможет заполнить/изменить ее. А при вызове процедур друг из друга - получается одна длинная "сессия" и локальная временная таблица созданная в вызываемой процедуре, будет видны в вызывающей. Например такой код вполне работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 02:05 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
авторПоскольку система OLTP, то строилась с постоянной мыслью о безопасности, хоть сервер и спрятан глубоко внутри системы. Поэтому групп пользователей несколько, по одной на каждый класс допустимых действий в базе: одна для веб сервера с middle tier, одна для нашего файл сервера. Права этих пользователей ограничены, каждый имеет доступ только к своим объектам БД (точнее только своей группы), функциональность которых тоже ограничена соответсвенно. Пусть теперь о безопасности болит голова у сервера. По-моему это проще чем запоминать в базе кому на какую функцию или представление выдать права, по крайней так мере привычнее для меня. Все правильно, но владельцами обьектов то зачем всех делать ? Есть у меня DBA, все обьекты принадлежат ему. Есть у меня группы пользователей. В них расписаны гранты. Есть у меня юзеры, которые являются мемберами нужных групп по правам доступа и также мемберами группы DBA, чтобы видеть его обьекты (видеть - значит обращаться к ним без указания владельца, а не читать или менять в них данные, т.к. на DBA никаких грантов не выставленно, как для владельца обьектов). В итоге и защита по доступу нормальная и юзера не имею права менять и создавать свои обьекты. И кстати локальные временные таблицы нормально работают, без таких вот заморов: авторПока решили создавать вызывающую функцию от имени пользователя, который создает временную таблицу. В этом случае с правами все нормально. Хорошо этот пользователь пока один, а если их станет несколько, то на каждого прийдется создавать функцию и эти функции будут одинаковые за исключением "owner name". Это не хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 08:31 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
2 White Owl >Так же, если создать локальную таблицу перед вызовом процедуры, но в той же сессии - процедура эту таблицу увидит. И сможет заполнить/изменить ее. Так и делалось раньше, но теперь если владелец процедуры не совпадает с владелцем временной таблицы, а у нас всегда так и есть, таблица не заполняется. Первый и последний предложенный варианты не подходят, поскольку тогда парсить пришедшую фразу нужно на сервере, чтоб таблица не вышла за область видимости. Я этого делать не хочу во-первых потому что парсер уже есть в middle tier и все довольны, а во-вторых прасер на ватком скл писать как-то не улыбается. 2 ASCRUS >Все правильно, но владельцами обьектов то зачем всех делать ? Есть у меня DBA, все обьекты принадлежат ему. Есть у меня группы пользователей. В них расписаны гранты. Не всех, еще есть группы не являющиеся владельцами объектов. Если все принадлежит ДБА, то нужно где-то, скорее всего в базе, держать информацию о том какой группе какой доступ к какому объекту выделить, а при добавлении нового объекта нужно не забыть прописать о нем информацию в это хранилище. В нашем подходе группа связана с объектами очевидным образом - по префиксу, права выдаются/забираются всем сразу простым скриптом. К другим объектам БД у группы непосредственного доступа нет, вероятность ошибки минимальна. >И кстати локальные временные таблицы нормально работают, без таких вот заморов: Когда начинали строить БД на ASA 8 и даже перешли на 9.0.0 таких проблем не было. Теперь это проблема. Кто ж знал. Но все равно по-моему проблема не очень большая. Пока мне кажется что наше решение проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2004, 03:19 |
|
||
|
ASA 9.0.1 и временные таблицы
|
|||
|---|---|---|---|
|
#18+
c127 Так и делалось раньше, но теперь если владелец процедуры не совпадает с владелцем временной таблицы, а у нас всегда так и есть, таблица не заполняется. Если честно, я вот этого "владелец временной таблицы" не понимаю. Какой может быть владелец у локальной таблицы, которая по определению живет только во время текущей сессии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2004, 19:52 |
|
||
|
|

start [/forum/search_topic.php?author=ATI&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 445ms |
| total: | 709ms |

| 0 / 0 |

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