知識マップ: ネットワークドライブとUNCパスの落とし穴 ── 業務アプリでファイルサーバー(共有フォルダ)を扱う実務

記事「ネットワークドライブとUNCパスの落とし穴 ── 業務アプリでファイルサーバー(共有フォルダ)を扱う実務」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

業務アプリから共有フォルダーへ出力・監視するトラブルの多くは、コードのバグではなくWindowsの仕組みに根ざしている。ドライブ文字はログオンセッション単位のシンボリックリンクにすぎず、別ユーザー・UAC昇格・サービスからは見えないため、サービスや異なるセキュリティコンテキストのプロセスはUNCパスを使うべきとされる。サービスからの認証は実行アカウントで決まり、LocalSystem/NetworkServiceはコンピューターの資格情報、LocalServiceは匿名資格情報になるため、ドメイン環境ではドメインアカウントかgMSAに共有側の権限を与えるのが実務の標準になる。同じサーバーへの複数資格情報の同時接続はエラー1219で失敗する仕様があり、共有は遅い・切れる・いないことがあるという前提のもとtemp→renameでの公開やidempotencyな再処理、FileSystemWatcherとポーリングの併用で設計しておく必要がある。

ネットワークドライブとUNCパスの落とし穴の知識マップドライブ文字がログオンセッション単位でしか通用しないこと、サービスの実行アカウントごとに共有側の認証が変わること、エラー1219や共有の切断・取りこぼしを前提にした設計が必要になることの関係を示す図に保存される推奨される対応用いるのは非推奨前提とする両立しない用いるのは非推奨推奨される対応前提とする前提とする用いるのは非推奨推奨される対応前提とする前提とする推奨される対応前提とする前提とする前提とする利用する前提とする原因になり得る推奨される対応推奨される対応推奨される対応推奨される対応推奨される対応推奨される対応推奨される対応防止する用いるのは非推奨前提とする原因になり得るUNCパスログオンセッションネットワークドライブ(マップされたドライブ文字)WindowsサービスUAC昇格(管理者として実行)EnableLinkedConnectionsレジストリ値LocalSystemアカウントActive Directory(AD DS)NetworkServiceアカウントLocalServiceアカウントgMSA(group Managed Service Account)ドメインコントローラードメインアカウントKerberosSPNネットワークリダイレクターSMB(TCP 445)net use コマンドエラー1219(ERROR_SESSION_CREDENTIAL_CONFLICT)WNetAddConnection2資格情報マネージャー(cmdkey)偽装(impersonation)FileSystemWatcher共有フォルダ(SMB)越しのファイル連携定期フルスキャン(ポーリング)temp -> close -> rename/replaceでの公開idempotency(冪等性)を前提にした処理書き込み途中ファイルの読み込み事故File.ExistsSMBのアイドル接続自動切断(autodisconnect)

概念間の関係(全31件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

UNCパス
\\サーバー名\共有名\...の形式で共有フォルダーの実体を指す、Windowsのユニバーサル命名規則によるパス表記。
ログオンセッション
ユーザーのログオンやサービスの起動のたびにOSが作る実行の文脈で、ドライブ文字のマップはログオンSIDに基づきこの単位で管理される。
ネットワークドライブ(マップされたドライブ文字)
UNCパスの共有フォルダーに割り当てたドライブ文字(Z:など)で、実体はログオンセッション固有のシンボリックリンクオブジェクト(DosDevices)である。
Windowsサービス
ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。
UAC昇格(管理者として実行)
UAC有効な管理者ユーザーのログオン時に、権限を制限した通常トークンと完全な管理者トークンという、リンクされた2つのログオンセッションが作られる仕組み。
EnableLinkedConnectionsレジストリ値
UACのリンクされた2つのログオンセッション双方にドライブマップのシンボリックリンクを書き込ませるレジストリ回避策。Microsoftはシステムを安全でなくする可能性があるとして非サポートを明記している。
LocalSystemアカウント
サービスの実行アカウントの1つ。ローカルでは広範な特権を持つ一方、ネットワーク上ではコンピューターの資格情報としてリモートサーバーに認証される。
NetworkServiceアカウント
サービスの実行アカウントの1つ。ローカルの特権は最小限だが、ネットワーク上ではLocalSystemと同じくコンピューターの資格情報として認証される。
LocalServiceアカウント
サービスの実行アカウントの1つ。ネットワーク上では匿名資格情報として認証されるため、共有フォルダーへのアクセスには使えない。
gMSA(group Managed Service Account)
パスワードの自動生成・自動更新とSPN管理の簡素化を提供するActive Directoryドメインのサービスアカウント。ドメインコントローラー側のKDSルートキーの準備を前提とする。
ドメインアカウント
Active Directoryドメインに属し、ドメインコントローラーで認証されるアカウント。NTLMでの認証はドメインコントローラーへのパススルー認証を伴う。
Kerberos
チケットによる一度だけの本人確認と相互認証を提供する認証プロトコル。Windows ServerはKerberos version 5と、公開鍵認証・認可データの転送・委任のための拡張を実装する。
ネットワークリダイレクター
\Device\Mupという単一のデバイスオブジェクトとして名前空間に存在し、UNCパス(\\server\share)の要求をネットワーク越しに運ぶコンポーネント。
net use コマンド
指定したユーザー名でUNCパスの共有資源への接続を、実行したログオンセッションに確立するコマンド。サービス内での実行は資格情報の漏えいや干渉の観点から非推奨とされる。
WNetAddConnection2
クライアントの資格情報を指定してネットワーク資源への接続を確立できるWin32 API。ドライブ文字を割り当てないdeviceless接続にすれば、UNCパスのままアクセスできる。
資格情報マネージャー(cmdkey)
サーバーごとの資格情報をユーザープロファイル単位で保存し、以後の認証時に自動的に提示する仕組み。サービスで使うにはその実行アカウントのコンテキストで登録する必要がある。
偽装(impersonation)
サービスが、接続してきたクライアントユーザーの権限を借りてリモート資源にアクセスする仕組み。
FileSystemWatcher
.NETが提供する、ファイル・ディレクトリの作成・変更・削除・名前変更をイベントで通知するAPI。ディレクトリ通知はアプリが動いている間しか受け取れず、内部バッファのoverflowで個別通知を取りこぼすことがある。
定期フルスキャン(ポーリング)
変更通知に頼らず、対象フォルダーを一定間隔ですべて確認して変化を検出する監視方式。
temp -> close -> rename/replaceでの公開
生成中のファイルをtemp名に閉じ込め、closeしたあとで同一ディレクトリ・同一ボリューム上のfinal名へrename/replaceする、書き込み途中のファイルを読ませないための公開パターン。
idempotency(冪等性)を前提にした処理
同じ入力をもう一度処理しても結果が変わらない性質を前提に、排他が破れた場合の二重実行を処理済み台帳への記録で吸収する設計。
File.Exists
.NETでファイルの存在を確認するAPI。パス不正・権限不足・ディスク障害など理由を問わず例外を出さずfalseを返すため、共有フォルダー相手では「ファイルが無い」と「サーバーに届かない」を区別できない。
共有フォルダ(SMB)越しのファイル連携
SMB共有フォルダを介してtemp->rename公開やclaimを行う運用。同一共有内では原子性が保たれる一方、ボリュームをまたぐ移動・他プロセスによる開放中の失敗・タイムスタンプの不確実性・変更通知の取りこぼしが追加のリスクになる。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。