Вот некоторый код, который я использую для проверки того, что (текущий пользователь) имеет разрешение EXECUTE для sp_OACreate и т. Д .:
use master;
select state_desc,name from
sys.database_permissions a
left join
sys.all_objects b
on a.major_id = b.object_id
where name like 'sp_OA%';
Как отметили @John Sansom и @WestDiscGolf, пользователь должен существовать в базе данных Master, а права на выполнение должны предоставляться в базе данных Master, поэтому требуется use Master
. Запрос выше вернет записи, если у пользователя есть разрешения на выполнение, и пустое множество, если они этого не делают. (Выполнение в пользовательской базе данных также вернет пустой набор.)
Я не мог найти способ проверить эти разрешения, используя fn_my_permissions
, который, предположительно, является подходящим инструментом для подобных задач.