|
|
|
DBMS_SQL и права пользователей
|
|||
|---|---|---|---|
|
#18+
Привет друзья, если вы меня узнали, значит я - Олег Филимонов )))) Вопрос такой - Есть package, который юзает исключительно DBMS_SQL при редактировании таблиц Т1, Т2, Т3 Пользоваетель имеет права на execute package-а и только SELECT на Т1, Т2, Т3. При работе с package-ом пользователь прорывается сквозь отсутсвие грантов на UPDATE, DELETE, INSERT. AUTHID CURRENT_USER в package-е никакого эфеекта не дает. замена DBMS_SQL на execute immediate проблему снимает (с аудитом конечно) Помогите понять, в чем заключается проблема. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2003, 14:47 |
|
||
|
DBMS_SQL и права пользователей
|
|||
|---|---|---|---|
|
#18+
Динимаческий сикуэл работает с правами владельца схемы, в котором расположен пакет. У него скорее всего и есть гранты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2003, 15:59 |
|
||
|
DBMS_SQL и права пользователей
|
|||
|---|---|---|---|
|
#18+
2 raven13: According to gminter (AKA Олег Филимонов), package is created with AUTHID CURRENT_USER, which means it is executed on caller's, not package owner's behalf. Based on that I can assume user HAS update, delete and insert, but most likely via role. Why? We all are used to the fact "role based privileges are disabled in stored procedures". However it is not entirely true. It changed since Oracle introduced AUTHID CURRENT_USER. In that case role based privileges or a caller are NOT IGNORED: Код: 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. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. As you can see, user scott calling func1 which has AUTHID DEFINER can not select form U1.TBL1 since user scott has SELECT on U1.TBL1 via role R1. However user scott calling func2 which has AUTHID CURRENT_USER can select form U1.TBL1 even though select is granted via role R1. SY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2003, 18:10 |
|
||
|
DBMS_SQL и права пользователей
|
|||
|---|---|---|---|
|
#18+
2 SY Спасибо (вы исходите из того что system имеет грант на все объекты схемы, это так но только не в динамическом сикуэл где гранты надо раздавать непосредственно), и вот следующий пример. 1) CREATE TABLE css.tst1 (id NUMBER) -- Grants for Table GRANT SELECT ON css.tst1 TO dr / GRANT SELECT ON css.tst1 TO gs 2) CREATE OR REPLACE FUNCTION gs.func1 return varchar2 is v_x varchar2(100); begin execute immediate 'select id from css.tst1' into v_x; return v_x; end; / -- Grants for Function GRANT EXECUTE ON gs.func1 TO dr 3) CREATE OR REPLACE FUNCTION gs.func2 return varchar2 authid current_user is v_x varchar2(100); begin execute immediate 'select id from css.tst1' into v_x; return v_x; end; / -- Grants for Function GRANT EXECUTE ON gs.func2 TO dr / 4) BEGIN dbms_output.put_line(func1); END; this is the css.tst1 table 5) BEGIN dbms_output.put_line(func2); END; this is the css.tst1 table Очевидно, что если выполнить оператор в п. 1 revoke SELECT ON css.tst1 TO gs то при выполнении 4) оператора вылезет table or view does not exists Кстати, все вышеописанное только что проделал (уж извините ваш пример не брал - system засорять не охота). PS Я конечено понимаю некоторые тут на сертификацию уже сдали, на английском как на родном, мы люди сирые умных слов не знаем :-) 2 gminter Не возможно ли такое, что гранты кто-то дал, лучше явно их уберите на нужные объекты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2003, 19:07 |
|
||
|
DBMS_SQL и права пользователей
|
|||
|---|---|---|---|
|
#18+
2 raven13: I do not see roles in your example!!! All privileges in your example are granted directly. All I was saying is: User X is granted execute on a stored procedure (function, package) with AUTHID CURRENT_USER. (another words it does not matter who owns strored procedure, since it is always executed not on owner's behalf but rather on caller's behalf. So it is irrelevant that in my example function is owned by system). Stored procedure (function, package) references object O owned by user Y (Y.O). User X has privilege on Y.O granted VIA ROLE and it WILL WORK. This is very different from what we used to, where role based privileges are ignored. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2003, 20:48 |
|
||
|
DBMS_SQL и права пользователей
|
|||
|---|---|---|---|
|
#18+
>это так но только не в динамическом сикуэл где гранты надо раздавать непосредственно Not true. Again, if dynamic SQL is executed from a stored procedure with AUTHID CURRENT_USER, role based privileges WILL WORK. And that is shown in my example. Sorry if function owned by SYSTEM in my example mislead you. You can create it under any other user. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2003, 20:56 |
|
||
|
DBMS_SQL и права пользователей
|
|||
|---|---|---|---|
|
#18+
Всем спасибо - я снова поверил в Oracle и ... убил админа, который через роль - а их с дюжину, дал update, delete, insert на эти злостчастные таблицы ВСЕМ пользователям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2003, 22:07 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=2777&tid=1990519]: |
0ms |
get settings: |
11ms |
get forum list: |
24ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 445ms |

| 0 / 0 |
