#sql-server #sql-server-2016
#sql-сервер #sql-server-2016
Вопрос:
Я запускаю SQL Server 2016 и настроил доступ на основе ролей, чтобы контролировать, что пользователи могут делать на основе ролей.
Я настроил роль:
Create Role [Developer]
Я предоставил разрешения этой роли для запуска SELECTS, покупки, запрета ВСТАВКИ, ОБНОВЛЕНИЯ и УДАЛЕНИЯ во всех таблицах:
GRANT SELECT ON SCHEMA::dbo to [Developer]
DENY INSERT, UPDATE, DELETE ON SCHEMA::dbo to [Developer]
Я добавляю пользователей в роль:
ALTER ROLE [Developer] ADD MEMBER [SomeUser]
Я хочу, чтобы пользователь выполнял только определенные хранимые процедуры, поэтому я предоставляю роли разрешения на выполнение определенных sprocs:
GRANT EXECUTE ON dbo.mySproc to [Developer]
Однако, когда я вхожу в систему как SomeUser и пытаюсь выполнить sproc, я получаю следующую ошибку:
Разрешение на выполнение было отклонено для объекта ‘mySproc’, базы данных ‘MyDB’, схемы ‘dbo’.
Я делаю что-то не так?
Комментарии:
1. вы сопоставили логин с пользователем базы данных? dba.stackexchange.com/questions/96358 /…
2. Я сопоставил логин, используя следующее: СОЗДАЙТЕ ПОЛЬЗОВАТЕЛЯ [myDomain SomeUser] ДЛЯ ВХОДА [myDomain SomeUser] С DEFAULT_SCHEMA [dbo]. Это не устранило проблему.
3. Я устранил проблему, удалив всех пользователей из роли и удалив роль и воссоздав роль и добавив обратно пользователей из роли. Я думаю, что, возможно, я добавил ЗАПРЕТ на выполнение в схему dbo в первый раз. Однако я не видел этого отказа при просмотре разрешений роли.
4. вам нужно «выбрать объекты типа» -> «база данных», чтобы увидеть разрешения, установленные на уровне базы данных. это не отображается автоматически в результатах поиска, как разрешения на уровне объекта.
5. Теперь я это вижу. Спасибо.