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

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
26.01.2008, 13:28
|
|||
|---|---|---|---|
create user - from plpgsql function |
|||
|
#18+
вот такую настрочил функцию: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. хочу сделать механизм разграничения прав доступа. думал сделать свою таблицу юзеров, доступов и т.п. и при этом хотел, чтобы при вставке в мою таблицу юзеров создавался и в постгресе этот юзер. и потом при раздаче доступов чтобы делалось хранимками grant/revoke по объектам бд - там, где это нужно. всё это дело затевается для того, чтобы упростить потом это всё для конечного пользователя и главное из-за того, что не все доступы будут постгресом разруливаться. будут свои ещё - там по бизнеслогике всякие извращения. ну и вобщем тут странно как-то себя ведёт вот эта строка кода: perform 'create user ' || p_usr || ' with password ''' || p_psw || ''''; постгрес на неё не ругается - однако и юзера не создаёт :(. ну и ещё у меня 2 такие функции есть для изменения и удаления юзеров. и с ними картина та же - и не ругается и не делает ничего полезного :(. теряюсь в догадках что бы это значило... подскажите плз в чём тут прикол. ну и ещё интересно заслушать мнения спецов кто такое что-то делал - правильным ли я путём изобретаю свой велосипед :). тут вот не считая этих глюков ещё слабое место имеется: при манипуляциях с юзерами в обход моих этих вот инструментов проблемы будут. но я не знаю как их избежать... мне кажется это не возможным... может кто подскажет как это всё красивее можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.01.2008, 13:55
|
|||
|---|---|---|---|
|
|||
create user - from plpgsql function |
|||
|
#18+
Вот рабочий триггер, комментировать шас времени нет. Но, думаю, многое по именам понятно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.01.2008, 14:41
|
|||
|---|---|---|---|
create user - from plpgsql function |
|||
|
#18+
спасибо за пример. его ещё перевариваю. но в своих функциях заменил perform на execute - и всё заработало :). не знаю почему не работало... мне кажется должно было... а в чём принципиальная разница триггером или хранимкой это делать - при учёте что доступов к таблицам ниукого не будет вообсче - кроме postgresа-суперюзера? ну вроде как теоретически правильнее триггером - но у меня вроде это без разницы при данном раскладе. лениво код этот разносить на триггеры/хранимки :). да и удобнее с этим всем мне будет работать если в одном месте всё - меньше вероятность ошибок, лучше читабельность/понимабельность и т.п. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.01.2008, 22:40
|
|||
|---|---|---|---|
create user - from plpgsql function |
|||
|
#18+
aovспасибо за пример. его ещё перевариваю. но в своих функциях заменил perform на execute - и всё заработало :). не знаю почему не работало... мне кажется должно было... не должно было, PERFORM это эквивалент конструкции SELECT (причём именно SELECT, а не CREATE !) только вместо слова SELECT - пишется PERFORM соответственно то что Вы написали у себя с PERFORM эквивалентно такому запросу (ес-сно с подстановкой соответствующих p_usr и p_psw): Код: plaintext 1. 2. 3. 4. запрос должен был быть написан статически в коде функции, типа: perform 1+1*field1; а так как в данном случае это невозможно (логин/пароль являются изменяемым параметром да и вместо select нужно create) то Вам надо было использовать execute ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=53&tablet=1&tid=2004688]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 426ms |

| 0 / 0 |
