powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно дать права юзеру на процедуру
13 сообщений из 13, страница 1 из 1
Как правильно дать права юзеру на процедуру
    #39694445
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юзер на сервере сейчас имеет права db_datareader на одну из баз.

В базе master создаю процедуру, которую ему необходимо иметь возможность выполнять (процедура возвращает результат SELECT-a):

Код: sql
1.
2.
3.
4.
5.
ALTER PROCEDURE [dbo].[MyProc]
WITH EXECUTE AS OWNER
AS
...
SELECT ...



В свойствах процедуры даю ему права на ее выполнение, однако при попытке ее запуска юзер получает:

The user does not have permission to perform this action.

Что сделано не так?
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694474
boltnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
ALTER PROCEDURE [dbo].[MyProc]
WITH EXECUTE AS OWNER
AS
...
SELECT ...
end

grant execute on MyProc to MyUser
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694482
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFЮзер на сервере сейчас имеет права db_datareader на одну из баз.

В базе master создаю процедуру, которую ему необходимо иметь возможность выполнять (процедура возвращает результат SELECT-a):

Код: sql
1.
2.
3.
4.
5.
ALTER PROCEDURE [dbo].[MyProc]
WITH EXECUTE AS OWNER
AS
...
SELECT ...



В свойствах процедуры даю ему права на ее выполнение, однако при попытке ее запуска юзер получает:

The user does not have permission to perform this action.

Что сделано не так?

Прямо таки ваш зверь есть в списке пользователей базы master?
Да вы, батенька, извращенец.
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694498
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boltnik
Код: sql
1.
grant execute on MyProc to MyUser



Ну это было выставлено в свойствах процедуры - я изначально писал об этом. Так что нужно еще что-то.
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694500
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Прямо таки ваш зверь есть в списке пользователей базы master?
Да вы, батенька, извращенец.

Давайте не будем обсуждать кто извращенец, а кто нет и зачем это нужно. Если не знаете ответа на вопрос, то лучше не пишите чем тупо флудить.
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694502
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFaleks222Прямо таки ваш зверь есть в списке пользователей базы master?
Да вы, батенька, извращенец.

Давайте не будем обсуждать кто извращенец, а кто нет и зачем это нужно. Если не знаете ответа на вопрос, то лучше не пишите чем тупо флудить.

Вам нужно "пробросить" владельца процедуры [dbo].[MyProc] из одной базы в другую.
Смотри в сторону trustworthy у базы мастер
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694506
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

ну или db_chaining включить, есди речь идёт именно о кросс базовам запросе
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694516
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKmsLex,

ну или db_chaining включить, есди речь идёт именно о кросс базовам запросе

Если владельцем процедуры является dbo (а это скорее всего так) то WITH EXECUTE AS OWNER переводит контекст выполнения в dbo и без trustworthy вы его не пробросите за пределы базы.
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694522
churupaha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694614
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKmsLex,

ну или db_chaining включить, если речь идёт именно о кросс базовам запросе

Э... Немного уточню - речь юзере с windows авторизацией, а не sql.
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694626
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFЭ... Немного уточню - речь юзере с windows авторизацией, а не sql.Существенное пояснение, прям все встало на свои места.

З.Ы. У юзеров нет вообще никакой аутентификации. Юзеры -- это сущность базы данных, на которую навешиваются права в рамках этой же базы данных, и не более.
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694770
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, опишу свой вариант решения.

Сама по себе процедура, которую нужно вызывать юзеру вот эта:

Код: sql
1.
2.
3.
4.
5.
6.
ALTER PROCEDURE [dbo].[WhoIsActive]
WITH EXECUTE AS 'sys_adm'
AS
EXEC sp_WhoIsActive @get_plans  = 1, @get_full_inner_text  = 0 ,@get_outer_command  = 1, @get_transaction_info  = 1 ,@output_column_list  =
 '[start_time][dd%][session_id][blocking_session_id][status][login_name][database_name][program_name][host_name][percent_complete][sql_command] 
[sql_text][sql_command][query_plan][cpu%][temp%][reads%][writes%][context%][physical%][locks]'



Где sp_WhoIsActive - довольно известная процедура, размещена в master.

WhoIsActive - в msdb и на нее даны права EXECUTE юзеру MyDomain\MyUser.

В таком варианте все заработало - юзер выполняет EXEC msdb..[WhoIsActive] и получает нужный результат.
...
Рейтинг: 0 / 0
Как правильно дать права юзеру на процедуру
    #39694771
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, опишу свой вариант решения.

Сама по себе процедура, которую нужно вызывать юзеру вот эта:

Код: sql
1.
2.
3.
4.
5.
6.
ALTER PROCEDURE [dbo].[WhoIsActive]
WITH EXECUTE AS 'sys_adm'
AS
EXEC sp_WhoIsActive @get_plans  = 1, @get_full_inner_text  = 0 ,@get_outer_command  = 1, @get_transaction_info  = 1 ,@output_column_list  =
 '[start_time][dd%][session_id][blocking_session_id][status][login_name][database_name][program_name][host_name][percent_complete][sql_command] 
[sql_text][sql_command][query_plan][cpu%][temp%][reads%][writes%][context%][physical%][locks]'



Где sp_WhoIsActive - довольно известная процедура, размещена в master.

WhoIsActive - в msdb и на нее даны права EXECUTE юзеру MyDomain\MyUser.

В таком варианте все заработало - юзер выполняет EXEC msdb..[WhoIsActive] и получает нужный результат.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно дать права юзеру на процедуру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]