2005年08月09日

アセンブリロード時に許可チェック

  
以下のような属性を付加することで、アセンブリのロード時に許可チェックが行える。

[assembly: UIPermission(SecurityAction.RequestMinimum, Unrestricted=true)]

SecurityActionは、以下の3種類の値を持つ。

RequestMinimum
 アセンブリに最低限必要なアクセス許可
RequestOptional
 アセンブリに指定されている以外の許可を与えない。
 ただし、同時に他の許可属性もある場合には、その許可も与える。
RequestRefuse
 アセンブリにアクセス許可が与えられていた場合は、無効にする。
 ポリシーでは、許可が与えられているが、その許可を取り消す。

つまり、上の例では、UIPermissionが与えられていないと、アセンブリロード時にエラーとなり、実行することができない。

では、もう一つ例を示す。

[assembly: SqlClientPermission(SecurityAction.RequestMinimum, Unrestricted=true)]
[assembly: PrintingPermission(SecurityAction.RequestRefuse, Unrestricted=true)]

この場合、FullTrustのアクセス許可がポリシーで与えられていると、SqlClientPermission を始め、PrintingPermission以外の全てのアクセスが許可されることになる。
つまり、許可されないのは、 PrintingPermissionのみだ。

こういった例から分かるように、属性を付けることで、実際の該当する処理を実行したときに、例外が発生するのではなく、アセンブリロード時にエラーにし、起動できなくしたり、あるいは、ポリシーで与えたよりも、厳しい許可アクセス制限を付けたいときに利用できる。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/29992996