У меня разные группы Active Directory и одна вселенная BO. Разные группы Active Directory должны иметь разные ограничения доступа к данным в юниверсе. Как я могу это реализовать? (к сожалению, я не нашел соответствующего руководства или документации в сети.) Если существует более одного способа реализации доступа к данным, каков наилучший способ? Спасибо.
Доступ к данным в BusinessObjects через группы Active Directory
Ответы (1)
Существует два основных способа реализации безопасности на уровне строк в юниверсе. Один через профиль безопасности; другой через @variable('BOUSER')
.
Если безопасность должна применяться на уровне группы (то есть ко всем членам группы должно применяться одно и то же условие), тогда подходит профиль безопасности. Это описано в главе 17 Руководства пользователя IDT. На высоком уровне шаги следующие:
- Из IDT запустите Редактор безопасности.
- Выберите юниверс и создайте либо Профиль безопасности данных, либо Профиль безопасности бизнеса (о различиях между ними читайте в документации, но одно из них заключается в том, что с DSP вы будет писать условие ГДЕ; с BSP вы выбираете объекты и определяете условие)
- После создания профиля безопасности выберите группу или группы, к которым он должен применяться.
- Повторите вышеуказанное для каждой группы, к которой должно быть применено ограничение.
Другой метод применения безопасности на уровне строк применим только в том случае, если источник данных включает в себя таблицу, имеющую сопоставление идентификаторов пользователей BO со значениями, к которым у них может быть доступ. Например, предположим, что у вас есть таблица безопасности в вашем источнике данных, которая выглядит следующим образом:
user_id region
------- ------
U123 NE
U123 SE
U321 W
и ваша таблица фактов выглядит так:
pk region value
__ ______ _____
1 NE 3
2 W 4
Вы можете применить защиту, чтобы пользователь U123 видел только строку «NE», а пользователь U321 видел только строку «W». Вы должны объединить две таблицы в регионе (security.region=fact.region
), а затем создать новый обязательный фильтр в security.user_id=@variable('BOUSER')
. Это заставит фильтр применяться ко всем запросам.
Обратите внимание, что оба вышеуказанных метода работают, добавляя условия к условию запроса WHERE. Если у ваших пользователей есть разрешение на просмотр и редактирование SQL запроса, они будут выше, чтобы переопределить логику фильтрации. Для обеспечения безопасности пользователям следует отказать в этом праве.