Я ищу лучший способ защитить доступ к данным, хранящимся в базе данных SQL Server (доступ к которой осуществляется через хранимых процедур ).
Пользователи компании разделены на 3 объекта со связанными группами безопасности Windows : G_SUBSIDIARY1
, G_SUBSIDIARY2
и G_HOLDING
.
Каждое приложение связано с Группа безопасности Windows : G_APPLICATION1
, G_APPLICATION2
, G_APPLICATION3
...
Эти группы безопасности в основном используются для управления доступом к общим папкам, выделенным для каждого объекта и приложения.
Хранимые процедуры должны фильтровать данные в зависимости от того, кто их запрашивает.
В качестве примера для доступа к данным в таблице APPLICATION1_DATA
вы должны быть членом группы G_APPLICATION1
.
И в зависимости от вашей сущностивы получите доступ к другому подмножеству данных (дискриминатор - это столбец с сущностью, которой принадлежат данные).
Чтобы применить авторизацию, я думал о том, чтобы полагаться только на группы безопасности Windows ипроверка с * 1Функция 033 *, если текущий пользователь (аутентифицированный с помощью аутентификация Windows ) принадлежит каждому: IS_MEMBER("COMPANY\G_APPLICATION1")
и IS_MEMBER("COMPANY\G_SUBSIDIARY1")
.
Основные преимущества, которые я вижу, состоят в том, что существует только один объект для управления, иесли более поздние пользователи будут добавлены или удалены, это будет прозрачно на стороне базы данных.
Но мне интересно, есть ли какие-либо недостатки в этом методе, и если, наоборот, будут некоторые преимущества использования SQL ServerРоли в дополнение к этим группам безопасности.
Было бы добавлено некоторое обслуживание, чтобы поддерживать их актуальность, но это может стоить того ...