У меня есть 2 схемы, и один из объектов в первой схеме должен получить доступ к объекту в другой схеме. Например:
CREATE VIEW I.ITest
AS
SELECT 1 as TestColumn
GO
CREATE VIEW O.OTest
AS
SELECT * FROM I.ITest
GO
EXEC ('SELECT * FROM O.OTest') AS USER = 'TestUser'
DROP VIEW O.OTest
DROP VIEW I.ITest
В приведенном выше примере TestUser имеет доступ только к схеме «O». Таким образом, само выделение работает нормально, но поскольку представление делает выбор из другой схемы 'I', то происходит сбой с ошибкой:
Отказано в разрешении SELECT для объекта «ITest», базы данных «MyDB», схемы «I».
Чтобы обойти это, я могу дать схеме «O» разрешение на доступ к схеме «I», но это звучит неправильно и выглядит как обход разрешений схемы.
Что можно сделать? Я делаю все это неправильно? Какова лучшая практика в этом сценарии?
Спасибо
ОБНОВЛЕНИЕ : Мои схемы принадлежали разным ролям db, поэтому я решил эту проблему, просто изменив владельца обоих на dbo, а затем предоставив разрешение роли db для доступа к схеме. Это означало, что владелец dbo мог видеть все, и я мог тогда дать конкретное разрешение только на роль db, а остальные объекты db были недоступны, если только через эту схему. Спасибо за вашу помощь