The Power BI Analysis Services Connector can be used to connect from the Power BI service to your on premises tabular Analysis Services models.
In this blogpost I will look into the security and authentication possibilities that the SSAS Connector offers. Dynamic row-level security based on the Power BI user name to an on premises SSAS Tabular model is possible, I will show how you can set this up and how it works in the background.
If you want to know how to install and configure the SSAS Connector follow this excellent support guide.
The SSAS Connector has some similarities with the BI Semantic Model Connection that’s available for SharePoint. This connection can connect either with Kerberos or by using the EffectiveUserName property, which matches the SSAS Connector:
– A connection to a tabular model is made with stored credentials that require administrator permissions on the SSAS server.
– The EffectiveUserName parameter is send to SSAS to impersonate the current user. Only SSAS administrators have permission to connect using EffectiveUserName.
To investigate exactly how the connector works I have created a tabular model with a very simple underlying database model. The Sales table will be secured based on dynamic row-level security on the content of the EffectiveUserName column in the Department table.
The tabular model contains the dataset shown in the Excel pivot below. In an on premises situation my EffectiveUserName would be MACAW\jorgk, but because I login to Power BI with jorgk[at]macaw.nl I have created entries for both. Let’s see which one will be used later on.
I have created a SSAS Security Role with read permissions on my Active Directory account:
Row-level security has been set on the EffectiveUserName column of the Department table:
The SSAS Connector was installed on the server by my colleague Dave, who has administrator permissions on the SSAS Server (inherited from the local Administrators group). For purpose of the demo we made sure my domain account was not in the local admin group and not in the SSAS Server admin group. Dave’s credentials will be the stored credentials that are used to connect to the tabular model from the SSAS Connector, passing the EffectiveUserName property just like a BISM connection is able to do as I explained before.
Now I logged in to Power BI, created a report and the security is working, my report is filtered and shows only my data:
During the creation of my report Dave ran a Profiler trace to see what’s happening in the background. As we expected my connection came in under the account of Dave (blue) but with my account as EffectiveUserName (red):
It’s interesting to see my EffectiveUserName is JorgK[at]macaw.nl but the Power BI report I’ve created shows the data of MACAW\jorgk! Why didn’t it show the data of the row that equals exactly to my EffectiveUsername JorgK[at]macaw.nl? Well that’s because SSAS does not authorize the user based on the textual value of the EffectiveUserName property. Instead it calls to AD to check if the Power BI username (based on the mail address) exists in AD, if this is the case the AD Account is returned and the user will be authorized with it.
To wrap up this entire process I’ve created the following diagram:
- From the Power BI tenant I connect to the SSAS Connector using my Power BI Account.
- The SSAS Connector connects to the tabular model using the stored credentials, in this case of my colleague Dave who has administrator permissions on the model and therefore the permissions to pass on my Power BI account as EffectiveUserName.
- The EffectiveUserName is checked in Active Directory. This will only be possible if DirSync has been set up, otherwise my Power BI account that comes from Windows Azure Active Directory will not be mapped to the on premises Active Directory.
- After Active Directory authorizes me, my on premises AD Account is sent to the tabular model.
- Row-level security is applied as configured in the SSAS Role.
Next thing to do was of course to share the Power BI report in a dashboard to another colleague. As a test I shared it with my colleague Martijn (blue) who did not have any permissions on the tabular model at al. Unfortunately it seems the credentials of the user who shares the dashboard are stored in that dashboard/report and will be used to make the connection to the underlying SSAS data source. Martijn’s report was identical to mine and the SQL Profiler showed us that indeed the connection was again made with the admin account of Dave, and my account passed in the EffectiveUserName (red).
Conclusion
It’s great to see we can finally connect to on premises models from Power BI using row-level security, which was not possible with the Data Management Gateway. This makes a hybrid Cloud/On Premises architecture a feasible option to implement. Unfortunately we are not there yet because it isn’t possible to impersonate a user after sharing a dashboard which is clearly not the functionality that’s desired. Let’s hope Microsoft will fix this in the coming months! Until then, be sure to advice your customers about this sharing security issue.
Hi Jorg
i didn’t success with this
in power bi site the role not working
only in power bi desktop
when i publish it the filter gone
when i create live connection from power bi site to tabular
it’s the same
even that i saw the effectiveUserName i need in the profiler
but no filter in the report
LikeLike
Hi,
I have set up an on-premises Tabular model using Roles to filter data by rows. When logging on locally and using Excel this works great and filters as intended. Then I use the Power BI Analysis Services Connector as a service bus to access my model in the Power BI App. When I log on with the same user account as the Excel scenario my filter does not work and all rows are returned. The user has access to the entire model, not just the specified rows.
I am using Active Directory for user authentication and dirsynch between Azure AD and on-premises AD.
The user I am testing with is not admin.
I have tried to look at the connector settings, but it’s fairly simple and I can’t see what I have done wrong. The connector uses a service account with read and processing user rights.
Why doesn’t Power BI App use the filtering from my tabular model?
LikeLike
Hi Espen do you have resolves your issue? I have the same, regards
LikeLike