SharePoint Server의 GDPR

적용 대상:

  • SharePoint Server 2013
  • SharePoint Server 2016
  • SharePoint Server 2019
  • SharePoint Server 구독 버전

개인 정보 보호의 일환으로 다음을 권장합니다.

사용자 생성 콘텐츠

SharePoint Server 사이트 및 라이브러리에 포함된 사용자 생성 콘텐츠에 대한 기본 권장 접근법은 다음과 같습니다.

  • Azure Information Protection을 사용하여 중요한 데이터를 레이블 지정합니다.

  • SharePoint Server 검색eDiscovery를 사용하여 중요한 데이터를 검색합니다.

파일 공유와 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 또는 eDiscovery를 사용합니다.

중요한 데이터에 레이블을 적용할 때는 보호로 구성되지 않은 레이블을 사용해야 합니다. 보호에는 서비스에서 파일의 중요한 데이터를 검색하지 못하도록 하는 암호화가 포함됩니다.

Azure Information Protection 스캐너를 사용하여 개인 데이터를 찾고 레이블을 지정하는 방법에 대한 자세한 내용은 Microsoft GDPR 데이터 검색 도구 키트(https://aka.ms/gdprpartners)를 참조하세요.

조건에 맞게 스캐너를 구성하고 DLP(Microsoft Purview 데이터 손실 방지) 중요한 정보 유형을 사용하는 방법에 대한 자세한 내용은 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 cmdlet은 팜의 여러 서버에 있는 ULS 로그에서 레코드를 반환하는 방법을 제공합니다.

로그 보존 정책을 비즈니스용으로 필요한 최소값으로 설정하는 것이 좋습니다. SharePoint Server에서 로깅을 구성하는 방법에 대한 자세한 내용은 SharePoint Server에서 진단 로깅 구성을 참조하세요.

일부 시스템 이벤트는 Windows 이벤트 로그에도 로깅됩니다.

사용 현황 데이터베이스

SharePoint Server 사용 데이터베이스(기본 이름 WSS_Logging)에는 ULS 로그에 있는 정보의 하위 집합이 포함되어 있습니다. 이 데이터베이스의 최대 데이터 보존 기간은 30일입니다. 비즈니스 요구 사항에 의해 허용되는 가장 짧은 기간 동안 구성하는 것이 좋습니다. 자세한 내용은 SharePoint Server에서 진단 로깅 구성을 참조하세요.

검색 쿼리 기록 및 사용 현황 레코드에는 사용자 이름에 대한 참조가 포함되어 있습니다.

쿼리 기록 및 즐겨찾기 쿼리

SharePoint Server에서 쿼리 기록 및 '즐겨찾기' 쿼리는 365일 후에 자동으로 만료됩니다. 사용자가 organization 나가면 아래 단계를 사용하여 쿼리 기록에서 사용자 이름에 대한 참조를 제거할 수 있습니다.

다음 SQL 쿼리는 SharePoint Server에 적용되며 다음 작업을 수행할 수 있습니다.

  • 사용자의 쿼리 기록 또는 즐겨찾기 쿼리 내보내기

  • 쿼리 기록의 사용자 이름에 대한 참조 제거

참고

SharePoint Server 데이터베이스에 저장 프로시저를 추가하는 것은 일반적으로 지원되지 않습니다. Microsoft는 이 문서에 설명된 저장 프로시저를 SharePoint Server 데이터베이스에 추가하고 실행할 수 있도록 이 정책에 예외를 적용합니다.

특정 날짜 이후 사용자 쿼리 내보내기

다음 절차에 따라 링크 저장소 쿼리 로그 테이블에서 쿼리를 내보내고 이후 에서 @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 

사용자의 즐겨찾기 쿼리 내보내기

다음 절차에 따라 에서 수행한 검색 관리 DB 개인 결과 테이블에서 사용자의 즐겨찾기 쿼리를 @UserName내<DateTime>보냅니다.

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일보다 오래된 사용자 이름에 대한 참조 제거

다음 절차를 사용하여 링크 저장소 쿼리 로그 테이블에서 이전보다 @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의 검색과 동일합니다. 두 가지 하이브리드 검색 솔루션이 있습니다.

클라우드 하이브리드 검색 솔루션 - SharePoint용 클라우드 하이브리드 검색 솔루션을 사용하면 온-프레미스 콘텐츠를 포함하여 크롤링된 모든 콘텐츠를 Office 365 검색 인덱스에 인덱싱합니다. 사용자가 Office 365 검색 인덱스를 쿼리할 때 온-프레미스 및 Office 365 콘텐츠 모두에서 검색 결과를 얻습니다. SharePoint Server 환경에서 문서를 삭제하면 Office 365 검색 인덱스에서도 문서가 삭제됩니다. 클라우드 하이브리드 검색 솔루션클라우드 하이브리드 검색에서 검색 구성 요소 및 데이터베이스가 상호 작용하는 방식에 대해 자세히 알아보고 GDPR이 하이브리드 환경에 미치는 영향을 더 잘 이해합니다.

하이브리드 페더레이션 검색 솔루션 - 하이브리드 페더레이션 검색 솔루션을 사용하면 SharePoint Server의 인덱스와 Office 365 인덱스 모두를 사용합니다. SharePoint Server 및 SharePoint Online Search 모두 다른 환경의 검색 인덱스를 쿼리하고 연결된 결과를 반환할 수 있습니다. 사용자가 검색 센터에서 검색할 때 검색 결과는 SharePoint Server의 검색 인덱스와 Office 365의 검색 인덱스 모두에서 나옵니다. 하이브리드 페더레이션 검색 솔루션에 대해 자세히 읽어 GDPR 이 하이브리드 환경에 미치는 영향을 더 잘 이해합니다.

온-프레미스에서 클라우드 마이그레이션으로

SharePoint Server에서 SharePoint Online으로 데이터를 마이그레이션하는 동안 중복된 데이터가 한 번에 두 위치에 모두 있을 수 있습니다. 마이그레이션 중 삭제해야 하는 데이터가 있는 경우 먼저 마이그레이션을 완료한 다음 두 위치에서 데이터를 삭제하는 것이 좋습니다. 두 위치 중 하나에서 내보내기용 데이터를 쿼리할 수 있습니다.

사용자 프로필 데이터

사용자 프로필 서비스를 사용하면 다양한 외부 원본에서 프로필 데이터를 가져올 수 있습니다. 이러한 사용자 프로필 데이터에 대한 쿼리 및 업데이트는 데이터가 마스터되는 시스템에서 처리되어야 합니다. 외부 시스템을 업데이트하는 경우 SharePoint Server에서 사용자 프로필을 다시 동기화해야 합니다.

다음 기본 단계에 따라 SharePoint Server 사용자 프로필에서 사용자의 개인 정보를 제거합니다.

  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()