Предоставить роль исполняемым хранимым процедурам

Вопрос:У меня есть прокси-пользователь, которого я пытаюсь добавить к роли, которая может выполнять все хранимые процедуры. Используя другие сообщения StackOverflow, мне удалось собрать этот script USE abc Create ROLE db_exec go GRANT EXECUTE TO db_exec go EXEC sp_addrolemember 'db_exec', 'abc_user' go Когда я пытаюсь запустить мои хранимые процедуры, я все равно получаю эту ошибку за

Вопрос:

У меня есть прокси-пользователь, которого я пытаюсь добавить к роли, которая может выполнять все хранимые процедуры. Используя другие сообщения StackOverflow, мне удалось собрать этот script

USE abc Create ROLE db_exec go GRANT EXECUTE TO db_exec go EXEC sp_addrolemember ‘db_exec’, ‘abc_user’ go

Когда я пытаюсь запустить мои хранимые процедуры, я все равно получаю эту ошибку за мою обработку ошибок.

Разрешение EXECUTE было отклонено для объекта ‘sp_OACreate’, базы данных ‘mssqlsystemresource’, schema ‘sys’.

Что я могу сделать, чтобы abc_user выполнить sp_OACreate?

Лучший ответ:

Помимо роли sysadmin, вам также необходимо предоставить разрешение на выполнение в основной базе данных, где эти процедуры фактически находятся

use master go grant exec on sp_OACreate to abc_user GO

После запуска вы можете подтвердить следующее: у вас есть разрешение на выполнение процедуры

SELECT * FROM master.sys.database_permissions [dp] JOIN master.sys.system_objects [so] ON dp.major_id = so.object_id JOIN master.sys.sysusers [usr] ON usr.uid = dp.grantee_principal_id AND usr.name = ‘abc_user’ WHERE permission_name = ‘EXECUTE’ AND so.name = ‘sp_OACreate’ Ответ №1

В приведенных ниже ответах мы, как правило, стараемся не предоставлять разрешение sysadmin любому пользователю, когда это возможно. В этом случае я обнаружил, что для запуска sp_OACreate вам действительно не нужна роль sysadmin.

Я запустил следующее:

use master grant exec on sp_OACreate to yourSecObject grant exec on sp_OADestroy to yourSecObject —Optional grant exec on sp_OAMethod to yourSecObject

В моих целях мне понадобился шаг очистки, поэтому пользователю потребовались создание и уничтожение.

Я надеюсь, что это поможет всем, кто хочет дать возможность запускать эти процедуры, но не хочет, чтобы у пользователя был полный доступ к БД ко всем другим базам данных на сервере.

-Скотт

Ответ №2

В случае следующих ошибок:

The EXECUTE permission was denied on the object ‘xp_cmdshell’, database ‘mssqlsystemresource’, schema ‘sys’. The EXECUTE permission was denied on the object ‘sp_OACreate’, database ‘mssqlsystemresource’, schema ‘sys’. The EXECUTE permission was denied on the object ‘sp_OAMethod’, database ‘mssqlsystemresource’, schema ‘sys’. The EXECUTE permission was denied on the object ‘sp_OAMethod’, database ‘mssqlsystemresource’, schema ‘sys’. The EXECUTE permission was denied on the object ‘sp_OAMethod’, database ‘mssqlsystemresource’, schema ‘sys’. The EXECUTE permission was denied on the object ‘sp_OAGetProperty’, database ‘mssqlsystemresource’, schema ‘sys’. The EXECUTE permission was denied on the object ‘sp_OAGetProperty’, database ‘mssqlsystemresource’, schema ‘sys’. The EXECUTE permission was denied on the object ‘sp_OADestroy’, database ‘mssqlsystemresource’, schema ‘sys’. Содержание

  1. Включить процедуру xp_cmdshell
  2. Разрешить пользователю выполнять хранимые процедуры
  3. Проверьте, установлены ли права на выполнение

Включить процедуру xp_cmdshell

это, вероятно, уже было выполнено в этот момент, так что это только для справки:

EXEC sp_configure ‘show advanced options’, 1 GO RECONFIGURE GO EXEC sp_configure ‘xp_cmdshell’, 1 GO EXEC sp_configure ‘show advanced options’, 0 GO RECONFIGURE GO

Разрешить пользователю выполнять хранимые процедуры

use [master] GO GRANT EXECUTE ON [sys].[xp_cmdshell] TO [DOMAINusername]; GRANT EXECUTE ON [sys].[sp_OACreate] TO [DOMAINusername]; GRANT EXECUTE ON [sys].[sp_OADestroy] TO [DOMAINusername]; GRANT EXECUTE ON [sys].[sp_OAGetErrorInfo] TO [DOMAINusername]; GRANT EXECUTE ON [sys].[sp_OAGetProperty] TO [DOMAINusername]; GRANT EXECUTE ON [sys].[sp_OAMethod] TO [DOMAINusername]; GRANT EXECUTE ON [sys].[sp_OAStop] TO [DOMAINusername]; GRANT EXECUTE ON [sys].[sp_OASetProperty] TO [DOMAINusername]; GO

Проверьте, установлены ли права на выполнение

SELECT * FROM master.sys.database_permissions [dp] JOIN master.sys.system_objects [so] ON dp.major_id = so.object_id JOIN master.sys.sysusers [usr] ON usr.uid = dp.grantee_principal_id AND usr.name = ‘DOMAINusername’ WHERE permission_name = ‘EXECUTE’ AND (so.name = ‘xp_cmdshell’ OR so.name = ‘sp_OACreate’ OR so.name = ‘sp_OADestroy’ OR so.name = ‘sp_OAGetErrorInfo’ OR so.name = ‘sp_OAGetProperty’ OR so.name = ‘sp_OAMethod’ OR so.name = ‘sp_OAStop’ OR so.name = ‘sp_OASetProperty’)

Оцените статью
Добавить комментарий