تنفيذ تصفية الصفوف وتغطية الأعمدة

مكتمل

عند العمل مع معلومات حساسة في بحيرة بيانات، فأنت بحاجة إلى أكثر من مجرد أذونات قائمة على الأدوار. يسمح لك كتالوج الوحدة بفرض تحكم دقيق في الوصول بحيث يمكن للمستخدمين المختلفين الاستعلام عن نفس الجداول ولكن رؤية البيانات المسموح لهم بها فقط. يشيع استخدام طريقتين ، كما هو موضح في الوحدة السابقة:

  • أمان الصفوف والأعمدة - يقيد الصفوف والأعمدة التي يمكن للمستخدم رؤيتها على مستوى الجدول.
  • طرق العرض الديناميكية - تغلف منطق التصفية والإخفاء في تعريف طريقة عرض تتكيف تلقائيا مع سياق المستخدم.

تعتمد كلتا الاستراتيجيتين على عمليات التحقق من عضوية المجموعة، مثل is_account_group_member()، لتحديد ما إذا كان يجب على المستخدم رؤية القيم المحمية.

أمان الصفوف والعمود

يتيح لك أمان الصفوف والأعمدة تحديد القواعد مباشرة على جدول. تتوفر عمليتان: إخفاء العمودوتصفية الصفوف.

تمويه الأعمدة

يضمن إخفاء الأعمدة إخفاء القيم الحساسة ما لم ينتمي المستخدم إلى مجموعة معتمدة. على سبيل المثال، يمكن إخفاء العمود c_phone الموجود في جدول العملاء بدالة:

CREATE OR REPLACE FUNCTION phone_mask(c_phone STRING)
  RETURN CASE WHEN is_account_group_member('metastore_admins') 
    THEN c_phone 
    ELSE 'REDACTED PHONE NUMBER' 
  END;

ثم يتم تطبيق وظيفة الإخفاء على العمود:

ALTER TABLE customers 
  ALTER COLUMN c_phone 
  SET MASK phone_mask;

من هذه النقطة فصاعدا، ترجع الاستعلامات مقابل الجدول أرقام الهواتف الفعلية فقط إلى metastore_admins. يرى REDACTED PHONE NUMBERالمستخدمون الآخرون دائما .

تصفية الصفوف

تؤدي تصفية الصفوف إلى إزالة الصفوف من نتائج الاستعلام للمستخدمين غير المصرح لهم. يمكنك تحديد دالة ترجع true فقط عندما يكون الصف مرئيا. على سبيل المثال:

CREATE OR REPLACE FUNCTION nation_filter(c_nationkey INT)
  RETURN IF(is_account_group_member('admin'), true, c_nationkey = 21);

عند تطبيقه كعامل تصفية صفوف:

ALTER TABLE customers 
SET ROW FILTER nation_filter ON (c_nationkey);

وهذا يضمن أن غير المسؤولين يرون فقط الصفوف التي تحتوي على c_nationkey = 21. يستمر المستخدمون المسؤولون في رؤية جميع الصفوف.

يوفر إخفاء الأعمدة وتصفية الصفوف معا طريقة لفرض القيود مباشرة على الجدول الأساسي.

المناظر الديناميكية

بديل لتعديل جدول هو إنشاء طريقة عرض ديناميكية. تسمح لك طرق العرض بالتعبير عن قيود الصفوف والأعمدة في SQL، ويرى كل مستخدم يستعلم عن طريقة العرض تلقائيا المجموعة الفرعية المناسبة من البيانات.

ضع في اعتبارك جدول customers_new يحتوي على معلومات حساسة. يمكن للطريقة الديناميكية تنقيح أرقام الهواتف وتقييد الصفوف في تعريف واحد:

CREATE OR REPLACE VIEW vw_customers AS
SELECT 
  c_custkey, 
  c_name, 
  c_address, 
  c_nationkey,
  CASE 
    WHEN is_account_group_member('admins') THEN c_phone
    ELSE 'REDACTED PHONE NUMBER'
  END as c_phone,
  c_acctbal, 
  c_mktsegment, 
  c_comment
FROM customers_new
WHERE
  CASE WHEN
    is_account_group_member('admins') THEN TRUE
    ELSE c_nationkey = 21
  END;

عندما يستعلم المستخدمون عن طريقة العرض هذه، يتم تطبيق القواعد تلقائيا:

  • يتم عرض أرقام الهواتف فقط لأعضاء admins المجموعة.
  • لا يرى غير المشرفين سوى الصفوف التي تحتوي على c_nationkey = 21.

يمكن بعد ذلك منح الوصول إلى طريقة العرض بأذونات SQL القياسية:

GRANT SELECT ON VIEW vw_customers TO `account users`;

لا يزال الجدول الأساسي على حاله ، بينما يفرض العرض المنطق الأمني.

الاختيار بين النهجين

يحقق كلا النهجين أمانا دقيقا ، لكنهما يختلفان في النطاق:

  • يتم تضمين أمان الصف والأعمدة على مستوى الجدول ويضمن تطبيق القيود في كل مكان يتم فيه استخدام الجدول.
  • توفر الملفات الشخصية الديناميكية المرونة: يمكنك إنشاء ملفات شخصية متعددة بقواعد مختلفة لجماهير مختلفة، مع الحفاظ على الجدول الأساسي غير مقيد.

المخطط يساعدك في الاختيار بين النهجين.

من الناحية العملية، يمكنك استخدام عناصر التحكم على مستوى الجدول عندما تحتاج إلى فرض صارم، وطرق العرض الديناميكية عندما تريد تجريدات قابلة للتكيف وقابلة للمشاركة.