#sql-server #sql-server-2008
#sql-сервер #sql-server-2008
Вопрос:
Я восстановил базу данных 2005 года на новый сервер 2008 R2 DB. Я создал нового пользователя под названием «gatekeeper»
Однако у этого пользователя нет доступа к списку хранимых процедур в базе данных.
В приложении создания отчетов перед выполнением запроса программа создания отчетов выполняет следующую процедуру…
exec [Timesheet]..sp_procedures_rowset N'mp_GetTimesheetToPrint',1,N'dbo'
При запуске под пользователем gatekeeper это не возвращает строк. Однако при запуске от имени sa она возвращает процедуру.
Какое минимальное разрешение мне нужно предоставить gatekeeper для правильной работы этой процедуры. Похоже, проблема со всеми системными объектами, ни один из них не запускается или выдает ошибки разрешения, они просто не возвращают результатов или подмножеств результатов.
Действительно борется с этим. Заранее спасибо
С уважением
Фил
Комментарии:
1. Итак, у
gatekeeper
пользователя естьexec
разрешения наmp_GetTimesheetToPrint
?
Ответ №1:
Честно говоря, я немного смущен вашим описанием, поэтому, пожалуйста, дайте мне знать, если я ошибаюсь здесь. Вы можете попробовать это ниже. Это предоставит execute доступ ко всем хранимым процедурам. Если вам нужен gatekeeper только для доступа к одной хранимой процедуре, тогда просто разрешите выполнение для этой хранимой процедуры. Если хранимая процедура обращается к данным из других баз данных, вам может потребоваться предоставить разрешения для таблиц, чтобы она осуществляла доступ за пределы своей базы данных.
CREATE ROLE db_executor
GRANT EXECUTE TO db_executor
EXEC sp_addrolemember 'db_executor', 'gatekeeper'
Комментарии:
1. Привет, спасибо, что перезвонили мне. Немного дополнительного пояснения.. Это для отчета crystal, gatekeeper имеет разрешения на выполнение для mp_GetTimesheetToPrint и может выполнить его нормально, похоже, что при запуске трассировки происходит то, что crystal перед запуском процедуры для отчета пытается получить метаданные о sp. Он запускает ‘sp_procedures_rowset’, но эта процедура не возвращает строк при запуске от имени gatekeper, но возвращает при запуске от имени sa
2. Если я предоставлю gatekeeper роль securityadmin, то она будет работать нормально, однако я действительно не хочу этого делать.