امتيازات 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

المكان:

لمنح امتياز لجميع المستخدمين في مساحة العمل الخاصة بك، امنح الامتياز للمجموعة 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