Мы создали процедуру, подобную этой:
CREATE PROCEDURE [dbo].[reportsProc]
@IstGroup INT,
...
AS
BEGIN
SET NOCOUNT ON;
IF @IstGroup = 0
BEGIN
SELECT K.*
FROM V_xyz K
END
ELSE
BEGIN
SELECT K.*
FROM V_xyz2 K
END
END
GRANT EXECUTE ON [dbo].[reportsProc] TO [user_abz]
Примечание: V_xyz и V_xyz2 являются представлениями.
Если пользователь пытается выполнить процедуру, существует исключение SQL Server:
Не удается найти объект «reportsProc», так как он не существует или у вас нет разрешения
Мы пытались предоставить права на выполнение для некоторых объектов, на которые есть ссылки, но это не удалосьне работает.
Если мы добавим пользователя user_abz
к роли базы данных db_owner
, это сработает.Но мы не хотим, чтобы у пользователя было слишком много прав.
Если мы добавим пользователя user_abz
к роли базы данных db_ddladmin
, db_datareader
или db_datawriter
, это не сработает.
Если мы добавим пользователя user_abz
к роли базы данных db_securityadmin
, это будет работать.
Какую роль / право мы должны настроить, чтобы предоставить пользователю доступ к процедуре?
Спасибо завперед.