Многие из моих приложений-работодателей имеют аналогичную структуру внутренних разрешений для ограничения данных определенным набором пользователей или групп. Группы также могут быть вложенными.Структура разрешений базы данных
Проблема, с которой мы сталкиваемся сейчас, заключается в том, что перечисление разрешений невероятно медленное. Текущий метод использует хранимую процедуру со многими курсорами и временными таблицами. Это отлично работает для небольших приложений, но теперь у нас есть одна конкретная система, которая быстро растет, и она начинает замедляться.
Основная структура таблицы такова:
tblUser {Идентификатор_пользователя, Имя пользователя, WindowsLogonName}
tblGroup {GroupID, название, описание, SystemFlag}
tblGroupGroup {GroupGroupID, имя,}
tblGroupUser {GroupUserID, Name,}
и связать все это вместе;
tblPermission {PermissionID, SecurityObjectID, SecuredID, TableName, AllowFlag}
, который содержит строки, как ..
'5255-5152-1234-5678', '{Идентификатор группы}' , '{ID для чего-то в tblJob}', 'tblJob', 1
'4240-7678-5435-8774', '{ID пользователя}', '{ID для чего-то в tblJob}', tblJob ', 1
' 5434-2424-5244-5678 ',' {ID группы} ',' {ID для что-то в tblTask} ',' tblTask ', 0
Несомненно, должен быть более эффективный подход к перечислению всех групп и получению идентификаторов защищенных строк?
Чтобы усложнить ситуацию; если пользователю явно запрещен доступ к строке, то это отменяет любые групповые разрешения. Все это в MSSQL.
Какую версию SQL-сервера вы используете; есть несколько предложений, но они зависят от версии сервера sql. Посмотрите на окончательные разрешения в приложении с более высокой нагрузкой, вы можете разделить чеки, чтобы предоставить и отклонить выбор, который может упростить выполнение, поскольку я привык видеть больше грантов, чем denys в моих приложениях. – u07ch
SQL Server 2005. Где я могу найти информацию о приложении с более высокой нагрузкой? –