こんばんは。室長こと吉島良平(Microsoft MVP for Business Applications | Microsoft Regional Director)です。
6月に書いた「監査対応はなくなる?|取引と責任を繋ぐAIエージェントの世界」には、予想以上の反響がありました。AIが企業間取引を代行する未来において、誰が・何を・いつ判断したかをどう記録するか—そのテーマへの関心の高さとともに、「ではD365(ERP・CRM)では今、何が標準でログとして残り、何が残らないのか、具体的に教えてほしい」という声をいただきました。この記事は、そのリクエストへの回答です。25年間書き続けてきたDノート(現在84冊)からとても大切なネタを本日・明日とお届けします。
「監査があります」—プロジェクトの終盤か、本番稼働後しばらくして、この言葉が飛んでくることがあります。内部監査の場合もあれば、外部の規制当局が絡む場合もある。そしてそのとき必ず問われるのが、「このシステムで誰が何をいつ操作したか、記録はありますか?」という問いです。
Dynamics 365は、FO(Finance & Operations apps)・BC(Business Central)・CRM(Customer Engagement apps / Dataverse)の3系統で、それぞれ異なる監査ログの仕組みを持っています。「Microsoftだから同じはず」という思い込みが、この領域では特に危険です。そして「ログを残す」と同時に重要なのが、「そもそもデータを持ち出せないようにする」という事前の設計です。顧客マスタや仕入先マスタはExcelにダウンロードできる—この「当たり前」が、実は権限設計で制御可能であることを知らずに運用しているケースが少なくありません。しかしながら、結構難易度が高いので(時間的な制約、投資対効果等)、完璧に対応しようとするとコスト(工賃・ユーザーライセンス・従量課金ライセンス)と時間がかかります。非機能要件定義で、この内容をプロジェクト範囲に含むのか、それとも次フェーズにて再考するのか、それとも対応しない事にするのか。その判断はとても重要で、実は簡単ではありません。
この記事では、3製品それぞれで「標準でとれるもの」と「標準ではとれないもの」を整理します。経営・コンプライアンス・監査部門の方には全体像を、情報システム・IT部門の方には設定レベルの詳細を届けられるよう書きます。明日の後編では、AI Agent時代に監査設計がどう変わるか、そしてPurview・Sentinel・Fabricを使った統合監査アーキテクチャを扱います。
D365で監査官が最初に確認すること—ERP・CRMの典型シナリオ
まず、技術的なログ設定の前に「監査で実際に何が問われるか」を先に整理しておきます。前掲の記事ではAI Agent時代の監査責任という大局を扱いましたが、「D365の現場で、具体的にどんな指摘が来るのかを知りたい」という声に応えて、ERP・CRMそれぞれの典型シナリオを並べます。各シナリオの末尾には、後のセクションで整理する「標準ログでどこまで追えるか」の目安を示しています。
ERP(FO / BC)で監査に引っかかりやすいシナリオ
① 売掛金残高と売掛金元帳の差異
標準機能+設定
総勘定元帳の売掛金科目残高と、売掛金元帳(Accounts Receivable Subledger)から出力したAging / Open Transactions レポートの合計が一致しない場合、監査官は即座に手動調整仕訳の有無を確認します。
差異が発生する典型原因:元帳を経由せず直接転記された仕訳、外部連携で二重計上が発生した、特定ユーザーが期末に調整仕訳を入力したケース等が挙げられます。Database Logを事前に有効化していれば「誰がいつどのテーブル・フィールドを変更したか」を追跡できますが、ログ設定前の変更は遡及的に取得することができません。
② 在庫残高と在庫評価レポートの差異
標準機能+設定
在庫残高の勘定科目と、在庫評価レポート(Inventory Valuation Report)の評価額が一致しない状態。棚卸資産の評価方法(FIFO・移動平均・標準原価)の設定ミス、または在庫調整仕訳による人為的な操作が疑われます。
「いつ、誰が、どのデータ項目を変更したか」は、対象テーブル・フィールドを事前にDatabase Logへ設定していれば追跡できます。ただし評価ロジックの設定変更履歴(原価計算グループの変更など)は別途確認が必要です。
③ 伝票計上日の遡及変更・帳票との不一致
標準機能+設定
請求書や仕訳の計上日(Posting Date)が、納品書・受領書などの帳票に記載された日付と一致しない場合、または期末をまたいで遡及変更されている場合、収益・費用の期間帰属の操作が疑われます。
特に決算月末日をまたぐ計上日の変更はリスクシグナルとして監査で重点的に確認されます。Database Logでは「変更前の計上日」と「変更後の計上日」「変更者」「変更日時」の4つを記録できます。
④ 仕入差額(PPV)が在庫残有りにも関わらず過大にコスト計上
標準機能+設定
Purchase Price Variance(仕入差額)は、標準原価と実際購買価格の差分です。在庫に品目が残っているにもかかわらず、PPVが大きくコストとして認識されている場合、標準原価の設定ミスまたは意図的なコスト操作が疑われます。
「誰が標準原価を変更したか」はDatabase Logで追えますが、変更のタイミングと在庫評価への影響の連鎖を分析するには、原価計算グループ・品目グループの設定変更ログとの照合が必要です。
⑤ 長期間滞留する未消込の売掛・買掛トランザクション
標準機能+設定
Aging分析で90日以上滞留する未消込の売掛・買掛明細は、回収条件・顧客との合意内容・消込プロセスの問題など正当な理由がある場合も多いですが、架空債権・循環取引のリスク指標の一つとして確認対象になり得ます。特に同一金額の借方・貸方が繰り返されているパターンは監査の重点対象になります。
未消込の残高はレポートで確認できますが、「なぜ消込されなかったか」「誰が消込を保留にしたか」の証跡にはDatabase Logが必要です。
⑥ 特定ユーザーによる棚卸調整の繰り返し
標準機能+設定
棚卸調整(在庫調整仕訳)が特定のユーザーによって定期的・高頻度に行われている場合、または1回あたりの金額が業務上説明しにくい水準である場合、監査官は「正当な業務上の理由があるか」を問います。
Database Logを対象テーブル・フィールドに事前設定していれば、記録された変更について変更者・変更日時・変更前後の値を追跡できます。ただし、在庫調整という取引そのものをDatabase Logだけで包括的に追える設計ではなく、「なぜその調整が必要だったか」の証跡(承認記録・根拠文書)は別途業務プロセスの設計が必要です。
⑦ 銀行口座・仕入先マスターの変更
標準機能+設定
不正送金リスクの観点では、トランザクション操作だけでなくマスターデータの変更も重要な確認対象になります。仕入先の銀行口座番号・支払先・支払条件の変更、顧客の請求先住所・与信枠の変更—これらは取引処理の変更より発見が遅れやすく、監査で優先的に確認されるリスク領域の一つです。
FOではVendor Bank Accountテーブル・Customer テーブルを、BCではVendor/Customer テーブルを Database Log / Change Logの監視対象に明示的に設定しておくことが不正防止設計の基本です。「誰が・いつ・どの仕入先の・どの口座番号を・何に変更したか」が証跡として残っていない場合、支払後に変更が行われたと主張することができなくなります。
CRM(Sales / Customer Service / Field Service)で監査に引っかかりやすいシナリオ
① 受注確定済み商談の不審な失注変更
標準機能+設定
Sales Pipelineの商談(Opportunity)が「受注」に近い状態(Proposal / Negotiation)から理由なく「失注(Lost)」に変更されるパターン。特に期末に集中して発生している場合、KPI調整や売上操作の疑いが持たれます。
Dataverse Auditingを商談エンティティに設定していれば、「誰がいつステージを変更したか」「変更前の状態は何だったか」をPre-Post Valueで確認できます。
② 承認フロー迂回の大幅割引適用
標準機能+設定
価格表(Price List)から大幅に逸脱した割引が、承認ワークフローを経由せずに特定の商談・受注に適用されている場合。割引上限を超えた操作は内部統制の観点から問題とされます。
Dataverse AuditingでQuote / Order エンティティの価格・割引フィールドを監視対象に設定することで、価格変更の証跡が残ります。承認ワークフローのバイパスはPower Automateのフロー実行ログとの照合で確認できます。
③ 未解決のサービスケース大量クローズ(KPI操作)
標準機能+設定
Customer Serviceのケース(Case)が顧客の承認なく「解決済み」に変更されている、または月末・四半期末に特定のユーザーが多数のケースを一括クローズしているパターン。ファーストコンタクト解決率やAHT(平均処理時間)などKPIを意図的に操作している疑いです。
Dataverse AuditingでCase エンティティの「ステータス」「解決日時」フィールドの変更履歴を記録することで、「誰が・いつ・どのケースを解決済みにしたか」が追跡できます。
④ 退職直前の顧客データ大量移管・エクスポート
ログギャップあり・Sentinel/Purview必須
退職予定の営業担当者が離職直前に顧客・コンタクト・リードのレコードを別ユーザーに一括移管する、またはExcelに大量エクスポートするパターン。競合他社への転職に伴う情報持ち出しの典型的なリスクシナリオです。
レコードの担当者変更はDataverse Auditingで追えます。しかしExcelエクスポートの詳細(何件・どのフィールドを出力したか)は標準では記録されません。このシナリオへの対応にはMicrosoft Sentinel(Dataverse Connectorによる異常なエクスポート量の検知)またはMicrosoft Purviewのインサイダーリスク管理との組み合わせが現実的な選択肢です。
これらのシナリオを見ると、「誰がデータを変更したか」という変更ログで追えるものと、「誰が何をエクスポート・閲覧したか」という操作ログが必要なものに分かれることがわかります。次にこの2軸を整理します。
監査でログとあわせて確認したいもの—職務分掌(SoD)
監査・内部統制の観点では、「誰が変更したか」というログだけでなく、そもそも「誰がその操作を実行できる権限を持っているか」という職務分掌(Segregation of Duties:SoD)も重要な確認項目です。「変更できる人が何人いるか」「一人の人間がすべての操作を完結できる権限を持っていないか」—適切なSoDが設計されていれば、不正が起きる可能性そのものが下がります。
監査人が見るSoD違反の典型パターン
FO / ERPで問われるSoD
同一ユーザーが「仕入先登録」「発注書作成」「請求書計上」「支払承認」をすべて実行できる状態。これは支払不正の典型的な温床です。FO / BCでは役割(Security Role)の設計でこの分掌を制御しますが、プロジェクト納期優先・人手不足等の理由で一人に過剰な権限が集中しているケースが監査で頻繁に指摘されます。
CRM / Dataverseで問われるSoD
同一ユーザーが「商談作成」「割引承認」「受注確定」「顧客データエクスポート」をすべて単独で実行できる状態。特に大型商談での割引承認を自分で行い自分で確定できる権限設計は内部統制上の重大なリスクです。
「持ち出せる人を絞る」—顧客マスタ・仕入先マスタのエクスポート制御
SoDの文脈で見落とされやすいのが、データのエクスポート権限です。顧客マスタや仕入先マスタは企業の根幹をなす情報資産であり、Excelに一括ダウンロードできる状態が「デフォルト」になっているケースは珍しくありません。しかしD365各系統では、このエクスポート権限をロール単位で制御することが可能です。
D365系統別:エクスポート権限の制御方法
FO(Finance & Operations apps)
FOでは、データエンティティのData Management(Import/Export)・OData・Microsoft Office integrationなど、利用シナリオごとに異なるセキュリティモデルでエクスポート権限を設計できます。特に顧客・仕入先などの機密データについては、必要なエンティティやアクセス経路を最小権限で設計することが重要です。設定粒度や制御範囲はシナリオによって異なるため、環境の権限構成を確認した上で設計します。
BC(Business Central)
BCでは、機能や操作に応じてPermission SetsでExcel出力関連の権限を制御できます。特定のレポートデータセットのExcel出力などには専用権限もあります。ただしBCのExport制御はFO・CRMほど粒度が細かくないケースもあるため、環境の権限構成を確認した上で設計することが推奨されます。
CRM / Dataverse
DataverseではExport to Excelが独立したSecurity Role privilege(Miscellaneous Privileges内の「prvExportToExcel」)として提供されており、この権限をロールから除外することでグリッドからのExcel出力・CSVダウンロードを禁止できます。Power Platform DLPポリシーと組み合わせることでさらに強固な設計が可能ですが、これは後編で扱います。
重要なのは、「エクスポートできないこと」と「何をエクスポートしたかのログ」は別の問いだということです。エクスポートを許可した場合に「誰が・いつ・何件・どのフィールドをエクスポートしたか」を記録できるかは、前述の通り標準ログの限界領域です。防ぐか、記録するか—両方を設計として持つことが理想であり、どちらか一方だけでは内部統制として不十分です。
D365のSoD設計ツールとして、FOではSecurity Reports・Segregation of Duties機能が標準搭載されており、役割ごとのコンフリクトチェックが可能です。BCでも権限セット(Permission Sets)の組み合わせでSoDを設計します。ただし「設計しているか」と「運用されているか」は別の話であり、監査では設計書ではなく実際の権限割り当て状態を確認されます。
SoD設計なしにいくら詳細なログを取っても、「不正をできる権限のある人が変更した記録」にしかなりません。ログは事後の証跡ですが、SoDは事前の防止設計です。この順番を理解しておくことが、監査対応の第一歩です。
ロール・権限設計—To-Be業務フローへのマッピングから始め、テストとトレーニングまで一貫して持つ
ロール・権限設計は、セキュリティ要件を中心とする横断的な設計領域です。「誰が承認できるか」「誰がどのデータを参照できるか」という定義は、業務設計・内部統制・データアクセス要件が相互に絡み合うものであり、機能設計の後工程で設定作業として行うものではありません。最小権限・職務分掌(SoD)・データアクセス範囲・監査可能性については、業務要件・機能要件と連動させながら、セキュリティ要件として独立した成果物で管理する必要があります。
ロールは画面から作るのではなく、業務プロセスから導出する。この原則が、この章全体のメッセージです。
ところが多くのプロジェクトでは、この設計が後回しにされます。結合テストは管理者権限で通し、トレーニングもSUPER権限のまま実施して、本番稼働の直前にロールを急いで設定する——このパターンがいかに多いか。そして本番後に「このメニューが見えない」「この操作ができない」という問い合わせが噴出することがいかに多いか。
権限設計を後回しにすると、最後に「設定作業が増える」だけでなく、テスト・トレーニング・移行・運用の全工程に手戻りが発生します。ロール設計は本番稼働前にテスト済みでなければなりません。トレーニングは実際のロールで行わなければ意味がありません。この順番を守れているかどうかが、プロジェクトの品質を決めます。
To-Be業務フローにロール・権限をマッピングする
ロール設計の出発点は、To-Be業務フローです。To-Beフローの各ステップに対して「このステップを実行するのはどの職責か」「このデータを参照してよいのは誰か」「この承認は誰が行うか」「どの範囲のレコードが見えるか」を業務設計の段階で定義しておかないと、権限設計は後からの帳尻合わせになります。
例として、購買プロセスのTo-Beフローで考えてみます。
| ステップ |
担当ロール |
操作 |
データ範囲 |
SoD制約 |
| 購買依頼の作成 |
購買担当者 |
Create |
自部門 |
— |
| 購買依頼の承認 |
部門マネージャー |
Approve |
自部門 |
依頼者と承認者は別人 |
| 発注書の作成 |
購買担当者 |
Create |
自社・担当BU |
— |
| 受領確認 |
倉庫担当者 |
Confirm |
自倉庫 |
— |
| 請求書照合 |
AP担当者 |
Match |
自社 |
— |
| 支払承認 |
経理マネージャー |
Approve |
自社 |
AP担当者と支払承認者は別人 |
表に「データ範囲」を加えているのは意図的です。「購買担当者」というロール名を決めるだけでは、何を操作できるかしか決まりません。どの会社・BU・部門・レコードを操作できるかまで設計しなければ、セキュリティ設計は完成しません。この表がロールマトリクスの原型であり、ここから製品ごとの権限設定に直接つなげます。
業務フローと権限設計を別チームが別々に進めると、最終的に「業務フロー上は一人が完結できる設計になっているが、SoD上はできてはいけない」という矛盾が本番直前に発覚します。To-Beフローを先に設計し、そこからロールマトリクスを導出する——この順番がプロジェクトとして正しい進め方です。
なお、BCを利用するSMB(中小規模企業)では、1人が複数のロールを兼任することも多く、SoD制約をすべてシステムで技術的に強制することが現実的でない場合があります。そのような環境では、どの制約をシステムで強制し、どの制約を承認プロセスや運用統制で補完するかを設計段階で明示しておくことが重要です。
セキュリティ要件として定義する—何を成果物にするか
セキュリティ設計の6つの成果物
① ロールマトリクス(Role Matrix)
To-Be業務フローから導出した、職責×操作権限×データ範囲の対応表。「誰が・何の業務を・どの操作まで・どのデータ範囲で実行できるか」を製品ごとに定義します。
② SoD制約一覧
分離すべき職務の組み合わせと、技術的強制(システム制御)または運用統制(承認プロセス・監査)のどちらで担保するかを明示した一覧。どちらで担保するかの判断自体が、設計の重要な成果物です。
③ カスタマイズ機能の権限設計
独自実装した画面・ワークフロー・APIへのアクセス制御設計。カスタマイズと権限設計は同時に行います。後から追加した機能に権限が設定されていないことは、典型的な漏れパターンです。
④ データ範囲・列レベルの設計
BU / Company / Column Security Profileの設計。CRM / DataverseではRecord-level SecurityとColumn-level Security(Column Security Profile)は独立した仕組みであり、ロール設計とは別の成果物として管理します。
⑤ Integration / API Security Matrix
ERP間連携・Power Platform・外部API・帳票出力・BI連携など、同じデータへの複数のアクセス経路について「どのIdentityが・何のデータに・どの操作を・どの認証で行うか」を整理します。画面のロール設計だけでは防ぎきれないデータアクセスは、ここで設計します。
⑥ ユーザー・ロールライフサイクル設計
誰にいつ権限を付与し、異動・兼務・退職時にどう剥奪するかを定義します。入社(Joiner)・異動(Mover)・退職(Leaver)の各タイミングで権限を正しく管理するプロセスがなければ、過剰権限が蓄積します。本番移行後の定期棚卸しの方針も含めます。
製品別 ロール・権限設計の実際
FO(Finance & Operations apps)
標準のアプローチ
FOのセキュリティはPermission → Privilege → Duty → Roleの4層構造で設計します。Permissionは個々のセキュリティ保護対象(メニュー項目・フォーム・テーブルなど)へのアクセス、Privilegeは個別のタスク、Dutyは業務プロセスの一部、Roleはユーザーの職責を表します。通常はPermissionをPrivilegeにまとめ、PrivilegeをDutyにまとめ、DutyまたはPrivilegeをRoleへ割り当てます。SoD Conflictチェックは「セキュリティ > 職務の分離 > ルールの設定」から設定・検証できます。また、Task RecordingとSecurity Diagnosticsを組み合わせることで、業務シナリオに必要なセキュリティオブジェクトを分析し、特定ユーザーに不足している権限を特定できます。To-Beフローをそのままタスクとして記録し、必要な権限を診断するアプローチは、権限漏れを体系的に発見する実用的な方法です。
カスタマイズ機能への権限割り当て
X++拡張で追加したメニュー項目・フォーム・レポート・サービス操作(Entry Point)に対するアクセス権は、Privilegeとして定義し、既存または新規のDuty・Roleに組み込みます。Visual StudioのSecurity Projectで設計・管理します。カスタム機能を追加した際の権限設計の漏れは後から発見しにくいため、実装と同時に設計します。
ロール自体のカスタマイズ
標準ロールを参考に独自ロールを作成または複製し、業務責任と最小権限の原則に基づいてDuty・Privilegeを調整します。標準ロールの複製は有効な方法の一つですが、不要な権限を残さないことに加え、ライセンス要件との整合も確認する必要があります。
BC(Business Central)
標準のアプローチ
BCの権限はPermission Sets(権限セット)の組み合わせで設計します。ユーザーは複数のPermission Setを持ち、それらの権限の和集合がアクセス可能な範囲になります。ライセンス/Entitlementによる利用可能範囲とPermission Setによる権限付与は別の概念であり、両方を確認してはじめて「この操作ができる」状態になります。なお、同一ユーザーに割り当てられた複数のPermission Setが同じTableDataを対象とする場合、Security Filterは制限の弱い側が有効になるため、Permission Setの組み合わせによる意図しないアクセス拡大にも注意が必要です。
カスタマイズ機能への権限割り当て
AL拡張で追加したTable・Page・Report・Codeunitには、拡張専用のPermission Setオブジェクト(.alファイル)を定義し、必要な権限を付与します。TableDataに対してはRead・Insert・Modify・Delete権限、Page・Report・Codeunitに対してはExecute権限を設定します。ALのAccessプロパティはPublic / Internalなど、オブジェクトを別モジュールから参照できる範囲を制御するものであり、ユーザーのデータ操作権限を設定するものではありません。対応するPermission Setや権限付与を設計しないままカスタム機能を追加すると、一般ユーザーが当該機能を実行できず、過剰な権限を一時的に付与して回避する事態になりかねません。
ロール自体のカスタマイズ
MicrosoftやISVが提供するSystem Permission Setは直接編集できないため、コピーしてユーザー定義のPermission Setを作成するか、ALで新しいPermission Setを定義します。既存のAL定義Permission Setに権限を追加する場合は、PermissionSetExtensionオブジェクトを使用します。PermissionSetExtensionでは権限の追加のみが可能で、既存権限の削除はできないため、過剰権限を生じさせないよう注意が必要です。ユーザー管理には、Microsoft Entra IDのセキュリティグループをBusiness CentralのSecurity Groupに関連付け、そのSecurity GroupにPermission Setを割り当てる方法が現在の推奨アーキテクチャです。従来のUser Groupを使用している環境では、Security Groupへの移行方針も確認します。
Dynamics 365 Customer Engagement apps / Dataverse
標準のアプローチ
DataverseのSecurity Roleは、テーブル権限のアクセスレベルをOrganization / Parent:Child Business Units / Business Unit / User / Noneの5段階で設計します(画面上ではGlobal・Deep・Local・Basicなどと表現される場合があります)。「どのレコードが見えるか」はロール名ではなく、アクセスレベルとBusiness Unit(BU)の階層構造で決まります。なお、Teamはアクセスレベルではなく、ユーザーをグループ化してセキュリティロールやレコード所有権を共有するための仕組みです。列レベルセキュリティ(Column-level Security。画面上のフィールドに対する制御)はロールとは独立した仕組みとして、Column Security Profileで列単位のRead / Create / Update可否を制御します。Record-level SecurityとColumn-level Securityは別の仕組みであり、ロール設計と同時にColumn Security Profileを設計しないと、ロール設計だけでは情報漏洩を防げない場面が生まれます。
カスタマイズ機能への権限割り当て
カスタムテーブルを作成しても、既存のセキュリティロールにそのテーブルの権限は自動的に追加されません。Power Appsの管理センターからセキュリティロールを開き、カスタムテーブルのCreate・Read・Write・Delete・Append・Append To・Assign・Share権限と、それぞれのアクセスレベルを設計します。特にテーブル間の参照関係では、AppendとAppend Toは関連付けの両側で必要になるため、設定漏れが起きやすい点に注意が必要です。
ロール自体のカスタマイズ
Microsoftまたはアプリケーションが提供する標準セキュリティロールを直接変更するのではなく、原則として標準ロールをコピーして独自ロールを設計します。複数ロールの権限は和集合になるため、組み合わせによる意図しないアクセス拡大が起きないよう、定期的な権限棚卸しが必要です。
実ロールでの結合テスト—機能テストだけではロール設計の検証にならない
管理者権限(System Administrator・SUPER)での機能テストは、機能そのものが正常に動作するかを確認する意味はあります。しかし、それだけではアクセス制御のテストになりません。本番環境でも管理者アカウントは運用管理・障害対応用に存在しますが、通常業務を行うエンドユーザーがその権限を使うことはないからです。
結合テストで確認すべきことは4点です。①実ロールでの業務シナリオ通過:AP担当者・経理マネージャー・承認者のロールでログインしてシナリオを実施します。「このメニューが見えない」「この操作で権限エラーが出る」はここで発見・修正します。②SoD制約の動作確認:分掌すべき操作が同一ユーザーで完結できないことを確認します。③データ範囲の確認:ロールマトリクスで定義したデータ範囲どおりに、他BU・他社のレコードが見えない・操作できない状態になっているかを確認します。④カスタマイズ機能の権限漏れチェック:独自実装した画面・ボタン・APIが、権限のないロールからアクセス可能な状態になっていないかを確認します。
実ロールでのトレーニング—SUPER権限でのトレーニングが生む現場混乱
トレーニングをSUPER権限で実施すると、エンドユーザーは「できること」を前提に覚えます。本番稼働後に「あのボタンがない」「このメニューが見えない」という混乱が起きるのは、ほぼこのケースです。トレーニングは本番想定のロールで実施することが原則であり、トレーニング前にロール設定が完了していなければなりません。
スケジュールの逆算が必要です。ロール設計完成(Security Design Freeze)→ ロール設定 → 実ロールでの結合テスト → トレーニング → 本番稼働。ロールがSIT開始前に確定していないと、この全体が崩れます。「SIT開始までにSecurity DesignをFreezeする」——この要件をプロジェクト計画のマイルストーンとして明示することが、ベンダーとして果たすべき基本的な責任です。
ここまでをまとめると
ロール・権限設計は、業務要件・内部統制・データアクセス要件を横断するセキュリティ設計です。To-Be業務フローの設計段階からロール・権限とデータ範囲をマッピングし、ロールマトリクス・SoD制約一覧・Integration / API Security Matrixをセキュリティ要件として独立した成果物にまとめます。カスタマイズ機能の権限設計は実装と同時に行います。SIT開始前にSecurity Design Freezeを置き、実ロールでテストを通し、実ロールでトレーニングを行います。本番直前までロール設計が確定しない場合、UAT・トレーニング・移行準備との間に手戻りが発生するリスクが高まります。「ロール設計が終わっていないから結合テストを始められない」——この状態をプロジェクト計画の段階から防ぐことが、正しいセキュリティ設計の扱い方です。
製品別 セキュリティ設計 早見表
| 設計軸 |
FO |
BC |
Dataverse |
| 権限の構造 |
Permission → Privilege → Duty → Role(4層) |
Permission Set(和集合) |
Security Role + アクセスレベル |
| データ範囲の制御 |
法人(Company)/ Data Security |
会社単位 / Security Filter |
BU階層 × アクセスレベル(Global / Deep / Local / Basic) |
| フィールド・列制御 |
セキュリティオブジェクト・権限設定・画面設計を組み合わせて実装 |
ページ設計・コード・AccessByPermissionで補完 |
Column Security Profile(列レベルセキュリティ) |
| SoD機能 |
標準搭載(Conflict Check) |
運用統制・承認プロセスで補完 |
運用統制・承認プロセスで補完 |
| カスタム権限の追加 |
Privilegeとして定義 → Duty / Roleへ |
Permission Set Object / PermissionSetExtensionで定義 |
テーブル権限(CRUD / Append / Append To等)を手動追加 |
| ユーザー管理 |
Entra ID → FO Security Role |
Entra ID → Security Group → Permission Set |
Entra ID → Security Role / Team |
| 標準ロールの扱い |
標準ロールを活用、または複製・新規作成して調整 |
コピーしてユーザー定義セット作成 or AL拡張 |
コピーして独自ロールを作成 |
| SMB特有の考慮 |
— |
1人複数ロール兼任あり。SoD制約は運用で補完 |
BU設計を簡略化(全社1BUも選択肢) |
プロジェクト順序と「よくある失敗パターン」
| フェーズ |
✅ 正しい進め方 |
❌ よくある失敗 |
| 要件定義 |
To-Beフロー × ロール × データ範囲をマッピング |
機能要件だけ定義。権限は「後で」 |
| 設計 |
ロールマトリクス・SoD・Integration / API Security Matrixを成果物化 |
設計書なし。担当者の頭の中だけにある |
| カスタマイズ |
実装と同時に権限設計 |
カスタム機能完成後に気づいて追加 |
| Security Design Freeze |
SIT開始前にロール設計を確定する |
定義なし。SIT直前に「とりあえず設定」 |
| テスト(SIT) |
実ロールでSIT。データ範囲・SoD・カスタム権限を検証 |
SUPER権限でシナリオを通過させて完了とする |
| トレーニング / UAT |
本番想定ロールで実施 |
SUPER権限でトレーニング → 本番後「ボタンがない」 |
| 本番移行 |
ロール設定・検証・テストユーザー削除まで完了 |
本番直前にロール設定を開始 |
| 本番後 |
定期的な権限棚卸し(過剰権限・退職者・未利用ロール) |
設定したら終わり。棚卸しなし |
セキュリティ設計 成果物チェックリスト
| 成果物 |
内容 |
FO |
BC |
Dataverse |
| ① ロールマトリクス |
職責 × 操作 × データ範囲 |
✓ |
✓ |
✓ |
| ② SoD制約一覧 |
分離すべき職務と強制手段(技術 / 運用) |
✓ |
✓ |
✓ |
| ③ カスタム権限設計 |
独自機能のアクセス制御設計 |
✓ |
✓ |
✓ |
| ④ データ範囲・列レベル設計 |
BU / Company / Column Security Profile |
✓ |
✓ |
✓ |
| ⑤ Integration / API Security Matrix |
システム間連携・API・BIのアクセス設計 |
✓ |
✓ |
✓ |
| ⑥ ユーザー・ロールライフサイクル設計 |
入社・異動・退職時の権限付与・剥奪プロセス |
✓ |
✓ |
✓ |
| ⑦ テストシナリオ(実ロール) |
ロール別・SoD・データ範囲・Integration確認 |
✓ |
✓ |
✓ |
(参考)Integration / API Security Matrix—画面の外からのアクセスを設計する
画面上のロール設計が完了しても、API・システム間連携・BI・Power Platformなど、同じデータへの複数のアクセス経路が残ります。エンタープライズ案件では、これらの経路についても「どのIdentityが・何のデータに・どの操作を・どの認可で行うか」を整理しておく必要があります。以下は設計時の参考例です。
| 連携 |
Identity |
対象データ |
操作 |
認可方式 |
| CRM → FO |
Service Principal |
顧客・受注 |
Read / Create |
Entra ID(App context) |
| 外部システム → BC |
Integration User |
発注・在庫 |
Create / Update |
OAuth / Permission Set |
| Power Automate → Dataverse |
Connection(Entra ID) |
承認・タスク |
Read / Update |
Entra ID / Dataverse Role |
| BI / Fabric → FO |
Managed Identity |
財務・SCMデータ |
Read |
Entra ID / Data Scope制御 |
UIからのアクセス権限と、連携・API経由のアクセス権限は別々に設計します。画面上は見えないはずのデータが、API経由では取得できる——というパターンが本番稼働後のインシデントとして報告されることがあります。ロール設計のスコープを「画面」だけでなく「データへのすべてのアクセス経路」まで広げることが、エンタープライズ案件における本来のセキュリティ設計です。
監査ログの2つの軸—「変更を追う」と「操作を追う」
D365の監査ログを整理するとき、まず2つの軸を区別しておくと理解が早まります。
監査ログの2軸
① 変更ログ(Change Log / Audit Trail)
データが「何から何に変わったか」を記録する。Who / What / When / Pre-Post Value が軸。「昨日まで100万円だった請求額が今日90万円になっている—誰が変えたか?」に答える。
② 操作ログ(Activity Log / Access Log)
ユーザーが「何をしたか・何を見たか」を記録する。「そのユーザーはどのレポートをいつ実行し、どんな条件でExcelにエクスポートしたか?」に答える。データは変えていなくても、閲覧・エクスポートしたことを証跡として残す。
補足:監査ログで出てくる「CRUD」とは
監査ログの文脈で頻繁に出てくるCRUDは、データ操作を整理するときによく使われる4分類です。Create(作成)・Read(閲覧・取得)・Update(更新)・Delete(削除)の頭文字を取ったものです。
変更ログは主にデータの作成・更新・削除など「データが変わった操作」を対象とします。一方で操作ログ・活動ログでは、Read(データを変更しない閲覧・取得)やExport操作も対象になります。「誰が見たか」のRが最も記録しにくく、かつ情報漏えい・不正アクセスの文脈で最も問われやすい領域です。
Dataverse AuditingはCreate / Update / Deleteに加え、Assign・Share・セキュリティロール変更などの変更イベントを対象とします。Retrieve / ExportはDataverse Auditing単体では対象外であり、Read/Exportの追跡にはActivity Loggingが必要になる—という構造は、このCRUDの分類を理解すると自然に腑に落ちます。
D365の3系統はいずれも、設定を前提として、データ変更を追跡する標準的な仕組みを備えています。一方で②操作ログ—特にレポートのフィルター条件・エクスポート操作の詳細—は標準機能では記録できない領域が残ります。ここが、監査対応において最も問われやすいギャップです。
FO(Finance & Operations apps)の監査ログ
D365 Finance・Supply Chain Management・Commerce・Project Operationsが該当します。大企業ERP領域で最も厳格な監査要件が求められる製品群です。
標準でとれるもの
Database Log(データベースログ)
標準機能+設定
最も重要な変更ログ機能。テーブル・フィールドを指定して、Insert / Update / Delete / Rename の操作を記録します。
設定場所:システム管理 > 設定 > データベースログの設定
記録内容:変更日時 / ユーザー / テーブル・フィールド名 / 変更前の値(Pre Value)/ 変更後の値(Post Value)。取引先・銀行口座・与信枠など、監査上重要なテーブル・フィールドを選択して有効化します(例:VendBankAccountテーブル、CustTableのCredit Limitフィールドなど)。ユーザー権限の変更については、Security Governance等のセキュリティ監査機能とあわせて確認します。広範囲に有効化するとパフォーマンスやデータ量への影響が大きくなり得るため、対象テーブル・フィールドの絞り込みが前提です。
⚠️ 重要:Database Logは「事前に設定したテーブル・フィールドの変更」のみを記録します。すべての取引・自動バッチ処理を包括的に追跡する設計ではありません。また、ログを有効化した時点以降の変更しか記録されず、設定前の過去データを遡及的に取得することはできません。監査対応は監査が来てからログをONにする仕事ではない—この前提が導入・運用設計の出発点です。
ユーザーサインイン / ユーザー活動
標準機能+設定
ユーザーのサインイン・アクセス活動の記録。Finance and Operationsでは、ユーザー活動情報をUser Log・Security Governanceレポート・テレメトリ等の組み合わせで確認します。製品バージョンや有効化機能により確認場所が異なるため、現行環境の構成を確認する必要があります。なお旧来の「システム管理 > 照会 > ユーザーログ」画面はレガシー機能として位置づけられており、2026年時点ではUser Log V2(Preview)が提供されています。User Log V2は有効化後のサインイン情報を記録するため、過去のデータが自動的に移行されるわけではありません。
確認場所:Microsoft Entra サインインログ、Security Governance関連レポート、または現行版のUser Log V2(Preview)
セキュリティ変更ログ
標準機能
セキュリティロール・権限の変更履歴を記録します。「このユーザーにいつ管理者権限が付与されたか」を追うための機能です。
確認場所:システム管理 > セキュリティ > 監査証跡
標準では制約がある領域—設定・連携で補完できるものと、カスタム実装が必要なもの
FO:標準では制約がある操作ログ(Application Insights連携で一部補完可能)
⚠️ レポートの実行ログ—ERレポートはER実行ログ(標準)で追跡可能。SSRSはApplication Insights連携が必要。どちらもフィルター条件の詳細は要X++拡張
❌ レポート実行時のフィルター条件(抽出期間・会社コード・勘定科目の指定内容)—ER・SSRS問わず要X++拡張
⚠️ エクスポート操作の詳細—DMFエクスポート(PU69+)はApplication Insights Telemetryで対応可能。ad-hocグリッドエクスポートは要X++拡張
❌ エクスポートした行数・フィールド一覧—ad-hocは要X++拡張
⚠️ 画面の閲覧ログ—フォームレベルはForm Run Telemetry → Application Insightsで取得可能。レコード単位の閲覧証跡は要X++拡張
❌ データグリッド上のフィルター・並び替え操作
「誰がどのレポートを実行し、どんな条件でExcelに出力したか」—この問いに対して、FOは標準機能では答えられません。データ保護法令への対応や、情報漏洩事案の事後調査でこの問いが立てられることがあります。対応策は後半で整理します。
BC(Business Central)の監査ログ
中堅・SMB向けERPとして位置づけられるBCですが、監査機能の考え方はFOと同様です。
標準でとれるもの
Change Log(変更ログ)
標準機能+設定
BCの中核的な変更追跡機能。テーブル・フィールド単位で Insert / Modify / Delete を記録します。
設定場所:管理 > Change Log Setup。テーブルごとに「All Fields」または「Some Fields」を選択して監視対象を絞り込みます。
記録内容:変更日時 / ユーザーID / テーブル名 / フィールド名 / 変更前の値 / 変更後の値。Change Log Entriesページで確認できます。取引先・品目・単価・ユーザー権限など、業務上の重要データを対象テーブルとして選択することが基本設計です。
⚠️ 重要:Change Logは「Change Log Setupで事前に設定したテーブル・フィールドの変更」のみを記録します。有効化した時点以降の変更のみが対象となり、設定前の過去データを遡及的に取得することはできません。監査対応は監査が来てからログをONにする仕事ではない—この前提が導入設計の出発点です。
📝 名称メモ:Microsoft Learn のドキュメントページタイトルは “Auditing changes”(2026年6月更新)に変わっていますが、機能名は引き続き「Change Log」のままです(Change Log Entries / Change Log Setup)。「Audit Log」への正式な名称変更は行われていません。
Application Insights テレメトリ連携
標準機能+設定
BCはAzure Application InsightsへのTelemetry送信機能を標準で持ち、操作系テレメトリを取得・分析しやすい製品です。レポート実行・ページビュー・セッション・ユーザー・AL Extension呼び出し・連携・権限エラー等のテレメトリを取得・分析できます。
設定場所:Business Central admin centerでApplication Insights接続文字列を設定。Microsoft公式ドキュメントでは、レポート実行のTelemetryからユーザー・会社・レポート定義等を分析する例も提供されています(Analyze financial report usage telemetry)。
KQLでの分析・Power BIへの接続・Microsoft Sentinelとの連携も可能。Change Logが「何が変わったか」を記録するのに対し、Application Insightsは「誰が何を使ったか」を分析する補完的な基盤として位置づけられます。
Sensitive Field Monitoring(重要フィールド監視)
標準機能+設定
BCにはChange Logとは別に、Sensitive Field Monitoringの概念があります。仕入先・顧客の銀行口座番号、支払条件、与信枠など、特に監査・不正防止上の重要フィールドを重点的に監視し、変更時にアラート・通知を発するよう設計できます。
Microsoftはこのアプローチを「全フィールドに対して重いChange Logを取る」のではなく「重要フィールドを高精度で監視し、それ以外はTelemetryで広く見る」という設計思想として説明しています。パフォーマンスへの影響を最小化しながら不正防止上のリスクをカバーできる点で、Change Log単独より実用的な構成になります。
標準ではとれないもの
BC:標準では記録されない操作ログ
⚠️ レポートの実行(どのレポートが実行されたかはRT0006 Telemetryで追跡できる)
❌ Request Pageで指定された具体的なフィルター条件は標準Telemetryでは残らない
❌ ExcelへのエクスポートのフィールドリストとExport行数
❌ レコード単位の閲覧証跡(どの顧客・どの仕入先レコードを開いたか)
❌ APIコール経由のデータ取得ログ(Application Insightsで一部補完可能)
特にレポートのRequestページ(実行条件を指定するダイアログ)で設定したフィルター条件は、Change LogはもとよりApplication InsightsのRT0006 Telemetryでも標準では記録されません。「どの期間を指定してどの仕訳を印刷したか」は標準では残りません。BCではApplication Insightsが一定の補完手段になりますが、フィルター条件の詳細まで標準でとれるわけではなく、AL Extensionによるカスタムテレメトリの実装が必要になります。
CRM / Dataverse の監査ログ
Dynamics 365 Sales・Customer Service・Field Service・Customer Insights等のCRM系アプリ、およびPower Appsで作成したモデル駆動型アプリが対象です。データストアはMicrosoft Dataverseです。
標準でとれるもの
Dataverse Auditing(監査機能)
標準機能+設定
DataverseはFO・BCと比べて最も細かい粒度での監査設定が可能です。環境レベル・テーブル(エンティティ)レベル・フィールドレベルの3段階で有効化します。
設定場所:Power Platform管理センター > 環境 > 監査設定、またはソリューションエクスプローラー内のテーブル設定。
記録内容:Create / Update / Delete、Assign(担当者変更)、Share(共有権限変更)、セキュリティロール変更等をカバー。Who / What / When / Pre-Post Valueが記録されます。なお、Dataverse Auditing自体はRetrieve(Read)やExport操作を対象としていません。一部のアクセス関連イベントは監査対象にできますが、一般的な意味での「全閲覧ログ」を標準で網羅的に取得する設計ではありません。Read / Export等の活動については、別途Dataverse / model-driven apps activity loggingを有効化し、Microsoft Purviewで確認します。
確認場所:各レコードの「監査履歴」タブ、または監査の概要ビュー(Audit Summary View)で横断確認。Microsoft Purviewの監査ログ検索とも連携します。
⚠️ 重要:Dataverse Auditingは「環境・テーブル・フィールド単位で事前に有効化した対象」のみを記録します。有効化した時点以降の変更のみが対象となり、設定前の過去データを遡及的に取得することはできません。監査対応は監査が来てからログをONにする仕事ではない—この前提が導入設計の出発点です。
Microsoft Purview / M365コンプライアンスセンター のアクティビティログ
標準機能+設定
Microsoft 365コンプライアンスポータル(Microsoft Purview)の統合監査ログには、Power Appsのアクティビティ(アプリの起動・共有・コネクタへのアクセス)や、Power Automateのフロー実行ログが記録されます。
検索場所:Microsoft Purview > 監査 > 監査ログの検索。「Dataverse」「Power Apps」「Power Automate」のアクティビティカテゴリでフィルタリングできます。ライセンス要件は監査機能・保持期間・ユーザーのライセンス構成によって異なります。Microsoft Purviewでの長期保持には追加のライセンス要件があります。
Dataverse Auditingでは対象外となる操作
CRM / Dataverse:Dataverse Auditingだけではカバーできない操作
❌ Retrieve / Read(閲覧)操作:Dataverse Auditing単体では対象外。Activity Loggingを別途有効化することで対応可能
❌ Export操作:Dataverse Auditing単体では対象外。Activity Logging / Microsoft PurviewでExportToExcelイベントを記録可能(ただし「何件を・どのフィールドで」という詳細粒度には制約がある)
⚠️ エクスポート時のフィルター条件:継続的な監視・証跡管理にはPurview+カスタマイズが必要。なお事後の一回性調査に限り、CSVエクスポート後にAuditData列のJSONを解析→Queryプロパティ(FetchXML)を取得することでフィルター条件を読み取れる場合がある(詳細は後編参照)
❌ キャンバスアプリ上のフィルター操作・ボタン操作等の詳細
❌ Power Apps キャンバスアプリ上のすべての操作詳細(フォーム遷移・ボタン操作等)
Dataverse Auditingは3系統の中で最も設定の柔軟性が高い仕組みです。Read / Export等の活動ログはActivity Loggingという別レイヤーで対応でき、Production環境ではMicrosoft Purviewに転送・集約されます。なお、Activity Loggingを有効化すると大量の監査レコードが生成されるため、ストレージ容量・検索性能・保持ポリシーを考慮した設計が必要です。
「標準ではとれない」領域をどうカバーするか
ここまで整理してきたD365の標準ログは、データ変更の監査(Who / What / When / Pre-Post Value)と管理者アクティビティの監査については、設定を前提としながらも一定の答えを出せます。しかし監査の現場で問われる範囲は、それだけではありません。
D365標準ログの「応答範囲」と「ギャップ」
標準機能で応答できる範囲
・データ変更監査(誰が・何を・いつ・変更前後の値)
・管理者アクティビティ監査(権限変更・設定変更)
・ユーザーサインイン(Microsoft Entra ID経由)
・CRMのRead / Export操作(Activity Logging / Purview)
・FOの閲覧ログ(フォームレベル)—Form Run Telemetry → Application Insights連携で対応可能
・BCの閲覧ログ(ページレベル)—Page View Telemetry → Application Insights連携で対応可能
標準では応答できない領域(ギャップ)
・レポート名—どのレポートが実行されたか
・エクスポートフォーマット—Excel・CSV・PDF等のどの形式でダウンロードされたか
・フィルター条件—どのデータ範囲を指定してエクスポートしたか
・行数—何件のレコードがエクスポートされたか(大量持ち出しの検知)
これらのギャップに対してカスタム実装でカバーするアプローチは存在します。FO ではX++イベントハンドラ、BC ではAL Extensionのカスタムテレメトリ、CRM ではPurview+カスタマイズを組み合わせることで、フィルター条件を含むエクスポート操作の証跡を記録できます。後編でそれぞれの実装アプローチを整理します。
このギャップは製品の設計上の境界線ですが、近年この境界線が「実案件の問題」として浮上する頻度が上がっています。アジア各国でデータ保護法令の整備・強化が進む中で、「誰がどのデータを・どのフォーマットで・何件・どの条件でエクスポートしたか」を記録・証明することを求める要件が、具体的な案件要件として出てくるようになっています。
D365標準の機能範囲ではこれらの要件をカバーしきれないため、Change Requestによる追加実装が必要になる領域として、正直に認識しておく必要があります。製品として「できる」と誤解したまま本番稼働すると、監査対応局面で初めてギャップに気づくことになります。
カバーするアプローチは主に4つです。
アプローチ① カスタマイズによる独自ログ実装
開発による拡張
要カスタム開発
FO:X++による拡張でレポート実行イベントをフックしてカスタムログテーブルに書き込む。BCではAL Extensionでページ・レポートのトリガーポイントにカスタムテレメトリを実装する。CRM/DataverseではPluginやCustom APIでデータアクセスイベントを捕捉する。
メリット:ログ内容を自由に設計できる、システム内で完結する。デメリット:開発・テスト・保守コストが発生する。製品アップデートへの追従が必要。ログの保存先(DB肥大化)設計も別途必要。
アプローチ② Microsoft Sentinelによるログ集約・分析
Microsoft Sentinel 連携
要Sentinelライセンス+設計
Microsoft SentinelはD365・Microsoft 365・Microsoft Entra IDの各ログコネクタを持っています。Dynamics 365 Connector・Microsoft Purview Connectorを使ってログをSentinelのLog Analytics Workspaceに集約し、KQLクエリによる高度な分析・アラートが可能になります。
重要な前提:SentinelはD365が「出力したログ」を集約・分析するプラットフォームです。D365が出力していないログ(レポートフィルター条件など)をSentinelが独自に生成することはできません。Sentinelの価値は、D365・Entra ID・M365の複数ログを横断して相関分析できる点にあります。「このユーザーが大量エクスポートを行った翌日にEntra IDでの異常なサインインがあった」といったシナリオの検出が得意領域です。
メリット:複数システムのログを一元管理・横断分析できる、UEBAによるアノマリ検出。デメリット:Sentinelライセンス費用(データインジェスト量に比例)、運用するSOC体制が前提。「ログを見る人」と「アラートに対応する人」の体制整備が必要。
アプローチ③ Application Insights(BC標準統合・FOも部分対応)
Application Insights テレメトリ(BC / FO)
Azure費用・要接続設定
BCはApplication Insightsへのテレメトリ送信をadmin centerで標準設定できる系統です。AL Extensionでカスタムテレメトリを追加することで、レポート実行・フォームアクセス等の操作ログをApplication Insightsに記録できます。FOもForm Run Telemetry等でApplication Insightsへの接続は可能ですが、BCのようにadmin centerで完結する統合設定はなく、X++による拡張実装が主体になります。FOでは複数システムのログを横断分析したい場合はSentinel(アプローチ②)との組み合わせが主流です。
KQLでの分析、Power BIへの接続、Microsoft Sentinelとの連携も可能。カスタム開発とクラウドログ基盤の組み合わせとして、BCでは最も実用的なアプローチの一つです。
アプローチ④ Microsoft Purview(Activity Logging)—CRM専用
Microsoft Purview — Activity Logging
要PurviewLicense+設定(CRM)
CRM / Dataverse 固有のアプローチです。Activity Loggingを有効化することで、Read(閲覧)・Export(エクスポート)・Assign・Share等の操作ログをMicrosoft Purviewに送信できます。Production環境ではPurviewの監査ログとして集約・保持され、コンプライアンスセンターから検索・エクスポートが可能です。
カバー範囲と制約:エンティティ単位の閲覧・エクスポートは記録できますが、レコード単位の詳細(どのレコードIDを参照したか)やフィルター条件(どの条件で絞り込んだか)の記録には粒度の制約があります。これらの詳細はPlugin拡張と組み合わせることで補完できます(→ アプローチ①との併用)。
メリット:カスタム開発不要でCRMの操作ログを取得できる唯一の標準アプローチ。Purviewのコンプライアンス機能(保持ポリシー・eDiscovery)と統合できる。デメリット:Microsoft Purview / Power Platformのライセンス要件・保持期間要件を事前に確認。大量ログ生成によるストレージ・検索性能への影響を考慮した設計が必要。
4アプローチの使い分け
アプローチ選択の目安
| アプローチ |
向いているケース |
コスト感 |
運用負荷 |
| カスタマイズ |
特定の業務要件・法令対応で記録内容を精緻に定義する必要がある場合 |
初期開発費用+保守費用 |
開発・テスト・アップデート追従 |
| Microsoft Sentinel |
複数システムにまたがるログの横断分析・セキュリティ監視も兼ねたい場合 |
データインジェスト量に比例するクラウドコスト |
SOC体制・KQL運用スキルが前提 |
| Application Insights(BC / FO) |
BCはadmin centerで標準統合。FOもForm Run Telemetry等で接続可能だが、X++拡張実装が主体。Sentinelとの組み合わせも有効 |
Azure費用(比較的軽量)+AL / X++開発費 |
KQLスキルがあれば分析は比較的容易 |
| Purview / Activity Logging(CRM) |
CRMのRead・Export操作ログをカスタム開発なしでカバーしたい場合 |
M365 E3/E5またはPurviewコンプライアンスアドオン費用 |
保持ポリシー・ストレージ設計が必要。粒度の制約はアプローチ①と併用で補完 |
まとめ—D365監査ログの現状地図
D365 3系統 監査ログ現状地図(2026年9月時点)
標準機能
標準機能+設定
要カスタム
| 監査項目 |
FO
Finance & Operations database |
BC
Business Central database(Microsoft管理) |
CRM
Dataverse |
| データ変更(Who/What/When/Pre-Post) |
標準機能+設定 |
標準機能+設定 |
標準機能+設定 |
ログイン・セッションログ
→ Sentinel推奨 |
標準機能+設定
Entra ID / User Log V2(Preview) |
標準機能
Entra IDログ |
標準機能
Entra IDログ |
| セキュリティ権限変更ログ |
標準機能+設定 |
標準機能+設定 |
標準機能+設定
Dataverse Auditing(Assign) |
閲覧(Read)ログ
→ Sentinel推奨 |
標準機能+設定
Form Run Telemetry → Application Insights(フォームレベル)
※レコード単位は要X++拡張 |
標準機能+設定
Page View Telemetry → Application Insights(ページレベル)
※レコード単位は要AL拡張 |
標準機能+設定
Activity Logging / Purview
レコード単位詳細に制約 |
| レポート実行ログ |
標準機能+設定
ERはER実行ログ(標準)
SSRS → Application Insights(クラウド制限あり) |
標準機能+設定
RT0006 Telemetry → Application Insights |
標準機能+設定
Power BIはPower BIアクティビティログ
要カスタム
FetchXMLレポートは要Plugin拡張 |
| レポートのフィルター条件 |
要カスタム
要X++拡張 → Application Insights |
要カスタム
要AL拡張 → Application Insights |
要カスタム
要Purview+Plugin拡張
FetchXML事後解析は可 |
エクスポート操作の詳細(フィールド・行数)
→ Sentinel推奨 |
標準機能+設定
DMF Telemetry(PU69+)→ Application Insights
要カスタム
ad-hocエクスポートは要X++拡張 → Application Insights |
要カスタム
要AL拡張 → Application Insights |
標準機能+設定
Activity Logging / Purview(粒度に制約) |
後編では、この表で「要カスタム」となっている領域のうち、実装アプローチが定まっているものを詳しく解説します。具体的には、①レコード単位の閲覧ログ(FO:X++拡張、BC:AL拡張)、②レポートのフィルター条件の記録(FO/BC はX++/AL拡張でApplication Insightsに記録、CRMはFetchXMLの事後解析によるアプローチ)、③ad-hocエクスポートの詳細記録(FO:X++拡張、BC:AL拡張)、④FetchXMLカスタムレポートの実行ログ(CRM:Plugin拡張)の4パターンです。さらに、Power Platform DLPポリシーとDataverse権限設計を組み合わせたエクスポート制御設計、Purview・Microsoft Sentinel・Microsoft Fabricを組み合わせた統合監査アーキテクチャ、そしてAI Agentが業務を動かす時代に求められる監査設計論を整理します。
D365はデータ変更の追跡という点では3系統ともしっかり設計されています。一方で「誰が何を見て、何をエクスポートしたか」という操作の痕跡については、標準機能では残らない領域が横断的に存在します。これは製品の欠陥ではなく、設計の境界線です。監査要件の定義フェーズでこの境界線を正しく把握しておくことが、後からのスコープ変更を防ぐために重要です。
標準機能で「ログが取れる」ことと、監査要求に対して「十分な証跡になっている」ことは同義ではありません。監査要件では、対象データ・操作・ユーザー・時刻・変更前後の値・閲覧やエクスポートの粒度・保持期間・ログへのアクセス権限まで含めて確認する必要があります。
「標準でとれる」と「監査に使える」は別の問いです
設定を有効化しただけでは、監査に耐えるログにはなりません。何を、どの期間、どの粒度で保存するか。誰がいつアクセスできるか。改ざんされていないことをどう証明するか。「ログが存在する」という事実と、「監査証跡として機能する」という設計は、同じではありません。そして「監査対応は、監査が来てからログをONにする仕事ではない」—この前提が、すべての出発点です。
監査で最後に問われること—ログは「あるだけ」では足りない
ログが存在することは出発点にすぎません。監査では次の3点まで問われます:①何年間保持するか(Dataverse / Purview / Sentinel それぞれの保持ポリシー)、②ログの削除権限を誰が持つか(管理者が自分のログを削除できる構造は証跡として機能しない)、③ログが改ざんされていないことをどう証明するか(Immutable Log・Purviewの監査ログの保護設定)。これら3点まで含めて初めて「監査証跡」になります。
明日の後編に向けて—監査の「主語」が変わる
従来の監査ログは「人間の操作」を前提に設計されてきました。しかしAI Agentが業務を実行する時代には、「誰が承認したか」という問いが「どのAgentが・どの権限で・どのデータを参照し・何を判断したか」に変わります。ユーザー・Agent・ツール・データ・結果をつなぐ証跡設計が、次の監査論点です。後編では、Purview・Sentinel・Fabricを組み合わせた統合監査アーキテクチャとともに、AI Agent時代の設計論を整理します。
Let’s Enjoy our DX365LIFE!
次回予告(明日9月29日):AI AgentがD365の業務を動かし始めた世界で、監査設計はどう変わるか。Agentの「判断」はどう記録するか。Human-in-the-Loopと監査証跡の設計論、そしてPurview・Microsoft Sentinel・Fabricを組み合わせた統合監査アーキテクチャを整理します。