サンドボックス ソリューションに対する制限

ここでは、サンドボックス ソリューションで実行されるコードの制限について説明します。

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

この記事の内容
トリプル ワーカー プロセス
セキュリティで保護されたワーカー プロセスの低い特権のセキュリティ トークン
セキュリティで保護されたワーカー プロセスの制限付きコード アクセスのセキュリティ ポリシー
特別なバージョンの Microsoft.SharePoint.dll アセンブリ
分割ページのレンダリング システム
リソース使用の制限
ソリューションのファーム関連の検証
ソリューションのファーム関連のブロック
クラスのファーム関連のブロック
その他の制約事項

SharePoint Online で使用可能

制限を適用するメカニズムに基づいて、さまざまな制限を次のカテゴリに分類できます。

  • トリプル ワーカー プロセス

  • セキュリティで保護されたワーカー プロセスの低い特権のセキュリティ トークン

  • セキュリティで保護されたワーカー プロセスの制限付きコード アクセスのセキュリティ ポリシー

  • 特別なバージョンの Microsoft.SharePoint.dll アセンブリ

  • 分割ページのレンダリング システム

  • リソース使用の制限

  • ソリューションのファーム関連の検証

  • ソリューションのファーム関連のブロック

  • クラスのファーム関連のブロック

  • その他の制約事項

トリプル ワーカー プロセス

サンドボックス ソリューションのアーキテクチャ」で説明されているように、セキュリティで保護されたコードは、標準の Microsoft ASP.NET ワーカー プロセスから個別のワーカー プロセスで実行され、3 番目の完全信頼プロキシ プロセスを呼び出します。このため、セキュリティで保護されたワーカー プロセスのアクセス許可にかかわらず、サンドボックス ソリューションに対して制限がいくつか適用されます。

制限

影響とコメント

ASP.NET ワーカー プロセスで実行される WebResources.axd ハンドラーは、セキュリティで保護されたワーカー プロセスのアセンブリに埋め込まれたリソースにアクセスできません。

サンドボックス ソリューションのアセンブリは、埋め込まれたリソースを使用できません。

セキュリティで保護されたワーカー プロセスの低い特権のセキュリティ トークン

セキュリティで保護されたワーカー プロセスは低い特権のセキュリティ トークンが付与されています (これはユーザーのセキュリティ トークンとは異なります)。このトークンにより次の制限が適用されます。

制限

影響とコメント

プロセスのコードは、ファイル システムに対しては読み取りも書き込みも行うことができません (ただし、グローバル アセンブリ キャッシュのアセンブリを読み取り実行することはできます)。

1. アプリケーション ページ、モバイル ページ、およびユーザー コントロール (.ascx ファイル) はサンドボックス ソリューションに展開できません。視覚的 Web パーツは、ユーザー コントロールが含まれているので展開できません。ユーザー コントロールとして実装されている委任コントロールもサンドボックス ソリューションでは許可されていません。

ただし、特定の種類のファイルについては、コンテンツ データベースに展開し、サンドボックス ソリューションに含めることができます。スクリプト ファイル、イメージ ファイル、およびアセンブリがこれに含まれます (詳細については、「How to: Create and Deploy a non-RESX Resources in a Sandboxed Solution」および「サンドボックス ソリューション内のアセンブリが展開される場所」を参照してください)。

注意

Microsoft Visual Studio拡張機能ギャラリー (英語)に用意されている拡張機能を使用すると、視覚的 Web パーツをサンドボックス ソリューション プロジェクトに追加できます。これにより、ビジュアル デザイナーを使用できるようになりますが、ユーザー コントロール (ASCX ファイル) については、分離コードと共にアセンブリにコンパイルされます。このユーザー コントロールがソリューションで展開されることはありません。したがって、この拡張機能では ASCX 展開の利点は有効になりません。

2. サイト定義には WebTemp*.xml ファイルが必要なので、この定義はサンドボックス ソリューションに展開できません。ただし、カスタム サイト タイプについては、WebTemp*.xml ファイルではなく WebTemplate 要素を使用すればサンドボックス ソリューションに展開できます。詳細については、「How to: Deploy a Web Template in a Sandboxed Solution」を参照してください。

3. リソース (.resx) ファイルはサンドボックス ソリューションに展開できません。ただし、リソース ファイルをサーバー ファイル システムに展開せずにサンドボックス ソリューションをローカライズする方法はいくつかあります。詳細については、「サンドボックス ソリューションのローカライゼーション」を参照してください。

4. web.config ファイルはサンドボックス ソリューションで展開できません。また、変更することもできません。同じことが .config 補助ファイルにも適用されます。詳細については、「[方法] 追加の .config ファイルを作成する」を参照してください。SPWebConfigModification クラスを使用できないことと合わせて考えると (このトピックの後半を参照)、これはサンドボックス ソリューションでは web.config の設定を変更できないことを意味します。

プロセスのコードはネットワークを呼び出すことができません。

セキュリティで保護されたワーカー プロセスを実行するサーバーで使用できるリソースにのみアクセスできます。たとえば、外部データベースにはアクセスできません。つまり、BCS モデルをサンドボックス ソリューションに展開することはできません。

プロセスのコードはレジストリに書き込むことができません。

プロセスのコードは、グローバル アセンブリ キャッシュに展開されていないアセンブリを呼び出すことはできません (ただし、サンドボックス ソリューションの一部として展開されたアセンブリにはこの規則は適用されません。詳細については、「サンドボックス ソリューション内のアセンブリが展開される場所」を参照してください)。

グローバル アセンブリ キャッシュにインストールされていない Microsoft SharePoint Foundation および SharePoint Server アセンブリは、セキュリティで保護されたワーカー プロセスで実行されるコードで呼び出すことはできません。たとえば、Microsoft.SharePoint.UserCode.dll アセンブリを呼び出すことはできません。

重要重要

セキュリティで保護されたワーカー プロセスのセキュリティ トークンは Microsoft.SharePoint.dll の API に対する呼び出しには適用されません。これらの API は、完全に信頼できる個別のプロセスで実行されるからです。たとえば、セキュリティで保護されたワーカー プロセスのセキュリティ トークンによって外部データベースへのアクセスがブロックされることで、サンドボックス ソリューションが SharePoint Web サイトの外部リストにアクセスできなくなることはありません。また、サンドボックス ソリューションを処理するサーバーと異なるサーバーにコンテンツ データベースが存在するときに、標準 SharePoint リストへのアクセスがブロックされることもありません。詳細については、「サンドボックス ソリューションのアーキテクチャ」を参照してください。

セキュリティで保護されたワーカー プロセスの制限付きコード アクセスのセキュリティ ポリシー

サンドボックス ソリューションのワーカー プロセスのコード アクセス セキュリティ (CAS) ポリシーは %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG\wss_usercode.config ファイルによって定義され、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\UserCode に配置されている web.config ファイルで参照されます。このポリシーでは、次の表で示すアクセス許可のみが付与されます。

付与されるアクセス許可

解説

SharePointPermission.ObjectModel

ただし、オブジェクト モデルのすべてのクラスを、セキュリティで保護されたコードで使用できるわけではありません。このトピックで後述する「特別なバージョンの Microsoft.SharePoint.dll アセンブリ」を参照してください。

SecurityPermission.Execution

AspNetHostingPermission = Minimal

最小のアクセス許可レベルでリソースを実行できますが、リソースまたはリソースの他のアクセス許可に対して読み取り/書き込みアクセスは許可されません。アンマネージ コードへの呼び出しも許可されません。

CAS ポリシーによって付与されないアクセス許可を次の表に示します。

拒否されるアクセス許可

解説

DirectoryServicesPermission

DnsPermission

EnvironmentPermission

EventLogPermission

FileIOPermission

このアクセス許可がない場合、ファイル システムに対するセキュリティで保護されたコードの読み取り/書き込みアクセスが拒否されます。このアクセス権は、セキュリティで保護されたワーカー プロセスのセキュリティ トークンでも拒否されます。

IsolatedStorageFilePermission

PrintingPermission

ReflectionPermission

このアクセス許可がない場合、ASP.NET Reflection API に対するセキュリティで保護されたコードのアクセスが拒否されます。したがって、マネージ コードのパブリックでないクラスとメンバーに対するアクセスも拒否されます。

RegistryPermission

このアクセス許可がない場合、レジストリに対するセキュリティで保護されたコードのアクセスが拒否されます。このアクセス権は、セキュリティで保護されたワーカー プロセスのセキュリティ トークンでも拒否されます。

SecurityPermission

このアクセス許可がない場合、アンマネージ コードに対する、およびスレッドとアプリケーション ドメイン サブシステムに対するセキュリティで保護されたコードのアクセスが拒否されます。また、このアクセス許可がないと、悪質なコードが CAS ポリシーの制限を回避しにくくなります。

SmtpPermission

SqlClientPermission

このアクセス許可がない場合、サンドボックス ソリューションのコードは SharePoint データベースにアクセスできません。ただし、Microsoft.SharePoint.dll を呼び出すコードは例外で、そのデータベースにアクセスできます。このとき、呼び出しは、そのアセンブリの特別バージョンによって許可されているとみなされます。特別なアセンブリとその役割の詳細については、このトピックで後述する「特別なバージョンの Microsoft.SharePoint.dll アセンブリ」を参照してください。

重要重要

Microsoft.SharePoint.dll 以外の SharePoint Foundation アセンブリおよび SharePoint Server アセンブリ内の API への呼び出しは、そのアセンブリがグローバル アセンブリ キャッシュにあり、AllowPartiallyTrustedCallers 属性が指定されている場合でも、この制限が原因で失敗することがよくあります。Microsoft.SharePoint.dll だけに特別なバージョンがあり、これにより呼び出しがセキュリティで保護されたワーカー プロセスを回避して、完全信頼プロセスで実行できます。

SocketPermission

UIPermission

WebPermission

CAS ポリシーの詳細については、「ASP.NET でコード アクセス セキュリティを使用する」、「セキュリティ ガイドライン: .NET Framework 2.0」、および「コード アクセス セキュリティの実践」を参照してください。

重要重要

セキュリティで保護されたワーカー プロセスの CAS ポリシーは Microsoft.SharePoint.dll の API に対する呼び出しには適用されません。これらの API は、完全に信頼できる個別のプロセスで実行されるからです。たとえば、GetLocalizedString への呼び出しは、ファイル システムのリソース ファイルから読み取ることができます。詳細については、「サンドボックス ソリューションのアーキテクチャ」を参照してください。

注意

CAS ポリシーでは、厳密な名前を持つ Microsoft Office アセンブリを例外とします。これらのアセンブリには完全信頼が付与されます。

AllowPartiallyTrustedCallers 属性を持たないアセンブリは呼び出せない

セキュリティで保護されたワーカー プロセスのコードに完全信頼に満たない信頼性を提供する CAS ポリシーには、そのポリシーの詳細に関係なく重要な副作用があります。つまり、CAS ポリシーによって適用されるコードは、AllowPartiallyTrustedCallersAttribute を持つアセンブリのみを呼び出すことができます。このため、Microsoft .NET Framework、SharePoint Foundation、SharePoint Server アセンブリなど、この属性がないアセンブリは、セキュリティで保護されたワーカー プロセスのコードでは呼び出すことができません。次の表はこの制限の影響を示しています。

AllowPartiallyTrustedCallers 属性を持たないアセンブリ

影響とコメント

Microsoft.SharePoint.WorkflowActions

コード化されたワークフローはサンドボックス ソリューションに展開できません。こうしたワークフローでは、このアセンブリのクラスへのアクセスが要求されるからです (Microsoft SharePoint Designer で作成され、Visual Studio で変更された可能性がある "コードがない" ワークフローについては、サンドボックス ソリューションに展開できます)。

使用できる、および使用できない .NET Framework と SharePoint アセンブリの一覧については、「サンドボックス ソリューションから .NET アセンブリを使用できるかどうか」および「サンドボックス ソリューションから SharePoint アセンブリを使用できるかどうか」を参照してください。

特別なバージョンの Microsoft.SharePoint.dll アセンブリ

サンドボックス ソリューションのアーキテクチャ」で説明されているように、セキュリティで保護されたワーカー プロセスのコードから Microsoft.SharePoint.dll への呼び出しは、そのアセンブリの特別バージョンにリダイレクトされます。特別なバージョンは、セキュリティで保護されたワーカー プロセスの他のアセンブリに比べて低い権限が付与されていたり、高い権限が付与されていたりします。

最も重要な制限は、特別なバージョンには標準アセンブリのクラスおよびメソッドのサブセットのみが含まれる点です。特別バージョンのアセンブリに含まれていない API をコードが呼び出すと例外がスローされます。次の表では、特別バージョンのアセンブリに含まれない API の一部について説明します。アセンブリに含まれるクラスの一覧については、「サンドボックス ソリューションから使用可能な Microsoft.SharePoint.dll API」を参照してください。

ブロックされている API

影響とコメント

ほとんどの Microsoft.SharePoint.Administration 名前空間 (SPWebApplication クラス、SPFarm クラスなど)

1. サンドボックス ソリューションのフィーチャーをファームまたは Web アプリケーションを対象範囲として展開できません。したがって、この範囲にのみ展開できるフィーチャーはサンドボックス ソリューションには展開できません。たとえば、Business Data Connectivity モデルはサンドボックス ソリューションに展開できません。

2. オブジェクト モデルのサイト コレクション レベルの上位にあるオブジェクトおよびリソースで、サンドボックス ソリューションで使用できるものはほとんどありません。

3. Web アプリケーションに登録されているドキュメント コンバーターは、サンドボックス ソリューションでは登録できません。

Microsoft.SharePoint.WebControls 名前空間のすべてのコントロール クラス

サンドボックス ソリューションのコードは ASP.NET コントロールに制限されます。

WebPartMobileAdapter クラス

セキュリティで保護されたコードには Web パーツ モバイル アダプターを含めることはできません。

Microsoft.SharePoint.WebPartPages.WebPart クラス

サンドボックス ソリューションに含めることができるのは、ASP.NET クラス System.Web.UI.WebControls.WebParts.WebPart から派生する Web パーツだけです。

SPJobDefinition

タイマー ジョブはサンドボックス ソリューションに含めることはできません。

SPWebConfigModification

サンドボックス ソリューションでは、web.config の設定をプログラムで変更できません。サンドボックス ソリューションでは、サーバーのファイル システムに対しては読み取りも書き込みも行えないので (このトピックの前半を参照)、これを合わせて考えると、サンドボックス ソリューションでは web.config の設定を変更できないことになります。

RunWithElevatedPrivileges

サンドボックス ソリューションのメソッドを、アプリケーション プールが実行されているユーザー ID の昇格された特権で実行するように構成することはできません。

さらに、メソッドが特別バージョンのアセンブリに含まれている場合でも、API に渡されたパラメーターに追加の制限が適用されることがあります。たとえば、SPSite(String) コンストラクターおよび SPSite(Guid) コンストラクターは、サンドボックス ソリューションで使用できますが、そのコンストラクターに渡すことができるのは、サンドボックス ソリューションがインストールされているサイト コレクションを参照する URL または GUID のみです。このため、サンドボックス ソリューションは、サンドボックス ソリューションがインストールされているサイト コレクション外からは Web サイト、リスト、または他のリソースにアクセスできません。

ただし、特別なアセンブリのゲートキーパーによって許可されている Microsoft.SharePoint.dll への呼び出しは、他のアセンブリへの呼び出しと比べて高い権限が非常に重要な方法で付与されます。呼び出された API は、セキュリティで保護された制限付きのワーカー プロセスでは実行されません。代わりに、呼び出しは完全信頼プロキシ プロセスに転送され、API はここで制限なしで実行されます。つまり、これらの呼び出しは、他のアセンブリ (他の SharePoint アセンブリも含む) への呼び出しでは実行できない処理 (SharePoint データベースへのアクセスなど) を実行できます。

分割ページのレンダリング システム

サンドボックス ソリューションのアーキテクチャ」で説明したように、クライアント コンピューターが、サンドボックス ソリューションのコンポーネント (サンドボックス ソリューションに展開されている Web パーツなど) を含む SharePoint ページを要求すると、SharePoint では複数のページ オブジェクトがレンダリングされます。1 つは ASP.NET のワーカー プロセス (w3wp.exe) でレンダリングされ、もう 1 つはセキュリティで保護されたワーカー プロセスでレンダリングされます。セキュリティで保護されていないコンポーネントはすべて、ASP.NET ワーカー プロセスのページでレンダリングされ、セキュリティで保護された最初のコンポーネントは、セキュリティで保護されたワーカー プロセスのページ オブジェクトでレンダリングされます。セキュリティで保護されたワーカー プロセスのページは、完全にレンダリングされるときに ASP.NET プロセスのページ オブジェクトに結合されます。ユーザーが要求したページにセキュリティで保護されたコンポーネントが複数ある場合は、セキュリティで保護されたワーカー プロセスのユーザー独自のページ オブジェクトでそれぞれが個別にレンダリングされます。そして、各ページ オブジェクトが ASP.NET プロセスのページ オブジェクトに結合されます。

このシステムから 1 つわかるのは、サンドボックス ソリューションに展開された Web パーツは、Web パーツ接続のプロバイダー Web パーツでもコンシューマー Web パーツでもないという点です。これは、セキュリティで保護された各 Web パーツは、自身の個別のページ オブジェクトで完全にレンダリングされるからです (ページ間の Web パーツ接続は Microsoft.SharePoint.WebPartPages.WebPart クラスから派生した Web パーツによって許可されますが、そのクラスは shim Microsoft.SharePoint.dll によってブロックされています (このトピックの前半を参照)。サンドボックス ソリューションでは、System.Web.UI.WebControls.WebParts.WebPart クラスから派生した Web パーツのみがでサポートされるので、ページ間の Web パーツ接続は許可されません)。

また、分割ページのレンダリング システムからわかることもあります。ASP.NET の型の中には、セキュリティで保護されたプロセスのページ オブジェクトから、返される最終ページに結合できないものがあります。これは、こうした結合できない型のオブジェクトを持つ ASP.NET Page オブジェクト (またはその子オブジェクト) のプロパティには、サンドボックス ソリューションのコードで書き込んでも無意味であることを意味します。以下の表は、これらの型の一部を示しています。

結合できない型

影響とコメント

ClientScriptManager

ClientScript プロパティは、セキュリティで保護されたコードによって書き込まれないようにします。ただし、クライアント側のスクリプトは他の方法でページに登録できます。たとえば、LiteralControl としてスクリプトを埋め込んで、CreateChildControls() メソッドのコントロール コレクションに追加します。

ScriptManager

ScriptManager オブジェクトは、セキュリティで保護されたコードによって、どのオブジェクトのコントロール コレクションにも追加されないようにします。

Cache

Cache プロパティは、セキュリティで保護されたコードによって書き込まれないようにします。

MasterPage

Master プロパティは、セキュリティで保護されたコードによって書き込まれないようにします。ただし、このコードで MasterPageFile プロパティに書き込むと、ページが他のマスター ページを参照するように指定できます。

HttpSessionState

Session プロパティは、セキュリティで保護されたコードによって書き込まれないようにします。

リソース使用の制限

サンドボックス ソリューションではシステム リソースを過度に使用できません。この要件は、SharePoint Foundation リソース監視インフラストラクチャによって適用されます。

詳細については、「SharePoint 2010 のサンドボックス ソリューションのリソース使用率制限」と「サンドボックス ソリューションのアーキテクチャ」を参照してください。

ソリューションのファーム関連の検証

「Solution Validation System」で説明されているように、ファーム管理者は、サンドボックス ソリューションに対してカスタム ソリューション検証を実行する場合があり、これによりサンドボックス ソリューションで実行できる作業に対して追加の制限が適用されることがあります。このため、ファーム管理者に連絡し、どの検証機能を使用しているかを確認する必要があります。

ソリューションのファーム関連のブロック

ファーム管理者は、サンドボックス ソリューションをサーバーの全体管理のブロックされたソリューションのリストに配置します。

クラスのファーム関連のブロック

ファーム管理者はカスタム コードを実行し、セキュリティで保護されたワーカー プロセスで、指定されたマネージ クラスが呼び出されないようにブロックできます。詳細については、「SPRestrictedObjectModel」を参照してください。

その他の制約事項

次の表は、サンドボックス ソリューションに適用される制限で、このトピックのどのセクションにも当てはまらないものを示しています。

制限

コメントと影響

HideCustomAction 要素はサンドボックス ソリューションに展開できません。

サンドボックス ソリューションを使用して、管理ページ ([サイト設定] ページなど) のメニュー項目、リボンのボタン、またはリンクを非表示にできません。ただし、新しいカスタム アクションをサンドボックス ソリューションでこれらのアイテムに追加することはできます。詳細については、「サンドボックス ソリューションで実装できるコンポーネント」を参照してください。

CustomActionGroup 要素はサンドボックス ソリューションに展開できません。

サンドボックス ソリューションでは新しいカスタム アクションを追加できますが、カスタム アクションのアクション グループを新しく作成することはできません。詳細については、「サンドボックス ソリューションで実装できるコンポーネント」を参照してください。

委任コントロールのコントロール候補 (Control 要素) をサンドボックス ソリューションに登録できません 。

関連項目

概念

サンドボックス ソリューションで実装できるコンポーネント

サンドボックス ソリューションを開発するためのベスト プラクティス

サンドボックス ソリューションのアーキテクチャ