Я, вероятно, упускаю что-то очевидное или делаю это неправильно, но вот оно:
Я написал скалярную функцию CLR в SQL Server 2005. Она имеет один параметр (int
) и возвращает varchar(2000)
. У меня возникли проблемы с выяснением того, как конкретно предоставить разрешения для роли sysadmin и ограничить выполнение любой другой роли, включая db_owner.
Я предполагаю, что предоставление и отзыв разрешений для функций CLR такое же, как и для любой другой UDF. Это чувствительная функция, поскольку она расшифровывает пароль, который хранится в таблице SecurityUser для приложения. Я не хочу, чтобы кто-либо мог запускать его, кроме членов роли системного администратора.
В базе данных я сначала попытался предоставить системному администратору из базы данных:
grant execute ON dbo.fCrossTabDx1 TO sysadmin
и конечно получил ошибку:
Msg 15151, уровень 16, состояние 1, строка 1
Не удается найти пользователя 'sysadmin', потому что он не существует или у вас нет разрешения.
Затем я попытался предоставить разрешение db_securityadmin
, который является ролью в базе данных, и получил ошибку:
Msg 4617, уровень 16, состояние 1, строка 1
Невозможно предоставить, отклонить или отозвать разрешения для специальных ролей или от них.
Итак, был бы признателен, если бы кто-нибудь направил меня в правильном направлении, если это возможно.
- Могу ли я ограничить пользователя с разрешениями db_owner на выполнение функции, и
- Могу ли я разрешить функции только разрешение на выполнение роли системного администратора?
Спасибо.