إنشاء طريقة عرض ديناميكية
في كتالوج 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