1

ADOMDを使用してAzure Analysisサービスに接続しようとしていて、サービスプリンシパルを使用して認証しようとしています。だから次のようにした:サービスプリンシパルを使用したAzure分析サービス接続が機能しない

  1. アプリをAADで作成する。
  2. Azure Analysisサービスに対するアプリケーション(サービスプリンシパル)の読み取り許可を与えました。

以下は、Azure Analysisサービスに接続するためのコードです。

  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:ユーザー、いずれかの「アプリ:XXXXXXXする@ XXXXXX」がありません'adventureworks'データベースにアクセスするか、データベースが存在しません。

追加情報::私はパーミッション(貢献してリーダー&も試してみました)ことを確認した

  1. は、Azureのポータルを通してAzureの分析サービスにサービスプリンシパルに与えられています。
  2. 私はサービスアカウント(username &パスワード)で同じコードを試してみました。
  3. 接続文字列から "Initial Catalog = adventureworks"を削除すると、接続は成功します。しかし、Analysis Servicesのアクセス許可がモデルに伝播されない理由はわかりません。

解像度:

愚かな私はこれを掲示した後、自分で解決しました。上記3のポイントは私に手がかりを与えました。ポータルを通じてAzure分析サービスへの許可を与えても、サービス主体(Azuire ADアプリケーション)のモデルには反映されません。

ステップ:

  1. オープンSQLサーバMgmt(仮想ディスクの管理)StudioのAzureの分析サービス。
  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のAzureの分析サービス。
  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でデータベースを開き、リーダーの役割にサービスの原則を追加することで解決しました。紺碧のポータルのサービスプリンシパルに許可を与えるだけでは機能しません。あなたの答えをありがとうth – Unnie

+0

@Unnie SQLにのみアクセスしたい場合は、データベースの役割が必要です。他のリソースが必要な場合は、 'owner'ロールが必要です。この助けを願っています。 –

+0

キューブを処理するには、明示的にアプリにアクセス権を与える必要があります。 –

関連する問題