2014-02-20 3 views
2

У нас есть две разные базы данных DB1 и DB2 с таблицами в DB2, ссылающимися на таблицы в DB1.Можно ли создать синоним только для чтения в SQL Server?

Мы изучаем возможность использования SYNONYMS с доступом только для чтения в DB2 и использование EntityFramework для ссылки на эти SYNONYMS как таблицы в DB2.

С тех пор, как EF не распространяется на несколько баз данных, после прочтения этой статьи (http://rachel53461.wordpress.com/2011/05/22/tricking-ef-to-span-multiple-databases/) мы на шаг впереди, но мы хотим иметь доступ только для чтения только что созданных SYNONYMS.

Любая помощь очень ценится!

+3

Как насчет просмотра только для чтения? –

+0

У нас есть внешние ключи и т. Д., Я не думаю, что это возможность. –

+0

Что иностранные ключи имеют к этому отношение? Вы можете создать представление из каждого 'select'. –

ответ

0

Вы можете создать схему для синонима (например, «EntityFramework» или «EF» для простоты). Создайте роль для своей схемы, называя ее чем-то вроде «EntityFrameworkUser».

Теперь есть два пути, здесь - это первый, если у вас только есть доступ к SELECT, или второй, если вам также может понадобиться доступ EXECUTE.

ПЕРВЫЙ:

Зайдя в свойства вашей EntityFramework схемы, вы можете перейти к Права доступа, поиска и добавить EntityFrameworkUser роль и чек только ВЫБРАТЬ в списке разрешений ниже.

ВТОРОЙ:

Зайдя в свойство вашей EntityFrameworkUser роли, вы можете перейти к защищаемому, перейдите в разделе «Поиск ...» для защищаемых, используйте «Все объекты, принадлежащие к схеме» с вашей EntityFramework схемой.

Для каждого из объектов, отображаемых в результате, которые должны быть просто синонимами (если только вы не создали новые таблицы/СП в схеме «EntityFramework»), вы можете предоставить доступ к «Выбрать» и оставить все остальное если вы не хотите, чтобы пользователь имел больше или меньше мощности с этими объектами.

НЕЗАВИСИМО:

Это позволит вам иметь видимость таблицы без записи/выполнения доступа. Назначьте, какой пользователь сервера нуждается в этом доступном для чтения, и добавьте его в роль «EntityFrameworkUser». В моем случае есть пользователь «WebApplication» и «DesktopApplication», оба из которых назначены роли «EntityFrameworkUser».

Это должно решить вашу проблему visiblity, ограничивая доступ к записи и выполнению в системе.

Смежные вопросы