امتيازات Hive metastore والكائنات القابلة للتأمين (قديمة)
توضح هذه المقالة نموذج الامتياز ل Azure Databricks Hive metastore القديم، المضمن في كل مساحة عمل Azure Databricks. كما يصف كيفية منح الامتيازات للعناصر في Hive metastore المضمنة ورفضها وإبطالها. يستخدم كتالوج Unity نموذجا مختلفا لمنح الامتيازات. راجع امتيازات كتالوج Unity والكائنات القابلة للتأمين.
إشعار
يعد التحكم في الوصول إلى الجدول للبيانات التي يديرها Hive metastore نموذجا قديما لإدارة البيانات. توصي Databricks بترقية الجداول التي يديرها Hive metastore إلى مخزن بيانات تعريف كتالوج Unity. يبسط كتالوج Unity أمان بياناتك وإدارتها من خلال توفير مكان مركزي لإدارة الوصول إلى البيانات وتدقيطها عبر مساحات عمل متعددة في حسابك. لمعرفة المزيد حول كيفية اختلاف نموذج الامتياز القديم عن نموذج امتياز كتالوج Unity، راجع العمل مع كتالوج Unity ومخزن Hive metastore القديم.
المتطلبات
- يجب على المسؤول تمكين عنصر التحكم في الوصول إلى الجدول وفرضه لمساحة العمل.
- يجب تمكين نظام المجموعة للتحكم في الوصول إلى الجدول.
إشعار
- يتم تمكين التحكم في الوصول إلى البيانات دائما في Databricks SQL حتى إذا لم يتم تمكين التحكم في الوصول إلى الجدول لمساحة العمل.
- إذا تم تمكين التحكم في الوصول إلى الجدول لمساحة العمل وكنت قد حددت بالفعل قوائم التحكم في الوصول (الامتيازات الممنوحة والمرفوضة) في مساحة العمل، يتم احترام قوائم التحكم في الوصول هذه في Databricks SQL.
إدارة الامتيازات على الكائنات في Hive metastore
يمكن منح الامتيازات على كائنات البيانات التي يديرها Hive metastore إما من قبل مسؤول مساحة العمل أو مالك كائن. يمكنك إدارة امتيازات كائنات Hive metastore باستخدام أوامر SQL.
لإدارة الامتيازات في SQL، يمكنك استخدام عبارات GRANT و REVOKE و DENY و MSCK و SHOW GRANT في دفتر ملاحظات أو محرر استعلام Databricks SQL، باستخدام بناء الجملة:
GRANT privilege_type ON securable_object TO principal
المكان:
privilege_type
هو نوع امتياز Hive metastoresecurable_object
هو كائن قابل للتأمين في Hive metastoreprincipal
هو مستخدم أو كيان خدمة (ممثل بقيمة applicationId الخاصة به) أو مجموعة. يجب إحاطة المستخدمين وكيانات الخدمة وأسماء المجموعات بأحرف خاصة في backticks (` `
). راجع الأساسي.
لمنح امتياز لجميع المستخدمين في مساحة العمل الخاصة بك، امنح الامتياز للمجموعة users
. على سبيل المثال:
GRANT SELECT ON TABLE <schema-name>.<table-name> TO users
لمزيد من المعلومات حول إدارة الامتيازات للكائنات في Hive metastore باستخدام أوامر SQL، راجع الامتيازات والكائنات القابلة للتأمين في Hive metastore.
يمكنك أيضا إدارة التحكم في الوصول إلى الجدول في إعداد تلقائي بالكامل باستخدام موفر Databricks Terraform databricks_sql_permissions.
ملكية العناصر
عند تمكين التحكم في الوصول إلى الجدول على مجموعة أو مستودع SQL، يصبح المستخدم الذي ينشئ مخططا أو جدولا أو طريقة عرض أو دالة مالكا له. يتم منح المالك جميع الامتيازات ويمكنه منح امتيازات للمستخدمين الآخرين.
قد تمتلك المجموعات كائنات، وفي هذه الحالة يعتبر جميع أعضاء تلك المجموعة مالكين.
يمكن لمالك عنصر أو مسؤول مساحة عمل نقل ملكية كائن باستخدام الأمر التالي:
ALTER <object> OWNER TO `<user-name>@<user-domain>.com`
إشعار
عند تعطيل التحكم في الوصول إلى الجدول على مجموعة أو مستودع SQL، لا يتم تسجيل المالكين عند إنشاء مخطط أو جدول أو طريقة عرض. يجب على مسؤول مساحة العمل تعيين مالك للكائن باستخدام ALTER <object> OWNER TO
الأمر .
الكائنات القابلة للتأمين في Hive metastore
الكائنات القابلة للتأمين هي:
CATALOG
: يتحكم في الوصول إلى كتالوج البيانات بأكمله.SCHEMA
: يتحكم في الوصول إلى مخطط.TABLE
: يتحكم في الوصول إلى جدول مدار أو خارجي.VIEW
: يتحكم في الوصول إلى طرق عرض SQL.FUNCTION
: يتحكم في الوصول إلى دالة مسماة.
ANONYMOUS FUNCTION
: يتحكم في الوصول إلى الوظائف المجهولة أو المؤقتة.إشعار
ANONYMOUS FUNCTION
الكائنات غير مدعومة في Databricks SQL.ANY FILE
: يتحكم في الوصول إلى نظام الملفات الأساسي.تحذير
يمكن للمستخدمين الذين تم منحهم حق الوصول إلى
ANY FILE
تجاوز القيود الموضوعة على الكتالوج والمخططات والجداول وطرق العرض عن طريق القراءة من نظام الملفات مباشرة.
إشعار
لا يتم دعم الامتيازات على طرق العرض المؤقتة العمومية والمحلية. تكون طرق العرض المؤقتة المحلية مرئية فقط داخل نفس جلسة العمل، وتكون طرق العرض التي تم إنشاؤها في global_temp
المخطط مرئية لجميع المستخدمين الذين يشاركون نظام مجموعة أو مستودع SQL. ومع ذلك، يتم فرض الامتيازات على الجداول وطرق العرض الأساسية المشار إليها بواسطة أي طرق عرض مؤقتة.
الامتيازات التي يمكنك منحها على كائنات Hive metastore
SELECT
: يمنح حق الوصول للقراءة إلى كائن.CREATE
: يمنح القدرة على إنشاء كائن (على سبيل المثال، جدول في مخطط).MODIFY
: يمنح القدرة على إضافة البيانات وحذفها وتعديلها إلى كائن أو منه.USAGE
: لا يعطي أي قدرات، ولكنه شرط إضافي لتنفيذ أي إجراء على كائن مخطط.READ_METADATA
: يمنح القدرة على عرض كائن وبيانات التعريف الخاصة به.CREATE_NAMED_FUNCTION
: يمنح القدرة على إنشاء UDF مسمى في كتالوج أو مخطط موجود.MODIFY_CLASSPATH
: يمنح القدرة على إضافة ملفات إلى مسار فئة Spark.ALL PRIVILEGES
: يعطي جميع الامتيازات (يتم ترجمتها إلى جميع الامتيازات المذكورة أعلاه).
إشعار
الامتياز MODIFY_CLASSPATH
غير مدعوم في Databricks SQL.
USAGE
امتياز
لتنفيذ إجراء على كائن مخطط في Hive metastore، يجب أن يكون لدى USAGE
المستخدم الامتياز على هذا المخطط بالإضافة إلى الامتياز لتنفيذ هذا الإجراء. أي مما يلي يفي بالمتطلبات USAGE
:
- أن تكون مسؤول مساحة العمل
- الحصول على الامتياز
USAGE
على المخطط أو أن تكون في مجموعة لديها الامتيازUSAGE
على المخطط - الحصول على الامتياز
USAGE
علىCATALOG
أو أن تكون في مجموعة لديها الامتيازUSAGE
- أن تكون مالك المخطط أو أن تكون في مجموعة تملك المخطط
حتى مالك كائن داخل مخطط يجب أن يكون لديه USAGE
الامتياز من أجل استخدامه.
التسلسل الهرمي للامتيازات
عند تمكين التحكم في الوصول إلى الجدول على مساحة العمل وعلى جميع المجموعات، تكون كائنات SQL في Azure Databricks هرمية ويتم توريث الامتيازات لأسفل. وهذا يعني أن منح امتياز أو رفضه CATALOG
على منح الامتياز تلقائيا أو رفضه لجميع المخططات في الكتالوج. وبالمثل، يتم توريث الامتيازات الممنوحة على كائن مخطط بواسطة كافة الكائنات في هذا المخطط. هذا النمط صحيح لجميع الكائنات القابلة للتأمين.
إذا رفضت امتيازات مستخدم على جدول، فلن يتمكن المستخدم من رؤية الجدول عن طريق محاولة سرد جميع الجداول في المخطط. إذا رفضت امتيازات مستخدم على مخطط، فلن يتمكن المستخدم من رؤية أن المخطط موجود عن طريق محاولة سرد كافة المخططات في الكتالوج.
دوال العرض الديناميكية
يتضمن Azure Databricks دالتين للمستخدم تسمحان لك بالتعبير عن أذونات مستوى العمود والصف ديناميكيا في نص تعريف طريقة العرض الذي تتم إدارته بواسطة Hive metastore.
current_user()
: إرجاع اسم المستخدم الحالي.is_member()
: تحديد ما إذا كان المستخدم الحالي عضوا في مجموعة Azure Databricks معينة على مستوى مساحة العمل.
يجمع المثال التالي بين الدالتين لتحديد ما إذا كان المستخدم لديه عضوية المجموعة المناسبة:
-- Return: true if the user is a member and false if they are not
SELECT
current_user as user,
-- Check to see if the current user is a member of the "Managers" group.
is_member("Managers") as admin
أذونات على مستوى العمود
يمكنك استخدام طرق العرض الديناميكية للحد من الأعمدة التي يمكن لمجموعة أو مستخدم معين رؤيتها. ضع في اعتبارك المثال التالي حيث يمكن فقط للمستخدمين الذين ينتمون إلى auditors
المجموعة رؤية عناوين البريد الإلكتروني من sales_raw
الجدول. في وقت التحليل، يستبدل Spark العبارة CASE
إما بالحرف الحرفي 'REDACTED'
أو العمود email
. يسمح هذا السلوك لجميع تحسينات الأداء المعتادة التي يوفرها Spark.
-- 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_group_member('auditors') THEN email
ELSE 'REDACTED'
END AS email,
country,
product,
total
FROM sales_raw
أذونات على مستوى الصف
باستخدام طرق العرض الديناميكية، يمكنك تحديد الأذونات وصولا إلى مستوى الصف أو الحقل. ضع في اعتبارك المثال التالي، حيث يمكن فقط للمستخدمين الذين ينتمون إلى managers
المجموعة رؤية مبالغ المعاملات (total
العمود) أكبر من 100000000 دولار:
CREATE VIEW sales_redacted AS
SELECT
user_id,
country,
product,
total
FROM sales_raw
WHERE
CASE
WHEN is_group_member('managers') THEN TRUE
ELSE total <= 1000000
END;
إخفاء البيانات
كما هو موضح في الأمثلة السابقة، يمكنك تنفيذ إخفاء على مستوى العمود لمنع المستخدمين من رؤية بيانات عمود معينة ما لم يكونوا في المجموعة الصحيحة. نظرا لأن طرق العرض هذه هي 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_group_member('auditors') THEN email
ELSE regexp_extract(email, '^.*@(.*)$', 1)
END
FROM sales_raw