TIPS: GAC 以外に DLL を配置する際のコード アクセス セキュリティ

SharePoint の Web フロントエンド サーバーに自前で開発した DLL を組み入れる際にはGAC に放り込め、というのがいろいろなブログで紹介されている一般的なやり方です。
では、ローカルの bin フォルダに放り込むとどうなるかというと、これだけでは動作しません。
これは、SharePoint Service のコード アクセス セキュリティの為です。

SharePoint のコードアクセスセキュリティでは、
GAC
_layouts フォルダのルート
_vti_bin フォルダのルート
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files (動的生成ファイル用フォルダ)
のアセンブリとページに対して信頼していますが、bin フォルダのアセンブリは一部のみ信頼しています。

この設定は、二つのセキュリティ ポリシー ファイル Windows SharePoint Services Minimal (WSS_Minimal) と Windows SharePoint Services Medium (WSS_Medium) で定義されています。

自分で持ち込んだ DLL をローカルの bin またはユーザー作成の任意のフォルダ (保守のため) に放り込む際には、下記のようにして DLL を信頼設定します。

解決策

特定のアセンブリをFullTrustに設定する

(1) セキュリティ ポリシー ファイルを作成し、トラストを設定する

※ ここでは FullTrust にしています

[AppFolder]/wss_honneamisetrust.config を作成(wss_minimaltrust.config をコピー)
コードグループ追加

                            <CodeGroup
                                    class="UnionCodeGroup"
                                    version="1"
                                    PermissionSetName="FullTrust"
                                    Name="Honneamise_Strong_Name"
                                    Description="This code group grants code signed with the Microsoft strong name full trust. ">
                                <IMembershipCondition
                                        class="StrongNameMembershipCondition"
                                        version="1"
                                        PublicKeyBlob="0024000004800000940000000602000000240000525341310004000001000100ABC9688F4AB27544EBBFBCB17135BB2DD7506C6331B9D5955379D6AC86B6FBF1BE7555F4E0BBDBF06B51AD779A8F78EF74C59E2A23B749A02FCDE50972225210F42D06204593265F3AFD60516478FAB80754D752411E14B66107939AFA5C67C789810B0362FC734E3F4B7DD1F7EFB649403C1C994B489BCC9894B5FD60C835DA"
                                />
                            </CodeGroup>
                            <CodeGroup
                                    class="UnionCodeGroup"
                                    version="1"
                                    PermissionSetName="FullTrust"
                                    Name="HonneamiseSharePoint_Strong_Name"
                                    Description="This code group grants code signed with the Microsoft strong name full trust. ">
                                <IMembershipCondition
                                        class="StrongNameMembershipCondition"
                                        version="1"
                                        PublicKeyBlob="002400000480000094000000060200000024000052534131000400000100010023E4E23C1C8ABFCD8B2A95D5B4A3EDA7DB08B441F0B5D2535AA5D3ED3A0F1732318387BB50DF39FAFFF37766C211AD81C5C93CD259E478CC40271E2CD54CCC4A246274EB73CE2709AB1334180FC522A76A3E54065436393E867A2944B8F3B5A9A753DC0F79155C35F4CA485EC64A4B38B96D4730154474012B30CDC97945D4CC"
                                />
                            </CodeGroup>
                 <!-- カスタムフォルダの場合 -->
                 <CodeGroup 
                        class="UnionCodeGroup"
                        version="1"
                        PermissionSetName="SPRestricted">
                    <IMembershipCondition 
                            class="UrlMembershipCondition"
                            version="1"
                            Url="$AppDirUrl$/_custom_bin/*"
                    />

(2) web.configを編集する

 <system.web>
		<securityPolicy>
			<trustLevel name="WSS_Honneamise" policyFile="wss_honneamisetrust.config"/>
		...
  <trust level="WSS_Honneamise" originUrl=""/>

セキュリティ ポリシーを再適用するには、IIS をリセットする必要があります。

参考情報

信頼レベルとアクセス許可は下記の通りです

アクセス許可完全 (Full)WSS_MediumWSS_Minimal
AspNetHostingPermission完全 (Full)中 (Medium)最小 (Minimal)
環境無制限、または、すべてのサブ アクセス許可の付与読み取り : TEMP、TMP、OS、USERNAME、COMPUTERNAME 
FileIO無制限、または、すべてのサブ アクセス許可の付与読み取り、書き込み、追加、PathDiscovery : アプリケーション ディレクトリ 
IsolatedStorage無制限、または、すべてのサブ アクセス許可の付与AssemblyIsolationByUser、UserQuota 指定 
リフレクション無制限、または、すべてのサブ アクセス許可の付与  
レジストリ無制限、または、すべてのサブ アクセス許可の付与  
セキュリティ無制限、または、すべてのサブ アクセス許可の付与実行、アサーション、ControlPrincipal、ControlThread、RemotingConfiguration実行
ソケット無制限、または、すべてのサブ アクセス許可の付与  
WebPermission無制限、または、すべてのサブ アクセス許可の付与元のホストへの接続 (構成されている場合) 
DNS無制限、または、すべてのサブ アクセス許可の付与無制限、または、すべてのサブ アクセス許可の付与 
印刷無制限、または、すべてのサブ アクセス許可の付与既定の印刷 
OleDBPermission無制限、または、すべてのサブ アクセス許可の付与  
SqlClientPermission無制限、または、すべてのサブ アクセス許可の付与無制限、または、すべてのサブ アクセス許可の付与 
EventLog無制限、または、すべてのサブ アクセス許可の付与  
メッセージ キュー無制限、または、すべてのサブ アクセス許可の付与  
サービス コントローラ無制限、または、すべてのサブ アクセス許可の付与  
パフォーマンス カウンタ無制限、または、すべてのサブ アクセス許可の付与  
ディレクトリ サービス無制限、または、すべてのサブ アクセス許可の付与  
SharePointPermission無制限、または、すべてのサブ アクセス許可の付与SharePointPermission.ObjectModel 
WebPartPermission無制限、または、すべてのサブ アクセス許可の付与WebPartPermission.ConnectionsWebPartPermission.Connections

コメントを残す