|
вызов процедуры от имени другого пользователя
|
|||
---|---|---|---|
#18+
Добрый день! Подскажите, пожалуйста, как вызвать выполнение процедуры от имени другого пользователя в postgresql? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 13:28 |
|
вызов процедуры от имени другого пользователя
|
|||
---|---|---|---|
#18+
BigBudda, security definer? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 13:36 |
|
вызов процедуры от имени другого пользователя
|
|||
---|---|---|---|
#18+
Melkij,спасибо! То, что нужно. Однако у меня как всегда возникли вопросы. Оно работает. Но гораздо медленнее, чем выполнение процедуры/функции от её владельца. Тренируюсь исключительно на кошках, в тестовой БД. Под пользователем postgres создал схему nsi (справочник), в ней таблицу nsi_dictionary и функцию по вставке данных в эту таблицу. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Добавил нового пользователя в БД: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Выполнил и увидел, что под владельцем выполнилось быстрее, чем под сторонним пользователем. Сперва выполнял под владельцем. Начал тестировать с explain (analyze,buffers) select nsi.add_data_nsi('sql.ru'); Код: plsql 1. 2. 3. 4. 5.
и под владельцем и под сторонним пользователем примерно одинаково. Вопросы: 1. Может ли использование SECURITY DEFINER привести к дополнительным накладным расходам и тормозить при массовых операциях? Те ситуации, когда справочник обновляется слишком часто. 2. Какой cost выставить для обновления справочника? Например, в справочнике 10000 записей. Планируется что в среднем в месяц будет его прирост на 50% максимум. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 15:38 |
|
вызов процедуры от имени другого пользователя
|
|||
---|---|---|---|
#18+
BigBudda, * На скорость работы SECURITY DEFINER или INVOKER может влиять только косвенно. Например это может влиять на то, с какими объектами работает функция. Но не в этом примере, здесь схема у таблицы указана явно, что исключает разные толкования. * На cost для такой функции можно забить. * Почитайте про права по умолчанию на выполнение функций. Если коротко, то по умолчанию все пользователи могут выполнять любую созданную функцию. Поэтому сначала нужно сделать revoke execute from public и только потом grant execute кому надо. Для SECURITY DEFINER это очень актуально. * Параметрам функции можно давать имена f(nsi_value text), тогда не нужно использовать alias. * insert умеет возвращать значение (insert .. returning), можно обойтись без right_now * в этой функции можно легко без plpgsql обойтись: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 16:43 |
|
|
start [/forum/topic.php?fid=53&msg=39759884&tid=1995405]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 395ms |
0 / 0 |