powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
8 сообщений из 8, страница 1 из 1
Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
    #40095419
Здравствуйте!

Есть хранимая процедура(ХП), которая возвращает результат, если её запускаю я, и не возвращает ничего или ошибку, если её запускает рядовой пользователь программы. Давать права группе, в которую входит пользователь я опасаюсь. Можно ли что-то такое написать внутри ХП, чтобы она выполнялась под правами условно говоря суперадмина, вне зависимости от того, насколько урезанный в правах пользователь её запускает?
В теле ХП я получаю определение(код) другой хранимой процедуры
...
Рейтинг: 0 / 0
Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
    #40095420
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун
Здравствуйте!

Есть хранимая процедура(ХП), которая возвращает результат, если её запускаю я, и не возвращает ничего или ошибку, если её запускает рядовой пользователь программы. Давать права группе, в которую входит пользователь я опасаюсь. Можно ли что-то такое написать внутри ХП, чтобы она выполнялась под правами условно говоря суперадмина, вне зависимости от того, насколько урезанный в правах пользователь её запускает?
В теле ХП я получаю определение(код) другой хранимой процедуры

with execute as owner
...
Рейтинг: 0 / 0
Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
    #40095434
msLex,

спасибо. На вот такое определение ХП(под собой создаю):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ALTER PROCEDURE CUS.RPT_107_Balance_For_All_RES
	@Year		INT = 2021,
	@Month		INT = 7,
	@F_Division	INT
	WITH RECOMPILE, EXECUTE AS OWNER
	AS
	SET NOCOUNT, XACT_ABORT, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL ON
	SET NUMERIC_ROUNDABORT, CURSOR_CLOSE_ON_COMMIT OFF
	SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN
...
END


возвращает:
авторНевозможно выполнить в качестве участника базы данных, поскольку участник "EIVK\Prog_2DivUsers" не существует, этот тип участника не может проходить олицетворение, или отсутствует разрешение.

Похоже надо что-то ещё?
...
Рейтинг: 0 / 0
Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
    #40095441
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун
msLex,

спасибо. На вот такое определение ХП(под собой создаю):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ALTER PROCEDURE CUS.RPT_107_Balance_For_All_RES
	@Year		INT = 2021,
	@Month		INT = 7,
	@F_Division	INT
	WITH RECOMPILE, EXECUTE AS OWNER
	AS
	SET NOCOUNT, XACT_ABORT, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL ON
	SET NUMERIC_ROUNDABORT, CURSOR_CLOSE_ON_COMMIT OFF
	SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN
...
END


возвращает:
авторНевозможно выполнить в качестве участника базы данных, поскольку участник "EIVK\Prog_2DivUsers" не существует, этот тип участника не может проходить олицетворение, или отсутствует разрешение.

Похоже надо что-то ещё?

Канешно. Голову бы еще надо иметь.

1. Например
SET NOCOUNT, XACT_ABORT
бесполезно устанавливать в процедуре, ибо они действуют в пределах пакета.
По простому - все будет вернуто взад, как только процедура завершится.

2. Остальные надо тоже смотреть.

3. " EXECUTE AS OWNER", по факту, означает "исполнить с правами собственника В ПРЕДЕЛАХ БАЗЫ, например DBO". Это не дает никаких прав на уровне сервера.
...
Рейтинг: 0 / 0
Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
    #40095446
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222

1. Например
SET NOCOUNT, XACT_ABORT
бесполезно устанавливать в процедуре, ибо они действуют в пределах пакета.
По простому - все будет вернуто взад, как только процедура завершится.

Вы так говорите, как будто это что-то плохое!
)))
3. " EXECUTE AS OWNER", по факту, означает "исполнить с правами собственника В ПРЕДЕЛАХ БАЗЫ, например DBO". Это не дает никаких прав на уровне сервера.
А если база trustworthy ON и базы с обеих концов DB_CHAINING on?
...
Рейтинг: 0 / 0
Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
    #40095448
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
А если база trustworthy ON и базы с обеих концов DB_CHAINING on?


По-моему, для кейса с DBO, достаточно trustworthy ON
...
Рейтинг: 0 / 0
Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
    #40095455
Я убрал все SET из определения процедуры, ситуация не изменилась. Наверно надо указать конкретного пользователя в EXECUTE AS?
...
Рейтинг: 0 / 0
Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
    #40095457
Да, конкретный пользователь помог. Спасибо всем!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли внутри хранимой процедуры указать под чьими правами она должна выполняться?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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