SQL Server Analysis Services 2008 Безопасность динамических измерений с использованием выражения MDX - PullRequest
1 голос
/ 07 августа 2009

Некоторые таблицы размеров на моем складе:

DML
Site
    Id      bigint
    Name    nvarchar(256)
    Primary key (Id)

DATA
SiteId    Name
2         Site 2
3         Site A

DML
UserSite
    Username    nvarchar(256)
    SiteId      bigint
    Primary key (Username, SiteId)
    Foreign key (SiteId) referrences Site(Id)

DATA
Username    SiteId
EMSUser1    2
EMSUser1    3
EMSUser2    3

Мой проект SSAS: Я использовал эти две таблицы измерений в одном измерении в проекте BIDS, созданном с помощью мастера измерений. Имена пользователей относятся к двум локальным учетным записям пользователей Windows на сервере SSAS, они являются членами локальных окон. группа ReportBrowsers. Я создал роль для этой группы в BIDS и добавил выражение MDX на вкладку «Данные измерения» для этого измерения в поле AllowedSet для атрибута имени пользователя:

STRTOMEMBER("[UserSiteSite].[Username].["+Trim(Mid( UserName, InStr(1, UserName, "\")+ 1,128))+"]")

Это измерение используется в кубе, который все обрабатывается и развертывается. Затем у меня есть отчет SSRS на основе этого куба.

Мое намерение: То, что я пытаюсь сделать, это взять вошедшего в систему пользователя, в настоящее время просматривающего SSRS, и удалить часть " \" возвращаемой строки. эффективно фильтровать результаты только по тем сайтам, для которых у имени пользователя есть запись.

Так что для EMSUser1 я должен видеть записи для обоих сайтов, но, по-видимому, он разрешает только первый («Сайт 2» с идентификатором 2) Нет никаких признаков "сайта А", хотя в таблице фактов существуют записи для этого сайта.

Я пробирался через выпущенные Analysis Services 2008, пошаговую книгу, блоги и т. Д. Я просто не могу ухватиться за внутреннюю работу, чтобы достичь своей цели.

Что я делаю не так?

1 Ответ

0 голосов
/ 24 августа 2009

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

Есть много способов решить этот сценарий. Я чувствую, что все еще может быть лучше для меня, но у меня есть кое-что, что по крайней мере работает. По сути, создайте отдельную библиотеку классов со статическим классом и функцией, которая устанавливает свое собственное соединение с базой данных и выбирает разрешенный набор. Если вы ссылаетесь на Microsoft.AnalysisServices и пространства имен Microsoft.AnalysisServices.AdomdServer, в которых можно вернуть объект «Set». Затем вы можете вызвать эту функцию на вкладке продвижения данных измерений Ролевых объектов:

MyAssembly.MyMethod(UserName)
...