إنشاء طريقة عرض ديناميكية

في كتالوج Unity، يمكنك استخدام طرق العرض الديناميكية لتكوين التحكم في الوصول الدقيق، بما في ذلك:

  • الأمان على مستوى الأعمدة أو الصفوف.
  • إخفاء البيانات.

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

  • current_user(): إرجاع عنوان البريد الإلكتروني للمستخدم الحالي.
  • is_account_group_member(): إرجاع TRUE إذا كان المستخدم الحالي عضوا في مجموعة معينة على مستوى الحساب. يوصى باستخدامه في طرق العرض الديناميكية مقابل بيانات كتالوج Unity.
  • is_member(): إرجاع TRUE إذا كان المستخدم الحالي عضوا في مجموعة محددة على مستوى مساحة العمل. يتم توفير هذه الدالة للتوافق مع Hive metastore الموجود. تجنب استخدامه مع طرق العرض مقابل بيانات كتالوج Unity، لأنه لا يقيم عضوية المجموعة على مستوى الحساب.

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

توضح الأمثلة التالية كيفية إنشاء طرق عرض ديناميكية في كتالوج Unity.

قبل البدء

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

  • مستودع SQL.

  • الحساب مع وضع الوصول المشترك.

  • الحساب مع وضع وصول مستخدم واحد على Databricks Runtime 15.4 LTS أو أعلى.

    لا يمكنك قراءة طرق العرض الديناميكية باستخدام حساب مستخدم واحد على Databricks Runtime 15.3 أو أدناه.

    للاستفادة من تصفية البيانات المتوفرة في Databricks Runtime 15.4 LTS وما فوق، يجب عليك أيضا التحقق من تمكين مساحة العمل الخاصة بك للحساب بلا خادم، لأن وظيفة تصفية البيانات التي تدعم طرق العرض الديناميكية تعمل على الحوسبة بلا خادم. لذلك قد يتم تحصيل رسوم منك مقابل موارد الحوسبة بلا خادم عند استخدام حساب مستخدم واحد لقراءة طرق العرض الديناميكية. راجع التحكم في الوصول الدقيق على حساب مستخدم واحد.

أذونات على مستوى العمود

باستخدام طريقة عرض ديناميكية، يمكنك تحديد الأعمدة التي يمكن لمستخدم أو مجموعة معينة الوصول إليها. في المثال التالي، يمكن لأعضاء auditors المجموعة فقط الوصول إلى عناوين البريد الإلكتروني من sales_raw الجدول. أثناء تحليل الاستعلام، يستبدل Apache Spark العبارة CASE إما بالسلسلة REDACTED الحرفية أو المحتويات الفعلية لعمود عنوان البريد الإلكتروني. يتم إرجاع أعمدة أخرى كالمعتاد. هذه الاستراتيجية ليس لها أي تأثير سلبي على أداء الاستعلام.

-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE WHEN
    is_account_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

أذونات على مستوى الصف

باستخدام طريقة عرض ديناميكية، يمكنك تحديد الأذونات وصولا إلى مستوى الصف أو الحقل. في المثال التالي، يمكن لأعضاء managers المجموعة فقط عرض مبالغ المعاملات عندما تتجاوز 1000000 دولار. تتم تصفية النتائج المطابقة للمستخدمين الآخرين.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_account_group_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

إخفاء البيانات

نظرا لأن طرق العرض في كتالوج Unity تستخدم Spark SQL، يمكنك تنفيذ إخفاء البيانات المتقدم باستخدام تعبيرات SQL أكثر تعقيدا والتعبيرات العادية. في المثال التالي، يمكن لجميع المستخدمين تحليل مجالات البريد الإلكتروني، ولكن يمكن لأعضاء auditors المجموعة فقط عرض عنوان البريد الإلكتروني بالكامل للمستخدم.

-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  region,
  CASE
    WHEN is_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw