Как применить динамическую безопасность на уровне строк на основе имени пользователя и местоположения?

Это связано с безопасностью на уровне строк в Power BI. Вот фиктивная таблица, на которой я хочу реализовать этот RLS.

Проверьте ссылку на эту таблицу

Формула RLS, которую я использую сейчас, -

[location] = LOOKUPVALUE([location],[login],USERPRINCIPALNAME()) 

Мое конечное требование - заставить этот RLS работать в том случае, если пользователь входит в систему, он должен видеть данные о том месте, в котором он находится, а также должен видеть других пользователей, которые находятся в том же месте.

Но поиск выдает ошибку:

Была предоставлена ​​таблица с несколькими значениями, где ожидалось одно значение

Кроме того, один пользователь может иметь доступ к нескольким местоположениям, а в одном месте может быть несколько пользователей.

Как я могу достичь этого уровня безопасности на уровне строк, используя поиск или любой другой возможный способ?


person Deepesh Vashistha    schedule 27.09.2018    source источник
comment
Прочтите При каких обстоятельствах я могу добавить к своему вопросу «срочно» или другие похожие фразы, чтобы получить более быстрые ответы? - Резюме заключается в том, что это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивен для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.   -  person halfer    schedule 28.09.2018


Ответы (1)


Ваше требование также может быть выполнено таким образом, вам нужно поработать как на рабочем столе Power BI, так и на сервере приложений, чтобы получить это правильно.

На рабочем столе

  1. Power BI Desktop позволяет создавать роли. Нажмите «Управление ролями», а затем нажмите «Создать новую роль».
  2. Вам нужно будет создать роли на основе местоположения здесь.
  3. Например, создайте правило под названием Location A, щелкните таблицу и дайте формулу фильтрам в этой таблице. Например, [Location] = «A».

Итак, вы можете создать n таких ролей, а затем опубликовать панель управления.

App.PowerBI.Com

  1. Теперь откройте app.powerbi.com, затем перейдите к соответствующему набору данных и щелкните его правой кнопкой мыши, выберите безопасность - вы найдете там группы.

  2. В группах введите адреса электронной почты, которые должны иметь к ним доступ. Вы можете добавить человека в несколько групп, что позволит им видеть более одной группы.

Тестирование

  1. Рабочий стол также позволяет вам протестировать его - вы можете щелкнуть по просмотру ролей, чтобы увидеть, что видит пользователь в этой группе.

Также следует помнить, что только люди, у которых есть доступ к панели инструментов, смогут увидеть данные внутри нее. Итак, вам нужно будет поделиться им с ними, а также добавить их в группы. Если вы не выполните одно из этих действий, они ничего не увидят на панели управления.

Самый эффективный метод

Это лучший метод, и я думаю, что это тот, о котором вы просите,

[login] = username() 

Функция username () автоматически получает адрес электронной почты пользователя, который вошел в систему.

Создайте вышеупомянутый фильтр для новой роли в требуемой таблице. Таким образом, вы все равно будете добавлять эти 50000 пользователей вручную в роли в разделе безопасности соответствующего набора данных.

Но если все они принадлежат к определенной группе в организации, и ваша команда Office-365 правильно настроила серверную часть, вам нужно будет только войти в группу.

Но у большинства компаний нет такой конфигурации на своей серверной части, так как очень сложно контролировать безопасность данных.

Изменить модель данных

Чтобы выполнить ваше требование, вам также необходимо изменить модель данных.

Первоначально вам понадобится две таблицы.

Таблица значений - у вас может быть много столбцов, таких как имя и все такое, но это не имеет значения.

Actual_Table

Таблица адресов электронной почты для местоположения в качестве второй таблицы.

Access_Table

Теперь объедините местоположения из таблицы значений в таблицу адресов электронной почты, и это будет ваша финальная таблица. Используйте это для визуализации, но будьте предельно ясны в DAX - у вас могут быть повторяющиеся строки и разные значения.

Final_Table

Теперь создайте RLS на этой таблице. Он должен работать.

Как следует из названия, к каждой строке применяется защита на уровне строк. Таким образом, формула будет вычисляться для каждой строки индивидуально. Итак, ваш единственный вариант - иметь плоскую таблицу со всеми значениями.

person CodingDawg    schedule 27.09.2018
comment
Что ж, спасибо за это. Но это всего лишь фиктивные данные. По исходным данным у меня 50 000 пользователей. Таким образом, на самом деле невозможно назначить роли для такого количества пользователей. Вот почему я искал лучший подход. - person Deepesh Vashistha; 27.09.2018
comment
Есть способ, дайте мне день, и я отвечу рабочим прототипом. - person CodingDawg; 27.09.2018
comment
Большое спасибо Sid29, с нетерпением жду вашего рабочего прототипа. - person Deepesh Vashistha; 28.09.2018
comment
Спасибо @ Sid29, как вы можете видеть в моем вопросе, в формуле DAX я использовал USERPRINCIPALNAME (), который помогает мне делать то же самое, что вы говорите прямо сейчас. Но мое конечное требование состоит в том, что если пользователь входит в систему, он также должен видеть данные о других пользователях из того же места. Обычно при использовании USERNAME () я вижу только сведения об этом человеке, но, как я показал в своем вопросе, у пользователя также могут быть разные местоположения. Итак, в таком случае, у вас есть идеи, как заставить его работать? Спасибо! - person Deepesh Vashistha; 28.09.2018
comment
@DeepeshVashistha ой, хитрый, не так ли. Тогда вам понадобится плоский стол. Обновлено. Это может быть вам полезно. - person CodingDawg; 28.09.2018
comment
Спасибо за это Сид. Одно дело, если мы возьмем эту таблицу в качестве нашей плоской таблицы link Итак, как вы можно увидеть, что в нем есть повторяющиеся значения. В RLS я использую формулу [location] = LOOKUPVALUE ([location], [login], USERPRINCIPALNAME ()). Это проверка того, какой пользователь входит в систему и есть ли другой пользователь из того же места. Затем он вернет всех пользователей из того же места. Но если у пользователя есть доступ к нескольким местоположениям, я получаю сообщение об ошибке, как я уже упоминал в своем вопросе. Можете ли вы помочь мне с DAX с помощью этой таблицы? Это действительно сложно. - person Deepesh Vashistha; 28.09.2018
comment
@DeepeshVashistha Вы уверены, что у вас есть место, созданное между Location этой таблицы и другими? Изучите эти отношения - создание отношений будет лучшим способом отфильтровать данные. - person CodingDawg; 01.10.2018
comment
Вы нашли решение, чтобы заставить эту работу работать, я работаю по аналогичному сценарию: ссылка - person Pete; 21.05.2019