تحتفظ عمليات تجميد البيانات بالبيانات إلى أجل غير مسمى، لاستيفاء الالتزامات القانونية أو الالتزامات المتعلقة بالاحتفاظ. يتم عادةً تطبيق عمليات تجميد البيانات على مستخدم واحد أو أكثر لضمان عدم إمكانية حذف البيانات التي يُحتمل أن تكون ذات صلة بمسألة قانونية إلى أن تكتمل هذه المسألة القانونية.
إذا حذف مستخدم خاضع لعملية تجميد البيانات البيانات التي تم تجميدها، ستتم إزالة هذه البيانات من الملف الشخصي للمستخدم، ولكن يتم الاحتفاظ بها في Vault. ما دامت عملية تجميد البيانات قائمة، يمكن لمشرف Vault البحث في تلك البيانات وتصديرها.
تشمل عمليات تجميد البيانات المكوّنات التالية:
- الخدمة: التطبيق المسؤول عن الاحتفاظ بالبيانات. يمكن ضبط الخدمة على "بريد" أو Drive أو "مجموعات".
- النطاق: الكيانات التي تشملها عملية تجميد البيانات. يمكن ضبط النطاق على حساب مستخدم واحد أو أكثر أو على وحدة تنظيمية.
- خيارات إضافية (اختيارية): التفاصيل المحدَّدة (طلبات البحث أو خيارات الضبط) المستخدَمة لتضييق نطاق البيانات التي سيتم الاحتفاظ بها ضمن النطاق المحدّد. تشمل الخيارات ما يلي:
- البريد، المجموعات: طلب البحث لتضييق فترة التحفظ على المعلومات
- Drive: تضمين مساحات التخزين السحابي المشتركة في عملية تجميد البيانات
للعمل باستخدام موارد Vault، يجب أن يحتوي الحساب على أداة Vault المطلوبة الامتيازات وإمكانية الوصول إلى أمر مهم. للوصول إلى مسألة قانونية، يجب أن يكون الحساب قد أنشأ المسألة القانونية، وأن يتضمن تمت مشاركة مسألة قانونية مع المستخدم، أو لديه امتياز عرض جميع المسائل القانونية.
إنشاء عملية تجميد بيانات البريد في حسابات مستخدمين محدَّدة باستخدام طلب بحث
يوضح المثال التالي كيف أن عملية تجميد البيانات المسماة "تعليق حسابات البريد الأول" يتم إنشاؤه من أجل:
- الخدمة: البريد
- الكيان: حسابات المستخدمين "user1" و"user2"
- خيارات إضافية: طلب البحث "to:ceo@company.com"
استرِد أرقام تعريف حسابات المستخدمين من AdminSdk. لاحظ أن يمكن أن تأخذ HeldAccount رقم تعريف الحساب أو عنوان البريد الإلكتروني. إذا تم تقديم كليهما، سيتم استخدام البريد الإلكتروني. ويتم تجاهل رقم تعريف الحساب
Java
HeldMailQuery mailQuery = new HeldMailQuery().setTerms("to:ceo@company.com"); Listaccounts = Lists.newArrayList(); accounts.add(new HeldAccount().setAccountId(user1accountId)); accounts.add(new HeldAccount().setEmail(user2Email)); Hold hold = new Hold() .setName("My First mail Accounts Hold") .setCorpus("MAIL"); .setQuery(new CorpusQuery().setMailQuery(mailQuery)) .setAccounts(accounts); Hold createdHold = client.matters().holds().create(matterId, hold).execute();
Python
def create_hold_mail_accounts(service, matter_id, account_id): mail_query = {'terms': 'to:ceo@company.com'} accounts = [ {'accountId': user1_account_id}, {'email': user2_email} ] wanted_hold = { 'name': 'My First mail Accounts Hold', 'corpus': 'MAIL', 'query': { 'mailQuery': mail_query }, 'accounts': accounts } return service.matters().holds().create( matterId=matter_id, body=wanted_hold).execute()
إنشاء عملية تجميد بيانات Drive في وحدة تنظيمية وتضمين محتوى مساحة التخزين السحابي المشتركة
يوضح المثال التالي كيف أن عملية تجميد البيانات المسماة "أول عملية تجميد بيانات في الوحدة التنظيمية في Drive" يتم إنشاؤه من أجل:
- الخدمة: Drive
- الكيان: الوحدة التنظيمية "الشؤون المالية" (تم تسجيل رقم تعريف الوحدة التنظيمية في رقم تعريف الوحدة التنظيمية)
- خيارات إضافية: تضمين مساحات التخزين السحابي المشتركة التي يكون المستخدمون في هذه الوحدة التنظيمية أعضاء فيها
استرِد أرقام تعريف الوحدات التنظيمية من AdminSdk.
Java
HeldOrgUnit orgUnit = new HeldOrgUnit().setOrgUnitId(orgUnitId); // Include shared drives content. HeldDriveQuery driveQuery = new HeldDriveQuery().setIncludeSharedDriveFiles(true); // Create the hold. Hold hold = new Hold() .setName("My First Drive OU Hold") .setCorpus("DRIVE") .setQuery(new CorpusQuery().setDriveQuery(driveQuery)) .setOrgUnit(orgUnit); Hold createdHold = client.matters().holds().create(matterId, hold).execute(); return createdHold;
Python
def create_hold_drive_org(service, matter_id, org_unit_id): drive_query = {'includeSharedDriveFiles': True} org_unit = {'orgUnitId': org_unit_id} wanted_hold = { 'name': 'My First Drive OU Hold', 'corpus': 'DRIVE', 'orgUnit': org_unit, 'query': { 'driveQuery': drive_query } } return service.matters().holds().create( matterId=matter_id, body=wanted_hold).execute()
إنشاء عملية تجميد بيانات "مجموعات Google" في حسابات مجموعة محدّدة باستخدام نطاق زمني
يوضح المثال التالي كيف أن عملية تجميد البيانات المسماة "أول عملية تجميد بيانات للمجموعة" يتم إنشاؤه من أجل:
- الخدمة: مجموعات
- الكيان: حسابات المجموعة "group1" و"group2"
- خيارات إضافية: تعليق الرسائل فقط التي تحتوي على تواريخ إرسال بين "startTime" و"endTime"
يمكنك استرداد أرقام تعريف حسابات المجموعات من AdminSdk.
Java
String APRIL_2_2017_GMT = "2017-04-02T00:00:00Z"; // See below for format*. Listaccounts = Lists.newArrayList(); accounts.add(new HeldAccount().setAccountId(accountId)); accounts.add(new HeldAccount().setAccountId(accountId2)); HeldGroupsQuery groupQuery = new HeldGroupsQuery(); // Restrict by sent date. groupQuery.setStartTime(APRIL_2_2017_GMT); groupQuery.setEndTime(APRIL_2_2017_GMT); // create the hold Hold hold = new Hold() .setName("My First Group Hold") .setCorpus("GROUPS") .setQuery(new CorpusQuery().setGroupsQuery(groupQuery)); hold.setAccounts(accounts); Hold createdHold = client.matters().holds().create(matterId, hold).execute();
Python
def create_hold_groups_date_range(service, matter_id, group_account_id): groups_query = { 'startTime': '2017-04-02T00:00:00Z', # See below for format* 'endTime': '2017-04-02T00:00:00Z' } accounts = [{'accountId': group_account_id}] wanted_hold = { 'name': 'My First Group Hold', 'corpus': 'GROUPS', 'query': { 'groupsQuery': groups_query }, 'accounts': accounts } return service.matters().holds().create( matterId=matter_id, body=wanted_hold).execute()
- تنسيق الطابع الزمني: إضافةً إلى ذلك، يتم تحويل أوقات البدء/الانتهاء إلى توقيت غرينتش ويتم تقريبها إلى بداية التاريخ المحدّد.
البحث عن عمليات تجميد البيانات الحالية وتعديلها
يوضّح المثال التالي كيفية إدراج جميع الحسابات المضمّنة في عملية تجميد بيانات حالية:
Java
client.matters().holds().accounts().list(matterId, holdId).execute().getAccounts();
Python
# If no accounts are on hold, ['accounts'] will raise an error. def list_held_accounts(service, matter_id, hold_id): return service.matters().holds().accounts().list( matterId=matter_id, holdId=hold_id).execute()['accounts']
يوضح المثال التالي كيفية إضافة حساب إلى حالة تعليق حالية وإزالته منه:
Java
// Add an account by id. client .matters() .holds() .accounts() .create(matterId, holdId, new HeldAccount().setAccountId(accountId)) .execute(); // Remove an account by id. client.matters().holds().accounts().delete(matterId, holdId, accountId).execute(); String email = "email@email.com"; // Add an account by email. client .matters() .holds() .accounts() .create(matterId, holdId, new HeldAccount().setEmail(email)) .execute();
Python
def add_held_account(service, matter_id, hold_id, account_id): held_account = {'accountId': account_id} return service.matters().holds().accounts().create( matterId=matter_id, holdId=hold_id, body=held_account).execute() def remove_held_account(service, matter_id, hold_id, account_id): return service.matters().holds().accounts().delete( matterId=matter_id, holdId=hold_id, accountId=account_id).execute() def add_held_account(service, matter_id, hold_id, email): held_account = {'email': email} return service.matters().holds().accounts().create( matterId=matter_id, holdId=hold_id, body=held_account).execute()
يوضح المثال التالي كيفية تعديل الوحدة التنظيمية في عملية تجميد بيانات وحدة تنظيمية حالية:
Java
Hold hold = client.matters().holds().get(matterId, holdId).execute(); hold.getOrgUnit().setOrgUnitId(newOrgUnitId); Hold modifiedHold = client.matters().holds().update(matterId, holdId, hold).execute(); return modifiedHold;
Python
def update_hold_ou(service, matter_id, hold_id, org_unit_id): current_hold = get_hold(matter_id, hold_id) current_hold['orgUnit'] = {'orgUnitId': org_unit_id} return service.matters().holds().update( matterId=matter_id, holdId=hold_id, body=current_hold).execute()
يوضح المثال التالي كيفية سرد جميع عمليات تجميد البيانات لمسألة قانونية:
Java
String matterId = "Matter Id";// List all holds. List
holdsList = client.matters().holds().list(matterId).execute().getHolds(); // Paginate on holds. ListHoldsResponse response = client .matters() .holds() .list(matterId) .setPageSize(10) .execute();
String nextPageToken = response.getNextPageToken(); if (nextPageToken != null) { client .matters() .holds() .list(matterId) .setPageSize(10) .setPageToken(nextPageToken) .execute(); }
Python
# This can paginate in the same manner as with matters. def list_holds(service, matter_id): return service.matters().holds().list(matterId=matter_id).execute()