SharePoint 2007 で権限を継承すると添付ファイルが消える(500エラー)原因
相当以前に「リストアイテムの添付ファイルが消える」現象をご報告しましたが、その原因がようやく判明しました。
Unable to access an attachment file (returns 500 error) on a list item after changing its permission setting.
これは「権限を再継承すると添付ファイルが削除される(ことがある)」で投稿した障害です(なんと去年の4月の話)。条件に該当すれば再現性100%な上、環境次第ではそれなりに深刻な影響になり得ますので要注意です。
まず、再現手順。リストに、特定の列を「沢山」作成します。
ここでは、日付列×9 を作成しました。
このリストに投稿したアイテムで、権限の継承を切り、独自権限を設定します。
このアイテムを編集し、添付ファイルをつけます。
このアイテムの権限を継承します。
そしてアイテムを開き、添付ファイルをクリックすると・・・
・・・開きません。
404(存在しない)のではなく、500(内部エラー)なのがミソです。
これは SharePoint 2007 の内部で「権限の継承」が行われた際のデータハンドリングに問題があり、権限データが喪失したため、ファイルが不正な状態になり、アクセスできなくなる為に発生します。権限設定でなく、データ整合性の問題のため、残念ながらシステムアカウントでもこのファイルにはアクセスできません。また、一旦こうなると添付ファイルの復旧も出来ません。バックアップからサルベージすることになります。
この例では手作業で権限設定を変更していますが、同じ操作をワークフローなどアプリケーション的に行った場合もこの問題は発生します。
障害のトリガになるのは、列の数です。具体的には、以下を越えるとこのエラーが発生するようです(数の正確性は保障できませんのでご注意ください)。また、一度発生した後は、列を削除しても減らしても駄目なようです。
一行テキスト + ハイパーリンク×2 : 64
複数行テキスト : 32
参照 + ユーザまたはグループ : 16
はい/いいえ : 16
数値 + 通貨 : 12
日付と時刻 : 8
集計 : 8
※ハイパーリンクは二列なのでダブルカウントされます。
特に危険なのが「集計」列です。関数まわりで試行錯誤していると、簡単に8列を越えることがあります。後から不要な集計列を減らしても、すでにリストの設計が「壊れて」いるため、障害が発生してしまいます。
しかしこの数字、どこかで見た覚えが・・・と思いましたが、SharePoint 2003 の列数制限でした。完全に同一ではありませんが。
リストやライブラリでの列の作成時の制限について
SharePoint Services リストに新しい列を追加すると、「列の制限を超えました」メッセージ
SharePoint 2007では列数は事実上無制限になりましたが、しかし内部スキーマは変わっていないらしいので、こうした問題が発生するのかもしれません。
ともあれ、MicrosoftからFixが出るまでは、SharePoint 担当の方は上記の列数制約を意識して、運用で回避されることを強くお勧めします。※2012年6月CUで修正されたようです
なお、既存のコンテンツについて、「壊れた」リストの有無を確認する方法と、対処方法については次回。
SharePoint 2007 で権限を継承すると添付ファイルが消える(500エラー)原因(2)
login