|
dbms_session, привелегии
|
|||
---|---|---|---|
#18+
Проблема в следующем. Не дает выполнить dbms_session.set_context, нет привелегий. Смотрим RTFM: авторThis package runs with the privileges of the calling user, rather than the package owner SYS. Ладно идем по ссылке на ошибку (строка 78), открываем сам пакет, а он /*wraped*/. Подскажите пожалуйста какие привелегии необходимы....(поделитесь рыбой) Если кто знает методу, как вообще вычислять наличие нужных привелегий в подобных ситуациях........ (поделитесь удочкой). Там же в пакете много всего интересного........... set role, например. Oracle version: 9.2.0.4 Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2004, 07:53 |
|
dbms_session, привелегии
|
|||
---|---|---|---|
#18+
тот же авторThis procedure must be invoked directly or indirectly by the trusted package ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2004, 08:01 |
|
dbms_session, привелегии
|
|||
---|---|---|---|
#18+
Спасибо. Не обратил внимания на фразу. Я вызов обернул в авнономную процедуру. Выходит по разному механизм Оракла работает с пакетными и автономными процедурами. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2004, 08:14 |
|
dbms_session, привелегии
|
|||
---|---|---|---|
#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. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2004, 08:17 |
|
dbms_session, привелегии
|
|||
---|---|---|---|
#18+
Спасибо за детальный пример. Нашел в своих мозгах еще одну проблему/ошибку. Я почему то полагал, что в спецификации пакета обязательно нужно указывать переменную пакета с таким же именем (ниже в коде покажу), из Вашего примера следует, что это не так. Можете объяснить физический смысл размещения переменных контекста в памяти сервера. Например я полагаю, что после инициализации пекета, инициализируется его контекст (в смысле его переменные, константы). Как только мы устанавливаем какую либо переменную через set_context, Оракл дополнительно в области памяти этого пакета размещает еще переменную и доступ к этой переменной по записи осуществляется из этого же пакета (доверенного). По чтению эта переменная становится доступной, глобально, через sys_context(). Я не в чем не заблуждаюсь? Вот код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2004, 08:46 |
|
dbms_session, привелегии
|
|||
---|---|---|---|
#18+
context и переменные пакета - две большие разницы, точнее они полностью независимы. Например любой, имеющий доступ к пакету, может изменить значение глобальных переменных этого пакета (да и вообще сбросить состояние всех пакетов вызыванных в сессии - см. DBMS_SESSION.RESET_PACKAGE), в контексте - только тот, у кого есть доступ к доверенному пакету Вообще, как я понимаю, CONTEXT был придуман из соображений безопасности (заполнять его в тригере on logon и использовать в предикатах запросов - предверие FGA) Кроме того "переменные контекста" можно использовать и в SQL, в отличие от переменных пакета (только в PL/SQL), и вызов функции SYS_CONTEXT не считается вызовом функции, а обрабатывается SQL-машиной, что намного эффективней И размещаются они не в памяти пакета (которую можно всегда освободить - см.выше), а, видимо, в SGA ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2004, 09:08 |
|
|
start [/forum/topic.php?fid=52&tid=1880231]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 526ms |
0 / 0 |