重い開発タスクの合間に時間をかけて何かを学ぶのは簡単です。マシン内に System.Security コンテンツの例がいくつかあることがわかりました。これまでこの名前空間を使用したことがなかったので、それについて学ぶために使用しました。体系的な勉強ではないので、考えてみるとなかなか整理できませんが、例を挙げて説明します。
1. 権限を設定します
1[FileIOPermission(SecurityAction.Demand, Write= "C:\temp.txt")]
2パブリック クラス アプリ: System.Windows.Forms.Form
3{
4 //省略
5}
FileIOPermissionAttribute は System.Security.Permissions で定義されます。この例では、App クラスを使用するときに C:temp.txt ファイルに対する書き込み権限が必要です。
.net Framework のドキュメントには、セキュリティ要件について次のように記載されています。「特定のアクセス許可を付与された呼び出し元のみがコードを呼び出せるようにするには、コードの呼び出し元に特定のアクセス許可またはアクセス許可セットがあることを宣言または強制できます。要件により、ランタイムはセキュリティ チェックを実行するため、呼び出し元のコードに制限を適用します。セキュリティ チェック中に、ランタイムは呼び出しスタックを調べて、スタック内の各呼び出し元のアクセス許可を確認し、要求されたアクセス許可が付与されているかどうかを判断します。
呼び出し元に
必要なアクセス許可がないことが判明した場合、セキュリティ チェックは失敗し、SecurityException がスローされます。
SecurityAction.Demand はクラスまたはメソッドに対して作用することができ、この場合はクラスに対して作用します。 Write は、FileIOPermission のプロパティの 1 つです。その他の一般的に使用されるプロパティには、Read、Append、All などがあります。
SecurityAction 列挙には、アセンブリに作用する値もいくつかあります。たとえば、次の例:
[assembly:SecurityPermission(SecurityAction.RequestMinimum,UnmanagedCode=true)]
SecurityAction.RequestMinimum は、リクエストを実行するための最小限の権限です。この行では、アセンブリがアンマネージ コードへの呼び出しを許可する必要があります。
宣言的メソッドに加えて、必須メソッドも使用できます。次のコード:
1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\temp.txt");
2トライ
3{
4 filePerm.Demand();
5
6 // ファイルにアクセスするコードをここに記述します
7}
8catch(セキュリティ例外例外)
9{
10 MessageBox.Show (メッセージを除く);
11 戻ります。
12}
13
2. ユーザーの役割の管理
ユーザーとその役割の管理は、多くのプログラムで使用されます。現在、asp.net 2.0 ではこの点が大幅に強化されており、開発者はテクノロジについてあまり知らなくても非常に優れたアプリケーションを作成できます。ただし、Windows フォーム アプリケーションの場合は、依然としてプログラマー自身が設定する必要がある箇所が多くあります。
userName とそれが属するロールをすでに知っていると仮定すると、現在のスレッドのプリンシパルを次のように設定できます
。
2GenericPrincipal genPrin = 新しい GenericPrincipal(genIdent, 役割);
3Thread.CurrentPrincipal = genPrin;
4
次に、ユーザーの役割を確認する方法が 3 つあります。
最初の方法は、GenericPrincipal.IsInRole メソッドを使用することです。
1GenericPrincipal currentPrin = Thread.CurrentPrincipal as GenericPrincipal;
2
3if (currentPrin != null && currentPrin.IsInRole("Manager"))
4{
5 //省略
6}
7
2 番目の方法は、PrincipalPermission クラスを使用する方法です。これは、アクセス許可設定の必須メソッドに似ています
。
2
3トライ
4{
5 prinPerm.Demand();
6
7 //何かをする
8}
9キャッチ
10{
11 //エラー処理
12}
3 番目のメソッドは、権限設定の宣言メソッドに似ています。
1private void DecPermButton_Click(object sender, System.EventArgs e)
2{
3 試してみる
4 {
5 PerformManagerAction();
6 // 何かをする
7}
8キャッチ
9 {
10 // エラー処理
11 }
12}
13
14[PrincipalPermission(SecurityAction.Demand、Role="マネージャー")]
15void PerformManagerAction()
16{
17}
セキュリティに関してもう 1 つ重要なことは暗号化です。今日は書く時間がないので、それについては別の日に話します。