В настоящее время я работаю над инфраструктурой, которая позволит нам иметь единую базу данных для нескольких приложений, где все они совместно используют общий набор сущностей (таблиц).Каждая из схем сопоставляется с набором объектов домена через ORM.
Идея состоит в том, чтобы иметь одно приложение типа администратора для администрирования общего набора объектов.Каждое из других приложений имеет свою собственную схему для своих собственных сущностей, но кроме того, оно может читать только сущности из общего набора.Поскольку каждое из этих приложений имеет свой собственный вход в базу данных и владение схемой по назначенной схеме, вначале это приводит к общей схеме, предоставляющей разрешения только для чтения всем этим входам в систему.
Возможно, проще говоря, у нас естьследующие три схемы:
и приложения:
Приложение администратора:
- Вход в систему Admin
- владение схемой Common
- Модель домена Common
Приложение A:
- Вход в систему A
- Владение Schema_A
- Только для чтения и владение схемой Common
- Модель домена Model_A
- Модель домена Common
Приложение B:
- Логин B
- Владение Schema_B
- Только для чтения по схеме Common
- Модель домена Model_B
- Модель домена Common
Вышеприведенный сценарий довольно прост: добавьте SELECT permissСхема общего над логинами A и B.
Но, скажем, теперь я хочу предоставить Application A разрешение INSERT, DELETE, UPDATE определенной таблицы в схеме Common.Для ясности предположим, что у нас есть таблица с именем Files, в которую может вставлять любое приложение.
Единственный способ, которым мне удалось это сделать, - это предоставить для входа A все эти разрешения схемы.Если бы я дал ему только те разрешения для таблицы «Файлы» в общей схеме, было бы отказано в разрешении во время выполнения.Однако, делая это теперь, вы получаете права входа A для всех таблиц в схеме - что на самом деле нежелательно.
Как или где предоставить необходимые разрешения, чтобы они применялись только к конкретной таблице?