|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Добрый день, всем, Есть пользователь у которого есть права на вызов хранимых процедур. Код: sql 1.
В процедуре делается select по таблицам, например tbTest. Можно ли дать права на select только хранимой процедуре, чтобы пользователь не мог явно вызвать select без вызова хранимой процедуры. Как этот GRANT будет выглядеть, если это возможно? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 15:35 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger Добрый день, всем, Есть пользователь у которого есть права на вызов хранимых процедур. Код: sql 1.
В процедуре делается select по таблицам, например tbTest. Можно ли дать права на select только хранимой процедуре, чтобы пользователь не мог явно вызвать select без вызова хранимой процедуры. Как этот GRANT будет выглядеть, если это возможно? На процедуру только GRANT EXECUTE ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 15:41 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Ролг Хупин, если только на процедуру, то при вызове процедуры ошибка, что нет прав на таблицу tbTest ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 15:50 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger, у вас владелец модуля и таблицы должен совпадать, в таком случае вам не нужно явное право select на таблицу. то есть: к примеру у вас владелец таблицы user1 тогда вы должны создать процедуру этим пользователем user1 и тогда (user1/db_owner/dbo) может дать права execute на процедуру user2 у которого нет явного права select на таблицу. user2 сможет выполнять процедуру и читать данные таблицы но только через созданную процедуру. вот вам выдержка из документации: Если модуль производит доступ к другому объекту базы данных, то выполнение завершится успешно при наличии разрешения EXECUTE на модуль и при выполнении одного из следующих условий. Модуль помечен как EXECUTE AS USER или SELF, и владелец модуля обладает соответствующими разрешениями на данный объект. Дополнительные сведения об олицетворении в модуле см. в разделе Предложение EXECUTE AS (Transact-SQL). Модуль помечен как EXECUTE AS CALLER, и есть соответствующие разрешения на данный объект. Модуль помечен как EXECUTE AS user_name, а user_name имеет соответствующие разрешения на объект. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 16:00 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger, Да можно, тема называется Ownership chains . Конкретно то, что вам требуется - описано в примере по ссылке. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 16:03 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
felix_ff Challenger, у вас владелец модуля и таблицы должен совпадать, в таком случае вам не нужно явное право select на таблицу. то есть: к примеру у вас владелец таблицы user1 тогда вы должны создать процедуру этим пользователем user1 и тогда (user1/db_owner/dbo) может дать права execute на процедуру user2 у которого нет явного права select на таблицу. user2 сможет выполнять процедуру и читать данные таблицы но только через созданную процедуру. вот вам выдержка из документации: Если модуль производит доступ к другому объекту базы данных, то выполнение завершится успешно при наличии разрешения EXECUTE на модуль и при выполнении одного из следующих условий. Модуль помечен как EXECUTE AS USER или SELF, и владелец модуля обладает соответствующими разрешениями на данный объект. Дополнительные сведения об олицетворении в модуле см. в разделе Предложение EXECUTE AS (Transact-SQL). Модуль помечен как EXECUTE AS CALLER, и есть соответствующие разрешения на данный объект. Модуль помечен как EXECUTE AS user_name, а user_name имеет соответствующие разрешения на объект. Владелец и процедуры и таблицы dbo, проверил, по видимому еще нюанс есть какой то, который я не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 16:13 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger, Таблица, поди, в другой базе или на другом сервере? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 16:13 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Критик, все на одном сервере ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 19:45 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger Критик, все на одном сервере Критик Challenger, Таблица, поди, в другой базе или на другом сервере? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 20:09 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
aleks222, в одной базе на одном сервере все. И хранимая процедура и таблица ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 20:26 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger в одной базе на одном сервере все. И хранимая процедура и таблица Либо обращение к таблице через динамику. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 20:59 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger по видимому еще нюанс есть какой то, который я не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 20:59 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
alexeyvg, да динамический запрос EXEC sp_EXECuteSQL @SQLSt... Как в этом случае решается? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 21:24 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger alexeyvg, да динамический запрос EXEC sp_EXECuteSQL @SQLSt... Как в этом случае решается? А в определении процедуры написать WITH EXECUTE AS OWNER ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 22:07 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
alexeyvg Challenger alexeyvg, да динамический запрос EXEC sp_EXECuteSQL @SQLSt... Как в этом случае решается? А в определении процедуры написать WITH EXECUTE AS OWNER ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 22:08 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
alexeyvg, только сейчас вернулся после отпуска, а проблема осталась. сделал так в определении procTest написал WITH EXECUTE AS OWNER При вызове процедуры теперь получаю сообщение Невозможно выполнить в качестве участника базы данных, поскольку участник "dbo" не существует, этот тип участника не может проходить олицетворение, или отсутствует разрешение. Как это можно решить? Что не так теперь? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 17:01 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger да динамический запрос EXEC sp_EXECuteSQL @SQLSt... Как в этом случае решается? 2. Создать юзера для этого сертификата 3. Дать этому юзеру разрешения на таблицы. 4. Подписать процедуру этим сертификатом. Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2022, 20:33 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
invm, а почему не работает как указали выше с добавлением директивы WITH EXECUTE AS OWNER Вы не подскажете? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 09:45 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger, динамический запрос не наследует смену контекста пользователя. Лучше вообще отказаться от использования динамических запросов, где это только возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 14:01 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Владислав Колосов динамический запрос не наследует смену контекста пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 16:04 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
Challenger invm, а почему не работает как указали выше с добавлением директивы WITH EXECUTE AS OWNER Не пользуйтесь без нужды WITH EXECUTE AS OWNER - это небезопасно. Безопасный способ я вам показал. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 16:07 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
invm Владислав Колосов динамический запрос не наследует смену контекста пользователя. Да, действительно. Легко же проверить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 18:52 |
|
SQL сервер процедуры права
|
|||
---|---|---|---|
#18+
invm, а почему не работает как указали выше с добавлением директивы WITH EXECUTE AS OWNERЛибо кривой владелец БД или процедуры, либо в процедуре есть обращения к внешним ресурсам, а у БД не включено trustworthy. Не пользуйтесь без нужды WITH EXECUTE AS OWNER - это небезопасно. Безопасный способ я вам показал.[/quot] Вот человек все точно расписал ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 11:28 |
|
|
start [/forum/topic.php?fid=46&fpage=4&tid=1683905]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 168ms |
0 / 0 |