CData Office 365 ドライバーを使うと、Microsoft Graph API を通じて OneDrive や SharePoint のファイル情報に SQL でアクセスできます。自分のファイルだけでなく、テナント内の他ユーザーのファイル情報を取得したい場面は管理業務や監査で多く発生します。本記事では、他ユーザーのファイル情報を取得するために必要な権限設定と SQL クエリの手順を解説します。
背景:委任権限とアプリケーション権限の違い
他ユーザーのファイルにアクセスするためには、Microsoft Graph における 権限モデルの理解が不可欠です。
Microsoft Graph の認証には 2 種類の権限モデルがあります。
委任権限(Delegated Permission)は、ログイン中のユーザーの代わりに操作します。ユーザー自身がアクセスできるファイルにのみアクセス可能なため、他ユーザーのファイルへのアクセスには管理者が事前に OneDrive 共有設定を行う必要があります。
アプリケーション権限(Application Permission)は、ユーザーなしにアプリ自体として動作します。Files.Read.All や Sites.Read.All などのアプリケーション権限を付与することで、テナント内の全ユーザーのファイルにアクセスできます。他ユーザーのファイルを一括取得する場合は、アプリケーション権限を使った Client Credentials フロー(クライアント資格情報フロー)が推奨されます。
設定手順
1. Azure AD にアプリを登録する
まず、Microsoft Entra 管理センター(旧 Azure Active Directory 管理センター)でアプリを登録します。
Microsoft Entra 管理センター にグローバル管理者でサインインします
左メニューから「アプリの登録」→「新規登録」をクリックします
アプリ名(例: CData-Office365-Driver )を入力します
サポートされているアカウントの種類として「複数のEntra ID テナント」を選択します
リダイレクトURIを設定します(ドライバーのデフォルト値はhttp://localhost:33333です)
最後に「登録」をクリックします

2. クライアントシークレットを作成する
登録したアプリの「証明書とシークレット」を開きます
「新しいクライアント シークレット」をクリックし、有効期限を設定して追加します
作成直後に表示されるシークレット値をコピーして安全な場所に保存します

3. アプリケーション権限を付与する
「API のアクセス許可」→「アクセス許可の追加」→「Microsoft Graph」を選択します
「アプリケーションの許可」を選択し、以下の権限を追加します
権限名 | 用途 |
|---|
Files.Read.All
| 全ユーザーのファイル情報の読み取り |
Files.ReadWrite.All
| 書き込みも必要な場合 |
User.Read.All
| ユーザー一覧の取得(UserId を調べるため) |
「管理者の同意を与える」ボタンをクリックして、権限を有効化します

4. CData ドライバーの接続文字列を設定する
アプリケーション権限(Client Credentials フロー)で接続するには、以下の接続プロパティを設定します。
OAuthGrantType=AzureServicePrincipal
InitiateOAuth=GETANDREFRESH
OAuthClientId=[Azure AD のアプリケーション ID]
OAuthClientSecret=[手順2で作成したシークレット値]
Tenant=[テナント ID]
JDBC接続文字列の例:
jdbc:office365:OAuthGrantType=AzureServicePrincipal;InitiateOAuth=GETANDREFRESH;OAuthClientId=[Azure AD のアプリケーション ID];OAuthClientSecret=[手順2で作成したシークレット値];Tenant=[テナントID]
上の接続文字列でドライバーからの接続を確認します。接続が完了しましたら、実際にファイルを取得するクエリを発行します。
5. ユーザー ID を調べる
他ユーザーのファイルを取得するには、対象ユーザーの UserId(オブジェクト ID またはメールアドレス)が必要です。まずUsers テーブルでユーザー一覧を確認します。
-- ユーザー一覧を取得して UserId を確認する
SELECT Id, DisplayName, Mail
FROM Users
WHERE DisplayName LIKE 'John%'
または全ユーザーを一覧表示:
SELECT Id, DisplayName, Mail
FROM Users
LIMIT 50
6. 他ユーザーのファイル情報を取得する
UserId が確認できたら、Files テーブルにUserId 条件を指定してクエリを実行します。
-- 特定ユーザーのファイル一覧を取得する
SELECT Name, Size, LastModifiedDateTime, WebUrl
FROM Files
WHERE UserId = '616391f0-32d8-4127-8f25-aa55771d6617'
メールアドレスでも指定できます:
SELECT Name, Size, LastModifiedDateTime, WebUrl
FROM Files
WHERE UserId = '[email protected]'
7. 複数ユーザーのファイルを IN 句で一括取得する
単一ユーザーへの絞り込みだけでなく、複数ユーザーのファイルを一度のクエリで取得したい場面は多くあります。部門単位の棚卸し・特定グループのファイル監査・退職者ファイルの一括確認などが典型例です。
CData Office 365 ドライバーではFiles テーブルのUserId に対してIN 句を使用できます。
メールアドレスで複数ユーザーを指定する
SELECT Name, Size, LastModifiedDateTime, WebUrl, UserId
FROM Files
WHERE UserId IN (
'[email protected]',
'[email protected]'
)
ORDER BY UserId, LastModifiedDateTime DESC'
オブジェクト ID(UUID)で指定する
SELECT Name, Size, LastModifiedDateTime, UserId
FROM Files
WHERE UserId IN (
'616391f0-32d8-4127-8f25-aa55771d6617',
'54f34750-0d34-47c9-9949-9fac4791cddb',
'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
)
ファイル種別や更新日時と組み合わせる
IN 句は他のフィルター条件と自由に組み合わせられます。
-- 直近30日以内に更新されたファイルを対象ユーザー分まとめて取得
SELECT UserId, Name, Size, LastModifiedDateTime
FROM Files
WHERE UserId IN (
'[email protected]',
'[email protected]',
'[email protected]'
)
AND LastModifiedDateTime >= '2026-05-01T00:00:00Z'
ORDER BY LastModifiedDateTime DESC
IN 句と集計関数を組み合わせると、ユーザーごとの利用状況をレポート形式で確認できます。
IN 句使用時の注意点
UserId IN (...) を指定すると、ドライバーはユーザーごとに個別の Graph API リクエストを発行して結果をまとめて返します。そのため、指定ユーザー数が増えるほど処理時間が長くなり、多すぎるとスロットリング(429 エラー)が発生する場合があります。一度に指定するユーザー数は 10〜20 件程度を目安にしてください。それ以上の大量取得が必要な場合は、CData Sync などの ETL ツールでバッチ処理する構成が適しています。
まとめ
CData Office 365 ドライバーで他ユーザーのファイル情報を取得するには、Azure AD でアプリケーション権限(Files.Read.All)を付与し、Client Credentials フローで接続するのが最も確実な方法です。FilesテーブルのUserId 列に対象ユーザーの ID またはメールアドレスを指定するだけで、SQL クエリとして直感的にファイル情報を取得できます。さらにIN 句を使うことで、複数ユーザーのファイルを1つのクエリで横断検索・集計することも可能です。部門単位の棚卸しや退職者ファイルの確認など、管理者向けのユースケースで特に威力を発揮します。ユーザー数が多い場合はバッチ分割やリトライ設計を意識しつつ活用してください。