Azure SQLと Microsoft SQL Server Microsoft Graph コネクタ

Microsoft SQL Server または Azure SQL Microsoft Graph コネクタを使用すると、organizationは、オンプレミスのSQL Server データベース、またはクラウド内のAzure SQL インスタンスでホストされているデータベースからデータを検出してインデックスを作成できます。 コネクタは、Microsoft Search とMicrosoft 365 Copilotで指定されたコンテンツにインデックスを付けます。 ソース データを使用してインデックスを最新の状態に保つために、定期的な完全クロールと増分クロールがサポートされます。 これらの SQL コネクタを使用すると、特定のユーザーの検索結果へのアクセスを制限することもできます。

この記事は、Microsoft 365 管理者、またはAzure SQLまたは Microsoft SQL Server Microsoft Graph コネクタを構成、実行、監視するユーザーを対象とします。

機能

  • SQL クエリを使用して、MS SQL サーバーまたはAzure SQL データベースからレコードにインデックスを作成します。
  • SQL クエリで追加されたユーザーまたはグループの一覧を使用して、すべてのレコードのアクセス許可を指定します。
  • エンド ユーザーが Copilot のインデックス付きレコードに関連する質問を行えるようにします。
  • Copilot のセマンティック検索を使用して、ユーザーがキーワード、個人の好み、ソーシャル接続に基づいて関連するコンテンツを検索できるようにします。

制限事項

  • Microsoft SQL Server コネクタ: オンプレミス データベースは、バージョン 2008 以降SQL Server実行する必要があります。
  • Azure SQL コネクタ: Microsoft 365 サブスクリプションと Azure サブスクリプション (Azure SQL データベースをホスト) は、同じMicrosoft Entra ID内にある必要があります。 テナント間データ フローはサポートされていません。
  • 高いクロール速度とパフォーマンスをサポートするために、コネクタは OLTP (オンライン トランザクション処理) ワークロードのみをサポートするように構築されています。 提供された SQL クエリを 40 秒のタイムアウトで実行せず、サポートされていない OLAP (オンライン分析処理) ワークロード。
  • ACL は、ユーザー プリンシパル名 (UPN)、Microsoft Entra ID、または Active Directory セキュリティを使用してのみサポートされます。
  • データベース列内のリッチ コンテンツのインデックス作成はサポートされていません。 このようなコンテンツの例としては、データベース列内にリンクとして存在する HTML、JSON、XML、BLOB、ドキュメント解析などがあります。

前提条件

  • organizationの Microsoft 365 テナントの検索管理者である必要があります。
  • Microsoft Graph コネクタ エージェントをインストールする (MS SQL コネクタにのみ適用): Microsoft SQL Serverにアクセスするには、コネクタ エージェントをインストールして構成する必要があります。 詳細については、「 Microsoft Graph コネクタ エージェントのインストール 」を参照してください。
  • サービス アカウント: SQL データベースに接続し、Microsoft Graph Connector がレコードを定期的に更新できるようにするには、サービス アカウントに読み取りアクセス許可が付与されたサービス アカウントが必要です。

注:

Microsoft SQL Server コネクタの構成中にWindows 認証を使用する場合、サインインしようとしているユーザーは、コネクタ エージェントがインストールされているコンピューターに対する対話型ログイン権限を持っている必要があります。 詳細については、「 ログイン ポリシーの管理」を参照してください。

セットアップの概要

1. 表示名

表示名は、Copilot の各引用文献を識別するために使用され、ユーザーが関連付けられているファイルまたは項目を簡単に認識するのに役立ちます。 表示名は、信頼されたコンテンツも示します。 表示名は、 コンテンツ ソース フィルターとしても使用されます。 このフィールドには既定値が存在しますが、organizationのユーザーが認識する名前にカスタマイズできます。

2. SQL サーバー

SQL データに接続するには、SQL サーバーのアドレスとデータベース名が必要です。

3. 認証の種類

Azure SQL コネクタでは、データベースMicrosoft Entra ID接続するための OpenID Connect (OIDC) 認証のみがサポートされます。

アプリを登録する (Microsoft Graph コネクタ専用Azure SQL)

Azure SQL コネクタの場合は、Microsoft Search アプリとMicrosoft 365 Copilotがインデックス作成用のデータにアクセスできるようにするには、Microsoft Entra IDにアプリを登録する必要があります。 アプリの登録の詳細については、アプリの登録方法に関する Microsoft Graph ドキュメント 参照してください。

アプリの登録を完了し、アプリ名、アプリケーション (クライアント) ID、テナント ID をメモしたら、 新しいクライアント シークレットを生成する必要があります。 クライアントは 1 回だけ表示されます。 クライアント シークレットを安全に保存 & 注意してください。 Microsoft Search と Microsoft 365 Copilot で新しい接続を構成するときに、クライアント ID とクライアント シークレットを使用します。

登録したアプリを Azure SQL Database に追加するには、次の操作を行う必要があります。

  1. Azure SQL DB にログインします。
  2. 新しいクエリ ウィンドウを開きます。
  3. "CREATE USER [アプリ名] FROM EXTERNAL PROVIDER' コマンドを実行して、新しいユーザーを作成します。
  4. 'db_datareader'、[アプリ名]'、または 'ALTER ROLE db_datareader ADD MEMBER [app name]' コマンド 'exec sp_addrolememberを実行して、ユーザーをロールに追加します。

Microsoft Entra IDに登録されているアプリへのアクセスを取り消す方法の詳細については、「登録済みアプリの削除」を参照してください。

ファイアウォール設定 (Microsoft Graph コネクタ専用Azure SQL)

セキュリティを強化するために、Azure SQL サーバーまたはデータベースの IP ファイアウォール規則を構成できます。 IP ファイアウォール規則の設定の詳細については、IP ファイアウォール 規則に関するドキュメントを参照してください。 ファイアウォール設定に次のクライアント IP 範囲を追加します。

Region Microsoft 365 Enterprise Microsoft 365 Government
NAM 52.250.92.252/30, 52.224.250.216/30 52.245.230.216/30, 20.141.117.64/30
EUR 20.54.41.208/30, 51.105.159.88/30 該当なし
APC 52.139.188.212/30, 20.43.146.44/30 該当なし

4. 限定対象ユーザーにロールアウトする

この接続を制限付きユーザー ベースにデプロイします。ロールアウトを広範な対象ユーザーに展開する前に、Copilot やその他の Search サーフェスで検証する必要がある場合は、この接続をデプロイします。 制限付きロールアウトの詳細については、 こちらをクリックしてください

コンテンツ

データベース コンテンツを検索するには、コネクタを構成するときに SQL クエリを指定する必要があります。 これらの SQL クエリでは、インデックスを作成するすべてのデータベース列に名前を付ける必要があります (ソース プロパティ)。 これには、すべての列を取得するために実行する必要がある SQL 結合が含まれます。 検索結果へのアクセスを制限するには、コネクタを構成するときに SQL クエリ内でAccess Control Lists (ACL) を指定する必要があります。

1. フル クロール (必須)

a. データ列の選択 (必須) と ACL 列 (省略可能)

[クリックして展開]フル クロール クエリのデータ列の選択。

この手順では、データベースのフル クロールを実行する SQL クエリを構成します。 フル クロールでは、Microsoft Copilotまたは検索で表示する必要があるすべての列またはプロパティが選択されます。 ACL 列を指定して、検索結果へのアクセスを特定のユーザーまたはグループに制限することもできます。

ヒント

必要なすべての列を取得するには、複数のテーブルを結合できます。

プロパティの例を含む OrderTable と AclTable を示すスクリプト。

この例では、検索のデータを保持する 5 つのデータ列 (OrderId、OrderTitle、OrderDesc、CreatedDateTime、IsDeleted) を示します。 データの各行の表示アクセス許可を設定するには、必要に応じて、次の ACL 列 (AllowedUsers、AllowedGroups、DeniedUsers、DeniedGroups) を選択できます。 これらのすべてのデータ列には、 クエリ検索取得、または 絞り込みオプションもあります。

次のクエリ例に示すように、データ列を選択します。 SELECT orderId, orderTitle, orderDesc, allowedUsers, allowedGroups, deniedUsers, deniedGroups, createdDateTime, isDeleted

SQL コネクタでは、SELECT 句で英数字以外の文字を持つ列名は許可されません。 別名を使用して列名から英数字以外の文字を削除します。 例 - SELECT column_name AS columnName

検索結果へのアクセスを管理するには、クエリで 1 つ以上の ACL 列を指定します。 SQL コネクタを使用すると、レコード レベルごとにアクセスを制御できます。 テーブル内のすべてのレコードに対して同じアクセス制御を選択できます。 ACL 情報が別のテーブルに格納されている場合は、クエリでそれらのテーブルとの結合を行う必要がある場合があります。

上記のクエリで ACL 列を使用する方法を次に示します。 次の一覧では、4 つの アクセス制御メカニズムについて説明します

  • AllowedUsers: この列は、検索結果にアクセスできるユーザー ID の一覧を指定します。 次の例では、ユーザーの一覧: john@contoso.com、 keith@contoso.com、 lisa@contoso.com は、OrderId = 12 のレコードにのみアクセスできます。
  • AllowedGroups: この列は、検索結果にアクセスできるユーザーのグループを指定します。 次の例では、グループ sales-team@contoso.com は OrderId = 12 のレコードにのみアクセスできます。
  • DeniedUsers: この列は、検索結果にアクセス できない ユーザーの一覧を指定します。 次の例では、ユーザー john@contoso.com と keith@contoso.com は OrderId = 13 のレコードにアクセスできませんが、他のすべてのユーザーはこのレコードにアクセスできます。
  • DeniedGroups: この列は、検索結果にアクセス できない ユーザーのグループを指定します。 次の例では、グループ engg-team@contoso.com と pm-team@contoso.com は OrderId = 15 のレコードにアクセスできませんが、他のすべてのユーザーはこのレコードにアクセスできます。

プロパティの例を含む OrderTable と AclTable を示すサンプル データ。

b. サポートされているデータ型

[クリックして展開]サポートされているデータ型の一覧。

次の表は、MS SQL および Azure SQL コネクタでサポートされている SQL データ型をまとめたものです。 テーブルには、サポートされている SQL データ型のインデックス作成データ型も要約されています。 インデックス作成でサポートされている Microsoft Graph コネクタのデータ型の詳細については、 プロパティ リソースの種類に関するドキュメントを参照してください。

カテゴリ ソース データ型 データ型のインデックス作成
日時 date
日付型
datetime2
smalldatetime
日付型
正確な数値 bigint
int
smallint
tinyint
int64
正確な数値 ビット ブール値
近似数値 浮動小数点数
real
double
文字の文字列 焦がす
varchar
テキスト
string
Unicode 文字列 nchar
nvarchar
ntext
string
String collection 焦がす
varchar
テキスト
stringcollection*
その他のデータ型 uniqueidentifier string

*StringCollection として列のインデックスを作成するには、文字列を文字列コレクション型にキャストする必要があります。 これを行うには、フル クロール設定で [データ型の編集] リンクをクリックし、文字列を分割する区切り記号を指定して、StringCollection として適切な列を選択します。

現在直接サポートされていない他のデータ型の場合、列はサポートされているデータ型に明示的にキャストする必要があります。

c. 透かし (必須)

[クリックして展開]フル クロール クエリでの透かし列の指定

データベースの過負荷を防ぐために、コネクタはフル クロール透かし列を使用してフル クロール クエリをバッチ処理して再開します。 透かし列の値を使用して、後続の各バッチがフェッチされ、最後のチェックポイントからクエリが再開されます。 基本的に、このメカニズムはフル クロールのデータ更新を制御します。

次の例に示すように、透かしのクエリ スニペットを作成します。

  • WHERE (CreatedDateTime > @watermark). 予約されたキーワード (keyword) @watermarkで透かしの列名を引用します。 透かし列の並べ替え順序が昇順の場合は、 >を使用します。それ以外の場合は、 <を使用します。
  • ORDER BY CreatedDateTime ASC. 基準値列を昇順または降順で並べ替えます。

次の図に示す構成では、 CreatedDateTime が選択された透かし列です。 行の最初のバッチをフェッチするには、透かし列のデータ型を指定します。 この場合、データ型は DateTime

透かし列の構成。

最初のクエリでは、"CreatedDateTime > 1753 年 1 月 1 日 00:00:00" (DateTime データ型の最小値) を使用して、最初の N 行数をフェッチします。 最初のバッチがフェッチされると、行が昇順で並べ替えられた場合、バッチで返される CreatedDateTime の最大値がチェックポイントとして保存されます。 たとえば、2019 年 3 月 1 日 03:00:00 です。 次に、クエリで "CreatedDateTime > March 1, 2019 03:00:00" を使用して、N 行の次のバッチがフェッチされます。

2. プロパティの管理

SQL コネクタは、フル クロール SQL クエリで指定されたすべての列をインジェストのソース プロパティとして取得します。 この手順では、コンテンツの検索スキーマを定義できます。 これには、選択したソース プロパティの検索、取得、クエリ、絞り込みなどの検索注釈を定義する必要があります。 これには、検索の関連性を高めるためのセマンティック ラベルとエイリアスの割り当ても含まれます。 検索スキーマの詳細については、「 プロパティの管理」のガイドラインに関するドキュメントを参照してください。

3. 増分クロール (省略可能)

a. 増分同期クエリ

この省略可能な手順では、データベースの増分クロールを実行する SQL クエリを指定します。 このクエリでは、SQL コネクタによって、前回の増分クロール以降のデータへの変更が決定されます。 フル クロールと同様に、[ クエリ]、[ 検索]、[ 取得 ]、または [絞り込み] オプションを選択するすべての列を選択します。 フル クロール クエリで指定したのと同じ ACL 列のセットを指定します。

次の図のコンポーネントは、フル クロール コンポーネントに似ていますが、1 つの例外があります。 この場合、選択した透かし列は "ModifiedDateTime" です。 フル クロールの手順を確認して、増分クロール クエリを記述する方法を確認し、例として次の画像を参照してください。

OrderTable、AclTable、および使用できるプロパティの例を示す増分クロール スクリプト。

b. 論理的な削除手順 (省略可能)

SQL レコード システムでは、論理的な削除は、データベースからレコードを物理的に削除するのではなく、特定のフラグまたは列を設定して "削除済み" としてマークする手法です。 これにより、レコードをデータベースに残すことができますが、ほとんどの操作から論理的に除外されます。 増分クロール中にデータベース内の論理的に削除された行を削除するには、行が削除されることを示す論理的な削除列名と値を指定します。

論理的な削除設定:

ユーザー

[ このデータ ソースへのアクセス権を持つユーザーのみ ] を使用して、フル クロール クエリで選択されているユーザーまたはグループへのアクセスを制限することも、上書きしてコンテンツを Everyone に表示することもできます。

1. アクセス許可情報を含む列をマップする

アクセス制御メカニズムを指定するさまざまなアクセス制御 (ACL) 列を選択します。 フル クロール SQL クエリで指定した列名を選択します。 "拒否" は"許可" アクセス許可よりも優先されることに注意してください。

ACL の各列は、複数値の列である必要があります。 これらの複数の ID 値は、セミコロン (;)、コンマ (、) などの区切り記号で区切ることができます。 値区切り記号フィールドでこの 区切り記号 を指定する必要があります。

ACL として使用するには、次の ID の種類がサポートされています。

  • ユーザー プリンシパル名 (UPN): ユーザー プリンシパル名 (UPN) は、電子メール アドレス形式のシステム ユーザーの名前です。 UPN (例: john.doe@domain.com) は、ユーザー名 (ログイン名)、区切り記号 (@ 記号)、ドメイン名 (UPN サフィックス) で構成されます。
  • Microsoft Entra ID: Microsoft Entra IDでは、すべてのユーザーまたはグループに'e0d3ad3d-0000-1111-2222-3c5f5c52ab9b' のようなオブジェクト ID があります。
  • Active Directory (AD) セキュリティ ID: オンプレミスの AD セットアップでは、すべてのユーザーとグループに、'S-1-5-21-3878594291-215959936-132693609-65242'のような不変の一意のセキュリティ識別子があります。

アクセス制御リストを構成するための検索アクセス許可の設定。

同期

更新間隔によって、データ ソースと Graph コネクタ インデックスの間でデータが同期される頻度が決まります。

ここに存在するスケジュール オプションに基づいて、フル クロールと増分クロールを構成できます。 既定では、増分クロール (構成されている場合) は 15 分ごとに設定され、フル クロールは毎日に設定されます。 必要に応じて、データ更新のニーズに合わせてこれらのスケジュールを調整できます。

この時点で、Azure SQLまたは MS SQL の接続を作成する準備ができました。 [作成] ボタンをクリックすると、データベースから接続とインデックス データを発行できます。

トラブルシューティング

接続を公開したら、管理センターの [データ ソース] タブの状態を確認できます。 更新と削除を行う方法については、「接続を監視する」をご覧ください。 よく見られる問題のトラブルシューティング手順 については、こちらを参照してください

問題がある場合、またはフィードバックを提供する場合は、Microsoft Graph にお問い合わせください |サポート