SharePoint Server での GDPR 対応

適用対象:

  • SharePoint Server 2013
  • SharePoint Server 2016
  • SharePoint Server 2019
  • SharePoint Server Subscription Edition

個人情報保護の一部として、次のことをお勧めします。

ユーザー生成コンテンツ

SharePoint Server のサイトとライブラリに含まれているユーザー生成コンテンツについて推奨される基本的な操作を次に示します。

ファイル共有、SharePoint のサイトおよびライブラリについて推奨される作業の手順を次に示します。

  1. Azure Information Protection スキャナーをインストールし、構成します。

    • 使用する機密データの種類を決定します。

    • 使用する SharePoint サイトを指定します。

  2. 検出サイクルを完了します。

    • 検出モードでスキャナーを実行し、検出結果を検証します。

    • 必要に応じて、条件と機密情報の種類を最適化します。

    • 自動的に適用されるラベルの予期される影響を評価します。

  3. Azure Information Protection スキャナーを実行して、対象となるドキュメントにラベルを適用します

  4. 保護のために次の操作を実行します。

    a. 目的としたラベルのドキュメントを保護するための Exchange データ損失防止ルールを構成します。

    b. ファイルにアクセスできるユーザーを制限するアクセス許可を必ず確認してください。

    c. SharePoint の場合は、ライブラリに IRM 保護を使用します。

  5. 監視のため、Windows Server のログを SIEM ツールに統合します。

    a. データ主体の要求の個人データを検索するには、Search Center または電子情報開示を使用します。

機密データにラベルを適用する場合は、保護で構成されていないラベルを必ず使用してください。 保護には、サービスがファイル内の機密データを検出できないようにする暗号化が含まれています。

Azure Information Protection スキャナーを使用して個人データを検索してラベル付けする方法の詳細については、Microsoft GDPR Data Discovery Toolkit (https://aka.ms/gdprpartners) を参照してください。

条件に対してスキャナーを構成し、Microsoft Purview データ損失防止 (DLP) 機密情報の種類を使用する方法については、「Azure Information Protectionの自動および推奨分類の条件を構成する方法」を参照してください。 新しいOffice 365機密情報の種類はスキャナーですぐに使用できず、カスタム機密情報の種類はスキャナーで使用できないことに注意してください。

Office ファイルから個人情報を削除する

SharePoint ドキュメント ライブラリに格納されている Office ファイルから個人情報 (Word ドキュメント内のメタデータやコメントなど) を削除するには、手動で行う必要があります。 次の手順を実行します。

  1. SharePoint Server からドキュメントのコピーをローカル ディスクにダウンロードします。

  2. SharePoint ドキュメント ライブラリからドキュメントを削除します。

  3. ドキュメントを調べ非表示のデータと個人情報を削除する」の手順に従います。

  4. ドキュメントを SharePoint ドキュメント ライブラリに再びアップロードします。

テレメトリ ファイルとログ ファイル

ULS ログ

SharePoint Server の統合ログ サービス (ULS) と使用状況ログは、さまざまなシステム機能を追跡し、ユーザー情報を含めることができます。 ULS ログと使用状況ログはテキスト ファイルであり、さまざまな検索ツールを使用して検索できます。 Merge-SPLogFile PowerShell コマンドレットを使用すると、ファーム内の複数のサーバー上の ULS ログからレコードを返す方法が提供されます。

ビジネス目的で必要な最小値にログ保持ポリシーを設定することを検討してください。 SharePoint Server でのログ記録の構成については、「SharePoint Server で診断ログを構成する」を参照してください。

一部のシステム イベントも Windows イベント ログに記録されることに注意してください。

利用状況データベース

SharePoint Server Usage データベース (既定の名前WSS_Logging) には、ULS ログに含まれる情報のサブセットが含まれています。 このデータベース内のデータの最大保持期間は 30 日です。 ビジネス ニーズで許可される最短の期間に構成することをお勧めします。 詳細については、「 SharePoint Server で診断ログを構成する」を参照してください。

検索クエリの履歴と利用状況レコードには、ユーザー名への参照が含まれています。

クエリの履歴とよく利用するクエリ

SharePoint Server では、クエリ履歴と "お気に入り" クエリは 365 日後に自動的に期限切れになります。 ユーザーがorganizationを離れた場合は、次の手順を使用して、クエリ履歴からユーザーの名前への参照を削除できます。

以下に示す SQL クエリは、SharePoint Server に適用されます。これらのクエリでは次の操作が実行されます。

  • ユーザーのクエリ履歴またはよく利用するクエリをエクスポートする

  • クエリの履歴からユーザー名への参照を削除する

注:

SharePoint Server データベースへのストアド プロシージャの追加は通常サポートされていません。 Microsoft では、この記事で説明するストアド プロシージャを SharePoint Server データベースに追加して実行することをサポートするために、このポリシーを例外とします。

特定の日付以降のユーザーのクエリをエクスポートする

以降で実行される Link Store クエリ ログ テーブルからクエリをエクスポートするには、次の手順に@UserName@StartTime従います。

[In dbo].[LinkStore_<ID>]:
CREATE PROCEDURE proc_MSS_GetQueryTermsForUser 
( 
    @UserName nvarchar(256), 
    @StartTime datetime 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT searchTime, queryString 
    FROM 
        dbo.MSSQLogPageImpressionQuery 
    WITH 
        (NOLOCK) 
    WHERE 
        userName = @UserName AND 
        searchTime > @StartTime 
END 
GO 

過去 100 日間のユーザー クエリをエクスポートする

DECLARE @FROMDATE datetime 
SET @FROMDATE = DATEADD(day, -100, GETUTCDATE()) 
EXECUTE proc_MSS_GetQueryTermsForUser '0#.w|domain\username', @FROMDATE 

ユーザーがよく利用するクエリをエクスポートする

次の手順を使用して、ユーザーのお気に入りのクエリを、以降 <DateTime>の によって@UserName実行される検索管理 DB の個人の結果テーブルからエクスポートします。

In [dbo].[Search_<ID>]:
CREATE PROCEDURE proc_MSS_GetPersonalFavoriteQueries 
( 
    @UserName nvarchar(256), 
    @SearchTime datetime 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT max(queries.SearchTime) as SearchTime, 
           max(queries.querystring) as queryString, 
           max(url.url) as URL 
    FROM MSSQLogOwner owners WITH(NOLOCK) 
    JOIN MSSQLogPersonalResults results WITH(NOLOCK) on owners.OwnerId = results.OwnerId 
    JOIN MSSQLogUrl url WITH(NOLOCK) on results.ClickedUrlId = url.urlId 
    JOIN MSSQLogPersonalQueries queries WITH(NOLOCK) on results.OwnerId = queries.OwnerId 
    WHERE queries.SearchTime > @SearchTime 
        AND queries.UserName = @UserName 
        GROUP BY queries.QueryString,url.url 
END 
GO 

過去 100 日間のユーザーのよく利用するクエリをエクスポートする

DECLARE @FROMDATE datetime 
SET @FROMDATE = DATEADD(day, -100, GETUTCDATE()) 
EXECUTE proc_MSS_GetPersonalFavoriteQueries '0#.w|domain\username', @FROMDATE 

過去 X 日よりも古いユーザー名への参照を削除する

次の手順を使用して、Links Store クエリ ログ テーブルから、古いユーザー@Days名の参照をすべて削除します。 プロシージャは、 に到達するまで、後方への参照のみを削除します @LastCleanupTime。

In [dbo].[LinksStore_<ID>]:  
CREATE PROCEDURE proc_MSS_QLog_Cleanup_Users 
( 
    @LastCleanupTime datetime, 
    @Days int 
) 
AS 
BEGIN 
    DECLARE @TooOld datetime 
    SET @TooOld = DATEADD(day, -@Days, GETUTCDATE()) 
    DECLARE @FromLast datetime 
    SET @FromLast = DATEADD(day, -@Days, @LastCleanupTime) 
    BEGIN TRANSACTION 
         UPDATE MSSQLogPageImpressionQuery 
    SET userName = 'NA' 
    WHERE @FromLast <= searchTime AND searchTime < @TooOld 
    UPDATE MSSQLogO14PageClick 
    SET userName = 'NA' 
    WHERE @FromLast <= searchTime AND searchTime < @TooOld 
    COMMIT TRANSACTION 
END 
GO 

経過日数が X 日を超えている特定のユーザー名への参照を削除する

リンク ストアのクエリ ログ テーブルから 特定 のユーザー名への参照を削除するには、次の手順に従います。このテーブルでは、参照が古くなっています @Days 。 プロシージャは、 に到達するまで、後方への参照のみを削除します @LastCleanupTime。

In [dbo].[LinksStore_<ID>]:
CREATE PROCEDURE proc_MSS_QLog_Cleanup_Users 
( 
    @UserName nvarchar(256),
    @LastCleanupTime datetime, 
    @Days int 
) 
AS 
BEGIN 
    DECLARE @TooOld datetime 
    SET @TooOld = DATEADD(day, -@Days, GETUTCDATE()) 
    DECLARE @FromLast datetime 
    SET @FromLast = DATEADD(day, -@Days, @LastCleanupTime) 
    BEGIN TRANSACTION 
         UPDATE MSSQLogPageImpressionQuery 
    SET userName = 'NA' 
    WHERE @FromLast <= searchTime AND searchTime < @TooOld AND userName = @UserName
    UPDATE MSSQLogO14PageClick 
    SET userName = 'NA' 
    WHERE @FromLast <= searchTime AND searchTime < @TooOld AND userName = @UserName
    COMMIT TRANSACTION 
END 
GO 

クエリ履歴から、指定されている日付から過去 30 日間のすべてのユーザー名への参照を削除する

EXECUTE proc_MSS_QLog_Cleanup_Users '1-1-2017', 30 

利用状況レコードを削除する

SharePoint Server は、3 年後に使用状況レコードを自動的に削除します。 このようなレコードは、次の手順を使用して手動で削除できます。

削除されたドキュメントに関連付けられているすべての利用状況レコードを削除するには、次の手順に従います。

  1. 最新の SharePoint 更新プログラムがインストールされていることを確認します。 

  2. SharePoint 管理シェルを開始します。

  3. 利用状況分析による分析を停止してクリアします。

    $tj = Get-SPTimerJob -Type Microsoft.Office.Server.Search.Analytics.UsageAnalyticsJobDefinition 
    $tj.DisableTimerjobSchedule()
    $tj.StopAnalysis() 
    $tj.ClearAnalysis() 
    $tj.EnableTimerjobSchedule()
    
  4. 分析が再び開始されるまで待ちます (最大 24 時間かかります)。 

  5. 分析の次の実行時に、分析レポート データベースからすべてのレコードがダンプされます。 この完全ダンプは、多数のエントリを含む大規模なデータベースに対してしばらく時間がかかる場合があります。

  6. 10 日間待ちます。 分析は毎日実行され、削除されたドキュメントに関連付けられているレコードは、10^th^ 実行後に削除されます。 多くのレコードを削除する必要がある場合、この実行に通常よりも時間がかかる場合があります。 

SharePoint Server 2010 での個人情報と検索

FAST Search Server 2010 for SharePoint

FAST Search Server 2010 Add-On は、インデックスにファイルを格納するだけでなく、FixML という中間形式でファイルを格納します。 FiXML ファイルは、既定では毎晩午前 3 時から午前 5 時の間に定期的に圧縮されます。 圧縮すると、削除されたファイルが FiXML ファイルから自動的に削除されます。 削除されたユーザーまたはドキュメントに属する情報をタイムリーに削除するには、圧縮が常に有効になっていることを確認します。

ハイブリッド検索ソリューションに推奨されるアクションは、SharePoint Server または SharePoint Online での検索の場合と同じです。 次の 2 つのハイブリッド検索ソリューションがあります。

クラウド ハイブリッド検索ソリューション -SharePoint 用クラウド ハイブリッド検索ソリューションを使用すると、オンプレミスコンテンツを含むすべてのクロールされたコンテンツに、Office 365の検索インデックスにインデックスを作成します。 ユーザーは Office 365 の検索インデックスをクエリすることで、オンプレミスと Office 365 の両方のコンテンツからの検索結果を取得します。 ドキュメントが SharePoint Server 環境から削除されると、Office 365の検索インデックスからも削除されます。 クラウド ハイブリッド検索ソリューションの詳細 と、 クラウド ハイブリッド検索で検索コンポーネントとデータベースが対話する方法 を確認して、GDPR がハイブリッド環境にどのように影響するかを理解してください。

ハイブリッド フェデレーション検索ソリューション -ハイブリッド フェデレーション検索ソリューションでは、SharePoint Server のインデックスとOffice 365内のインデックスの両方を使用します。 SharePoint Server と SharePoint Online の検索サービスではいずれも、別の環境にある検索インデックスをクエリして、フェデレーション検索結果を返すことができます。 ユーザーが検索センターから検索を実行すると、SharePoint Server の検索インデックスと Office 365 の検索インデックスの両方から検索結果が返されます。 ハイブリッドフェデレーション検索ソリューションの詳細については、GDPR がハイブリッド 環境にどのように影響するかを理解してください。

オンプレミスからクラウドへの移行

SharePoint Server から SharePoint Online にデータを移行する際に、一度に両方の場所に重複データが存在する可能性があります。 移行中のデータを削除する必要がある場合は、最初に移行を完了してから、両方の場所からデータを削除することをお勧めします。 どちらの場所からでも、エクスポート用のデータを照会できます。

ユーザー プロファイル データ

ユーザー プロファイル サービスを使用すると、さまざまな外部ソースからプロファイル データをインポートできます。 このようなユーザー プロファイル データのクエリと更新は、データがマスターされるシステムで処理する必要があります。 外部システムを更新する場合は、SharePoint Server のユーザー プロファイルをもう一度同期してください。

SharePoint ユーザー プロファイルからユーザーの個人情報を削除するには、次の基本的な手順に従います。

  1. SharePoint Server ユーザー プロファイルにフィードする外部システムからユーザー情報を削除します。 ディレクトリ同期を使用している場合は、オンプレミスの Active Directory環境からユーザーを削除する必要があります。

  2. SharePoint Server でプロファイル同期を実行します。

  3. SharePoint Server からプロファイルを削除します。 これを行うと、SharePoint Server は 30 日以内にユーザー プロファイル データベースからプロファイルを完全に削除します。 ユーザーのプロファイル ページと個人用サイトが削除されます。

ユーザーのプロファイルを削除した後も、ユーザーがアクセスしたサイト コレクションに限られた情報 (ユーザー ID など) が記録される場合があります。 特定のサイト コレクションからこのデータを削除する場合は、CSOM を使用してこれを行うことができます。 サンプル スクリプトを次に示します。

$username = "<admin@company.sharepoint.com>"
$password = "password"
$url = "<https://site.sharepoint.com>"
$securePassword = ConvertTo-SecureString $Password -AsPlainText -Force

# the path here might need to change if you use the SharePoint Server Client Components SDK in a different location.
Add-Type -Path "$env:CommonProgramFiles\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "$env:CommonProgramFiles\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

# connect/authenticate to SharePoint Online and get ClientContext object.
$clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($url)
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword)
$clientContext.Credentials = $credentials
if (!$clientContext.ServerObjectIsNull.Value)
{
    Write-Host "Connected to SharePoint Online site: '$Url'" -ForegroundColor Green
}

# Get user
$user = $clientContext.Web.SiteUsers.GetByLoginName("i:0#.f|membership|user@company.sharepoint.com")

# Redact user
$user.Email = "Redacted"
$user.Title = "Redacted"
$user.Update()
$clientContext.Load($user)
$clientContext.ExecuteQuery()

# Get users
$users = $clientContext.Web.SiteUsers

# Remove user from site
$users.RemoveById($user.Id)
$clientContext.Load($users)
$clientContext.ExecuteQuery()