asp.net Web アプリケーションに対して application_start メソッド (global.asax 内) が呼び出されたときに、プロジェクトのルート ディレクトリ内に既定のディレクトリを作成できるはずです。
IIS ユーザーは webroot ディレクトリ (ディレクトリ作成用) に対する完全な権限を持っていないため、ディレクトリを作成しようとすると、アクセス拒否のエラー メッセージが表示されます。また、IIS ユーザーには、クライアントごとにルートへの完全なアクセス権が与えられません。以下のように実装する予定です。クライアントの期待に応えるために。このアプローチよりも良い方法があれば教えてください。
アプローチ 1:
a. サーバーに新しいユーザー アカウント (Windows) を作成します。b.構成ファイルにユーザー アカウント名を保持します。c.構成ファイルからそのアカウントを読み取り、ディレクトリ セキュリティ オブジェクトを使用して、そのユーザー アカウントでディレクトリを作成します。
コード:
DirectorySecurity dacl = new DirectorySecurity();
string useraccountForDirectoryCreate = System.Net.Dns.GetHostName() + "\\" + "testaccount";
dacl.AddAccessRule(new FileSystemAccessRule(useraccountForDirectoryCreate,
FileSystemRights.FullControl,
InheritanceFlags.
ContainerInherit |
InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow));
Directory.CreateDirectory(imageDirectory, dacl);
上記はIISサーバーでローカルに機能しました(クライアントのIISサーバーでテストしていません)
これに関する私の懸念: 単一のディレクトリを作成するためだけにサーバーで作成されるユーザー アカウントを作成するようにクライアントに依頼することは現実的ではないと思います。 Windows アカウントを作成し続けることは現実的ではありません。
アプローチ 2:
a) ディレクトリを作成するために Web ルートへのフル アクセス権を持つ IIS ユーザー アカウントを作成します。アカウント情報を Web 構成ファイルに保持します。c) Web 構成ファイルからアカウント情報を読み取り、上記のコードで許可されたディレクトリを作成します。
このアプローチの問題:次のエラーが表示されますか?
一部またはすべての ID 参照を翻訳できませんでした
次のステートメントが呼び出されたとき。
dacl.AddAccessRule(new FileSystemAccessRule(useraccountForDirectoryCreate,
FileSystemRights.FullControl,
InheritanceFlags.
ContainerInherit |
InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow));
この新しく作成されたユーザーのアクセス ルールを追加できないようです。なぜですか? 上記のエラー メッセージについて十分にググって理解しようとしましたが、エラーを解決できません。エラー メッセージをまったく理解できません。この問題の解決策を教えてください。配信までに時間がかかります。