Search code examples
c#ssasrolesssas-tabularazure-analysis-services

Roles come back as null from Azure Analysis Services database when connecting using AMO in C#


I have a tabular Azure Analysis Services database with compatibility level 1400. When I connect and try to retrieve the roles using the AMO package the Roles property is always null, the same for the DatabasePermissions property that is mentioned in this answer.

I am using the Tabular.Server and Tabular.Database objects as recommended in the official docs.

I have based my code off this answer and I am connecting using an administrator account.

Proof that roles are setup on the DB that I am accessing:

enter image description here

Inspecting the database object:

enter image description here

Interestingly enough I have two other databases inside the same Azure Analysis Services server and they have the same issue.

My code:

using (Server server = new Server())
        {
            string serverDomain = "australiasoutheast.asazure.windows.net";
            string serverName = "redacteddevpilotv1";
            string databaseModel = "PilotV1";
            string serverAddress = $"asazure://{serverDomain}/{serverName}";
            //string token = await GetAccessToken($"https://{serverDomain}");
            //string connectionString = $"Provider=MSOLAP;Data Source={serverAddress};Initial Catalog={databaseModel};User ID=;Password={token};Persist Security Info=True;Impersonation Level=Impersonate";
            string connectionString = $"Provider=MSOLAP;Data Source={serverAddress};Initial Catalog={databaseModel};User ID=redacted;Password=redacted;Persist Security Info=True;Impersonation Level=Impersonate";

            var t = server.SupportedCompatibilityLevels;
            var x = server.Roles;

            server.Connect(connectionString);

            t = server.SupportedCompatibilityLevels;
            x = server.Roles;

            Database d = server.Databases.FindByName(databaseModel);
        }

The documentation goes into how to add roles not how to retrieve them...


Solution

  • It turns out that instead of accessing roles through database.Roles I need to access them via database.Model.Roles. I'm not sure why this is or if it is documented anywhere but I was put onto this fact by another question.

    After doing this I now have access to the ModelRole objects that I want.