Примечание. Это запись вики сообщества, предназначенная главным образом для документирования проблемы и ее решения. Я вряд ли смог найти информацию в сети, чтобы решить эту проблему. Надеюсь, это кому-нибудь поможет!
У меня есть БД SQL-Server 2005 с таблицами данных в схеме dbo
.
Для нового компонента в проекте я создал новый слой доступа к данным (используя NHibernate), и, чтобы аккуратно это реализовать, я создал новую схему.
Для всех нужных мне объектов я создал вид:
myschema.ViewTable1
myschema.ViewTable2
и т.п.
И предоставил право выбора.
Теперь, когда я попытался получить доступ к этим представлениям пользователем, у которого были только разрешения на выборку для представлений, но не базовая таблица с NHibernate, я получил:
The SELECT permission was denied on the object 'dbo.Table1', database 'TestDB', schema 'dbo'.
Согласно всей документации, это должно быть возможно.
Еще более странно то, что SQL выполнял работу, выполненную в Management Studio, как простой выбор.
Но если я выполнил его с exec sp_executesql
, как это делает NHibernate, он сломался с тем же исключением.
После долгих поисков я наконец нашел этот вопрос здесь, в StackOverflow.
Добавлено Обновление дало подсказку:
Моя новая схема myschema
принадлежала моему пользователю Windows, а не dbo !
После изменения владельца схемы на dbo и воссоздания всех myschema
объектов ( Да, это необходимо! ) все начинает работать как положено!
Надеюсь, это кому-нибудь поможет.