1

ADOMD를 사용하여 Azure Analysis 서비스에 연결하고 서비스 사용자를 사용하여 인증하려고합니다. 그래서 다음과 같이했습니다 :Azure 분석 서비스 연결을 사용하여 서비스 사용자가 작동하지 않음

  1. AAD에 앱을 만듭니다.
  2. Azure Analysis 서비스에 대한 응용 프로그램 (서비스 사용자)의 읽기 권한을 부여했습니다.

아래 코드는 Azure Analysis 서비스에 연결하는 코드입니다. 하지 않습니다 'XXXXXXX의 @ xxxxxx가 응용 프로그램'

  var clientId = "******"; 
      var clientSecret = "*****"; 
      var domain = "****.onmicrosoft.com"; 
      var ssasUrl = "northeurope.asazure.windows.net"; 
      var token = await TokenHelper.GetAppOnlyAccessToken(domain, $"https://{ssasUrl}", clientId, clientSecret); 

      var connectionString = $"Provider=MSOLAP;Data Source=asazure://{ssasUrl}/{modelname};Initial Catalog= adventureworks;User ID=;Password={token};Persist Security Info=True;Impersonation Level=Impersonate"; 
      var ssasConnection = new AdomdConnection(connectionString); 
      ssasConnection.Open(); 
      var query = @"Evaluate TOPN(10,Customer,Customer[Customer Id],1)"; 
      var cmd = new AdomdCommand(query) 
      { 
       Connection = ssasConnection 
      }; 
      using (var reader = cmd.ExecuteXmlReader()) 
      { 
       string value = reader.ReadOuterXml(); 
       Console.WriteLine(value); 
      } 

나는 유효한 액세스 토큰을 얻을 수,하지만 연결을 열려고 할 때 오류를 다음 얻을 :

AdomdErrorResponseException 어느 사용자, 'adventureworks'데이터베이스에 대한 액세스 권한이 있거나 데이터베이스가 존재하지 않습니다.

추가 정보 : : I 권한 (기여와 리더 &도 시도) 것을 확인했다

  1. 은 푸른 포털을 통해 푸른 분석 서비스에 서비스 주체에 부여됩니다.
  2. 서비스 계정 (사용자 이름 & 암호)을 사용하여 동일한 코드를 시도했지만 작동합니다.
  3. 연결 문자열에서 "Initial Catalog = adventureworks"를 제거하면 연결이 성공합니다. 그러나 Analysis Services 사용 권한이 모델에 전파되지 않는 이유는 알 수 없습니다.

해상도 :

바보 난 그냥이 게시 한 후 혼자 해상도를 얻었다. 위의 3 번 지점은 나에게 단서를주었습니다. 포털을 통해 Azure 분석 서비스에 대한 권한을 부여하는 것은 서비스 원칙 (Azuire AD 앱)의 모델로 전파되지 않습니다.

단계 :

  1. 열기 SQL 서버 MGMT Studio의 푸른 분석 서비스를 제공합니다.
  2. 대상 모델에서 역할으로 이동하십시오.
  3. 권한이있는 필수 역할에 서비스 주체를 추가하십시오.

    앱 : [APPID] @ [tenantid]

예 : 앱 : 8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F- 서비스 주체 포맷 이하에서 첨가 72392615BB97

+0

를, 당신의 서비스 주체가 SQL에 액세스 할 수있는 권한이없는 것 같다. 데이터베이스 역할을 부여해야합니다. 다른 Azure 리소스에 액세스해야하는 경우 'Owner'또는 'Contributor'역할이 필요합니다. –

답변

2

어리석은 나는 그것을 게시 한 직후 나 혼자서 해결책을 얻었다. 위의 3 번 지점은 나에게 단서를주었습니다. 포털을 통해 Azure 분석 서비스에 대한 권한을 부여하는 것은 서비스 원칙 (Azure AD 앱)에 대한 모델로 전파되지 않습니다.

단계 :

  1. 열기 SQL 서버 MGMT Studio의 푸른 분석 서비스를 제공합니다.
  2. 대상 모델에서 역할으로 이동하십시오.
  3. 권한이있는 필수 역할에 서비스 주체를 추가하십시오.

    앱 : [APPID] @ [tenantid]

예 : 앱 : 8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F- 서비스 주체 포맷 이하에서 첨가 72392615BB97

내가 여기에 내 모든 경험을 블로그에 있습니다 : 오류 로그에 따르면 https://unnieayilliath.com/2017/11/12/connecting-to-azure-analysis-services-using-adomd/

+1

굉장한 친구. 이것은 발견의 나의 여행 중에 퍼즐의 마지막 조각이었다! https://stackoverflow.com/questions/48555021/use-automation-runas-service-principal-to-connect-to-azure-analysis-services-and/48576535?noredirect=1#comment84149886_48576535 –

+1

@ Nick.McDermaid Glad it 도와 줬어! – Unnie

0

official document을 참조하십시오.

서비스 사용자에게 Owner 또는 Contributor 역할이 필요합니다.

Azure Portal에서 할 수 있습니다. <your subscription>--><Access Control>--><Add>.이것에 대해

enter image description here

자세한 내용은이 official document를 참조하십시오.

+0

어쩌면 내가 직접 내 대답을 (섹션으로 질문에 업데이트 한) 게시해야합니다. SSMS에서 데이터베이스를 열고 리더 역할에 서비스 원칙을 추가하여 해결했습니다. azure 포털에서 서비스 주체에 대한 사용 권한 만 부여하면 작동하지 않습니다. 당신의 대답을 주셔서 감사합니다 – Unnie

+0

@ Unnie 오직 SQL에 액세스하려는 경우, 당신은 데이터베이스 역할 만 필요합니다. 다른 리소스를 원하면'owner' 역할이 필요합니다. 희망이 도움이됩니다. –

+0

큐브를 처리하려면 반드시 앱에 명시 적으로 액세스 권한을 부여해야합니다. –