Поделиться через


Реализация динамической безопасности с помощью фильтров строк

На этом дополнительном занятии будет создана дополнительная роль, реализующая динамическую безопасность. Динамическая безопасность позволяет определять защиту на уровне строк с учетом имени или идентификатора входа пользователя, который находится в системе в данный момент. Дополнительные сведения см. в разделе Роли (табличные службы SSAS).

Для реализации динамической безопасности необходимо добавить в модель таблицу, содержащую имена тех пользователей, которые могут создавать соединения с моделью как с источником данных и просматривать объекты и данные модели. Модель, которая будет создана на этом занятии, находится в контексте Adventure Works Corp. Но в целях данного занятия добавим таблицу, содержащую пользователей из собственного домена пользователя. Для добавляемых имен пользователей пароли не потребуются. Для создания таблицы «Безопасность сотрудников» с небольшой выборкой пользователей из собственного домена пользователя будет использована функция вставки данных из электронной таблицы Excel. В реальном сценарии таблица, содержащая добавляемые в модель имена, будет использовать таблицу из фактической базы данных в качестве источника данных — например, реальную таблицу dimEmployee.

Для реализации динамической безопасности будут использованы две новые DAX-функции: USERNAME, функция (DAX) и Функция LOOKUPVALUE (DAX). Эти функции, примененные к формуле фильтра строк, определяются в новой роли. Функция LOOKUPVALUE получает значение из таблицы «Безопасность сотрудников» и передает его функции USERNAME, которая указывает имя вошедшего в систему пользователя, относящегося к этой роли. После этого пользователь может просматривать только те данные, которые пропускает фильтр строк роли. В этом сценарии нужно будет указать, что сотрудники отдела продаж могут просматривать только те данные интернет-продаж, которые относятся к их региону.

Во время выполнения этого дополнительного занятия нужно будет выполнить ряд заданий. Эти задания являются уникальными для сценария табличной модели Adventure Works, но они не могут иметь прямого отношения к реальному сценарию. Каждое задание включает дополнительные сведения, описывающие цель задания.

Предполагаемое время выполнения данного занятия: 30 минут

Предварительные требования

Это дополнительное занятие является частью учебника по табличному моделированию, который необходимо изучать по порядку. Прежде чем выполнять задания в этом дополнительном занятии, необходимо завершить все предыдущие занятия.

Добавление таблицы dimSalesTerritory в проект табличной модели интернет-продаж AW

Чтобы реализовать динамическую безопасность для этого сценария Adventure Works, необходимо добавить в модель две дополнительные таблицы. Первая таблица, которая будет добавлена, называется dimSalesTerritory (т. е. территория продаж) из той же базы данных AdventureWorksDW2012. После этого к таблице «Территория продаж» будет применен фильтр строк, определяющий данные, которые может просматривать вошедший в систему пользователь.

Добавление таблицы dimSalesTerritory

  1. В среде SQL Server Data Tools выберите в меню Модель пункт Существующие соединения.

  2. В диалоговом окне Существующие соединения убедитесь, что выбрано соединение с источником данных База данных Adventure Works из SQL, и нажмите кнопку Открыть.

    Если открылось диалоговое окно «Учетные данные олицетворения», введите учетные данные олицетворения, использованные на занятии 2: Добавление данных.

  3. На странице Выбор способа импорта данных убедитесь, что выбран пункт Выбрать из списка таблиц и представлений данные для импорта, и нажмите кнопку Далее.

  4. На странице Выбор исходных таблиц и представлений выберите таблицу DimSalesTerritory.

  5. В столбце «Понятное имя» введите Территория продаж.

  6. Нажмите кнопку Просмотр и фильтрация.

  7. Снимите выделение со столбца SalesTerritoryAlternateKey и нажмите кнопку ОК.

  8. На странице Выбор таблиц и представлений нажмите кнопку Готово.

    Новая таблица будет добавлена в рабочую область модели. Объекты и данные из исходной таблицы dimSalesTerritory будут импортированы в новую таблицу «Территория продаж» в табличной модели Интернет-продаж AW.

  9. После импорта таблицы нажмите кнопку Закрыть.

Присвоение понятных имен

В этом задании нужно будет переименовать столбцы в таблице «Территория продаж» и присвоить им понятные имена. Присваивать таблицам и/или столбцам понятные имена нужно не всегда. Однако это упростит навигацию по проекту модели и облегчит просмотр объектов и данных в клиентском приложении для пользователей.

Переименование столбцов в таблице «Территория продаж»

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

    Территория продаж

    Имя источника

    Понятное имя

    SalesTerritoryKey

    Идентификатор территории продаж

    SalesTerritoryRegion

    Регион территории продаж

    SalesTerritoryCountry

    Страна территории продаж

    SalesTerritoryGroup

    Группа территории продаж

Добавление таблицы с именами пользователей

Поскольку таблица dimEmployee в образце базы данных AdventureWorksDW2012 содержит пользователей из домена AdventureWorks и эти имена пользователей не существуют в текущей среде, необходимо создать таблицу в модели, содержащей небольшую выборку (дерево) фактических пользователей из организации. После этого нужно добавить этих пользователей как членов в новую роль. Для выборки имен пользователей пароли не требуются, однако нужны имена реальных пользователей Windows из домена.

Добавление таблицы «Безопасность сотрудников»

  1. Откройте Microsoft Excel и создайте новую электронную таблицу.

  2. Скопируйте следующую таблицу, включая строку заголовка, и вставьте ее в электронную таблицу.

    Идентификатор сотрудника

    Идентификатор территории продаж

    First Name

    Last Name

    Идентификатора имени входа

    1

    2

    <имя пользователя>

    <фамилия пользователя>

    <домен или имя пользователя>

    1

    3

    <имя пользователя>

    <фамилия пользователя>

    <домен или имя пользователя>

    2

    4

    <имя пользователя>

    <фамилия пользователя>

    <домен или имя пользователя>

    3

    5

    <имя пользователя>

    <фамилия пользователя>

    <домен или имя пользователя>

  3. В новой электронной таблице замените имя, фамилию и домен или имя пользователя именами и идентификаторами имен входа трех пользователей из организации. Вставьте одного и того же пользователя в первые две строки для столбца «Идентификатор сотрудника 1». Это означает, что пользователь относится к более чем одной территории продаж. Не изменяйте поля «Идентификатор сотрудника» и «Идентификатор территории продаж».

  4. Сохраните электронную таблицу как Выборка сотрудников.

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

  6. В среде SQL Server Data Tools выберите в меню Правка команду Вставить.

    Если команда «Вставить» неактивна, щелкните любой столбец в любой таблице в окне конструктора моделей, а затем повторно выберите в меню Правка команду Вставить.

  7. В диалоговом окне Предварительный просмотр вставки в поле Имя таблицы введите Безопасность сотрудников.

  8. В поле Вставляемые данные убедитесь, что данные включают все данные о пользователях и заголовки из электронной таблицы «Выборка сотрудников».

  9. Убедитесь, что напротив параметра Использовать первую строку в качестве заголовка столбца установлен флажок и нажмите кнопку ОК.

    Будет создана новая таблица «Безопасность сотрудников» с данными о сотрудниках, скопированными из электронной таблицы «Выборка сотрудников».

Создание связей между Интернет-продажами, географическим положением и территорией продаж

Все таблицы «Интернет-продажи», «География» и «Территория продаж» имеют общий столбец «Идентификатор территории продаж». Столбец «Идентификатор территории продаж» в таблице «Территория продаж» содержит значения и разный идентификатор для каждой территории продаж.

Создать связи между Интернет-продажами, географическим положением и территорией продаж

  1. В конструкторе моделей в представлении диаграммы в таблице География щелкните и удерживайте нажатым столбец Идентификатор территории продаж, а затем перетащите курсор в столбец Идентификатор территории продаж в таблице Территория продаж и отпустите кнопку мыши.

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

    Обратите внимание, что свойство «Активный» для этого связи имеет значение False, то есть оно неактивно. Это происходит потому, что таблица «Интернет-продажи» уже содержит другую активную связь, используемую в мерах.

Скрытие таблицы «Безопасность сотрудников» от клиентских приложений

В этом задании будет скрыта таблица «Безопасность сотрудников», в результате чего она не будет отображаться в списке полей клиентского приложения. Помните, что скрытие таблицы не обеспечивает ее безопасность. Пользователи по-прежнему смогут отправлять запросы на получение данных из таблицы «Безопасность сотрудников», если они знают, как это сделать. Чтобы обезопасить данные таблицы «Безопасность сотрудников» и запретить пользователям отправлять запросы на получение данных из нее, в одном из следующих заданий будет применен фильтр.

Скрытие таблицы «Сотрудники» от клиентских приложений

  • В конструкторе моделей в представлении диаграммы щелкните правой кнопкой мыши заголовок таблицы Employee и выберите команду Скрыть от клиентских средств.

Создание пользовательской роли «Сотрудники отдела продаж по территории»

На этом занятии будет создана новая пользовательская роль. Эта роль будет включать фильтр строк, определяющий, какие строки из таблицы «Территории продаж» видимы пользователям. После этого фильтр будет применен в направлении «один-ко-многим» ко всем остальным таблицам, связанным с территорией продаж. Будет также применен простой фильтр, обеспечивающий безопасность всей таблицы «Безопасность сотрудников» так, чтобы пользователи-члены роли не могли направлять к ней запросы.

ПримечаниеПримечание

Роль «Сотрудники отдела продаж по территории», создаваемая на этом занятии, ограничивает возможность членов, просматривающих данные продаж, территорией, к которой они относятся. Если добавить пользователя как члена в роль «Сотрудники отдела продаж по территории», который также является членом роли, созданной на занятии Занятие 12. Создание ролей, то получится сочетание разных разрешений. Когда пользователь является членом нескольких ролей, он обладает всеми разрешениями, определенными для каждой из них. Это означает, что пользователь будет иметь больше разрешений, определяемых сочетанием ролей.

Создание пользовательской роли «Сотрудники отдела продаж по территории»

  1. В среде SQL Server Data Tools в меню Модель выберите пункт Роли.

  2. В диалоговом окне Диспетчер ролей выберите Создать.

    В список будет добавлена новая роль с разрешением «Нет».

  3. Щелкните новую роль, а затем столбец Имя, после чего переименуйте роль в Сотрудники отдела продаж по территории.

  4. В столбце Разрешения щелкните раскрывающийся список и выберите разрешение Чтение.

  5. Щелкните вкладку Члены и выберите команду Добавить.

  6. В диалоговом окне Выбор пользователя или группы введите в поле Введите имя выбираемого объекта первое имя из выборки пользователей, которое было использовано при создании таблицы «Безопасность сотрудников». Щелкните Проверить имена, чтобы убедиться, что имя является действительным, и нажмите кнопку ОК.

    Повторите этот шаг, добавляя другие имена из выборки пользователей, которая была создана в момент создания таблицы «Безопасность сотрудников».

  7. Откройте вкладку Фильтры строк.

  8. Для таблицы Безопасность сотрудников введите следующую формулу в столбце DAX-фильтр.

    =FALSE()

    Завершив построение формулы, нажмите клавишу ВВОД.

    Эта формула указывает, что все столбцы решаются по логическому условию со значением false. Таким образом, член пользовательской роли «Сотрудники отдела продаж по территории» не сможет отправлять запросы на получение данных из таблицы «Безопасность сотрудников».

  9. Для таблицы Территория продаж введите следующую формулу.

    ='Территория продаж'[Идентификатор территории продаж]=LOOKUPVALUE('Безопасность сотрудников'[Идентификатор территории продаж], 'Безопасность сотрудников'[Идентификатор имени входа], USERNAME(), 'Безопасность сотрудников'[Идентификатор территории продаж], 'Территория продаж'[Идентификатор территории продаж])

    Завершив построение формулы, нажмите клавишу ВВОД.

    В этой формуле функция LOOKUPVALUE возвращает все значения для столбца «Безопасность сотрудников[Идентификатор территории продаж]», где «Безопасность сотрудников[Идентификатор имени входа]» не отличается от текущего имени входа пользователя Windows, а «Безопасность сотрудников[Идентификатор территории продаж]» — от «Территория продаж[Идентификатор территории продаж]».

    Набор идентификаторов территории продаж, возвращаемый функцией LOOKUPVALUE, используется для ограничения строк, отображаемых в таблице «Территория продаж». В результате будут отображены только те строки, для которых идентификатор территории продаж для строки входит в набор идентификаторов, возвращенных функцией LOOKUPVALUE.

  10. В диалоговом окне «Диспетчер ролей» нажмите кнопку ОК.

Тестирование пользовательской роли «Сотрудники отдела продаж по территории»

В этом задании для проверки пользовательской роли «Сотрудники отдела продаж по территории» будет использована функция анализа в Excel в среде SQL Server Data Tools. Будет указано одно из имен пользователей, добавленных в таблицу «Безопасность сотрудников» и в качестве члена роли. Это имя пользователя будет затем использовано как имя реального пользователя для соединения, установленного между Excel и моделью.

Тестирование пользовательской роли «Сотрудники отдела продаж по территории»

  1. В среде SQL Server Data Tools щелкните меню Модель и выберите пункт Анализ в Excel.

  2. В диалоговом окне Анализ в Excel в поле Укажите имя пользователя или роль для подключения к модели выберите вариант Другой пользователь Windows и нажмите кнопку Обзор.

  3. В диалоговом окне Выбор пользователя или группы введите имена пользователей, добавленных в таблицу «Сотрудник», в поле Введите имя выбираемого объекта и нажмите кнопку Проверить имена.

  4. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Выбор пользователя или группы, а затем кнопку ОК, чтобы закрыть диалоговое окно Анализ в Excel.

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

    Обратите внимание, что таблица «Безопасность сотрудников», не видна в списке полей сводной таблицы. Это происходит потому, что эта таблица была скрыта от клиентских средств в предыдущем задании.

  5. В списке Поле сводной таблицы в поле ∑ Интернет-продаж (меры) выберите меру Общие Интернет-продажи. Мера будет указана в поле Значения.

  6. В списке Поле сводной таблицы выберите столбец Идентификатор территории продаж из таблицы Территория продаж. Столбец будет введен в поля Метки строк.

    Обратите внимание, что цифры продаж появятся только для того региона, к которому относится имя пользователя. Если выбрать другой столбец, например «Город» из таблицы «География» в качестве поля «Метка строки», то будут отображены города только для той территории продаж, к которой относится пользователь.

    Этот пользователь не может просматривать или отправлять запросы для получения данных Интернет-продаж для других территорий, к которым он не относится, поскольку фильтр строк, определенный для таблицы «Территория продаж» в пользовательской роли «Сотрудники отдела продаж по территории», надежно защищает все данные, связанные с другими территориями продаж.

См. также

Справочник

USERNAME, функция (DAX)

Функция LOOKUPVALUE (DAX)

CUSTOMDATA, функция (DAX)