امتيازات كائن البيانات

يتيح لك نموذج إدارة البيانات Azure Databricks منح الوصول إلى البيانات من Spark SQL ورفضه وإلغاءه برمجيا. يتيح لك هذا الطراز التحكم في الوصول إلى كائنات قابلة للتأمين مثل النشرات المصورة والمخططات (قواعد البيانات) والجداول وطرق العرض والوظائف. كما يسمح أيضا بالتحكم في الوصول الدقيق (إلى مجموعة فرعية معينة من جدول، على سبيل المثال) عن طريق تعيين امتيازات على طرق العرض المشتقة التي تم إنشاؤها من الاستعلامات العشوائية. يقوم محلل الاستعلام Azure Databricks SQL بفرض نهج التحكم في الوصول هذه في وقت التشغيل على مجموعات Azure Databricks مع تمكين التحكم في الوصول إلى الجدول وجميع نقاط النهاية SQL.

توضح هذه المقالة الامتيازات والكائنات وقواعد الملكية التي تشكل نموذج إدارة البيانات Azure Databricks. كما يصف كيفية منح امتيازات الكائن وحرمانها وإبطالها.

المتطلبات

تعتمد متطلبات إدارة امتيازات الكائن على البيئة الخاصة بك:

هندسة علوم & البيانات والبيانات التعلم الآلي

Databricks SQL

راجع متطلبات التشغيل السريع للمسؤول.

نموذج إدارة البيانات

يصف هذا القسم نموذج إدارة البيانات Azure Databricks. يخضع الوصول إلى كائنات البيانات القابلة للتأمين للامتيازات.

كائنات قابلة للتأمين

الكائنات القابلة للتأمين هي:

  • CATALOGيتحكم في الوصول إلى كتالوج البيانات بالكامل.

    • SCHEMAيتحكم في الوصول إلى مخطط.
      • TABLEيتحكم في الوصول إلى جدول مدار أو خارجي.
      • VIEWيتحكم في الوصول إلى طرق عرض SQL.
      • FUNCTIONيتحكم في الوصول إلى دالة مسماة.
  • ANONYMOUS FUNCTIONيتحكم في الوصول إلى ANONYMOUS FUNCTION.

    ملاحظة

    ANONYMOUS FUNCTIONالكائنات غير معتمدة في Databricks SQL.

  • ANY FILEيتحكم في الوصول إلى نظام الملفات الأساسي.

    تحذير

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

امتيازات

  • SELECTيعطي حق الوصول للقراءة إلى كائن.
  • CREATEيعطي القدرة على إنشاء كائن (على سبيل المثال، جدول في مخطط).
  • MODIFYيعطي القدرة على إضافة وحذف وتعديل البيانات إلى أو من كائن.
  • USAGEلا يعطي أي قدرات، ولكنه مطلب إضافي لتنفيذ أي إجراء على كائن مخطط.
  • READ_METADATAيعطي القدرة على عرض كائن وبيانات التعريف الخاصة به.
  • CREATE_NAMED_FUNCTIONيعطي القدرة على إنشاء UDF مسمى في كتالوج موجود أو مخطط.
  • MODIFY_CLASSPATHيعطي القدرة على إضافة ملفات إلى مسار فئة Spark.
  • ALL PRIVILEGESيمنح جميع الامتيازات (يترجم إلى جميع الامتيازات المذكورة أعلاه).

ملاحظة

MODIFY_CLASSPATH الامتياز غير معتمد في Databricks SQL.

USAGE امتياز

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

  • كن مشرفا
  • USAGE لديك امتياز على المخطط أو أن تكون في مجموعة لديها USAGE امتياز على المخطط
  • USAGE لديك الامتياز على CATALOG أو أن تكون في مجموعة لديها USAGE الامتياز
  • أن يكون مالك المخطط أو أن يكون في مجموعة تملك المخطط

حتى مالك كائن داخل مخطط يجب أن يكون الامتياز USAGE لاستخدامه.

على سبيل المثال، يمكن للمسؤول تعريف مجموعة finance ومخطط accounting لاستخدامها. لإعداد مخطط يمكن لفريق التمويل فقط استخدامه ومشاركته، يقوم المسؤول بما يلي:

CREATE SCHEMA accounting;
GRANT USAGE ON SCHEMA accounting TO finance;
GRANT CREATE ON SCHEMA accounting TO finance;

مع هذه الامتيازات، يمكن لأعضاء finance المجموعة إنشاء جداول وطرق عرض في accounting المخطط، ولكن لا يمكنهم مشاركة تلك الجداول أو طرق العرض مع أي أساس غير موجود USAGE في accounting المخطط.

هندسة علوم & البيانات والبياناتبريك سلوك إصدار وقت التشغيل
  • تقوم المجموعات التي تعمل على Databricks Runtime 7.3 LTS وما فوق بفرض USAGE الامتياز.
  • لا تفرض USAGE الكتل التي تقوم بتشغيل Databricks Runtime 7.2 وما دون الامتياز.
  • لضمان أن أحمال العمل الحالية تعمل دون تغيير، في مساحات العمل التي تستخدم التحكم في الوصول إلى الجدول قبل USAGE عرضه كان لها USAGE الامتياز الممنوح CATALOG للمجموعة users . إذا كنت ترغب في الاستفادة USAGE من الامتياز، يجب تشغيل REVOKE USAGE ON CATALOG FROM users ومن ثم GRANT USAGE ... حسب الحاجة.

التسلسل الهرمي للامتيازات

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

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

ملكية العناصر

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

قد تمتلك المجموعات كائنات، وفي هذه الحالة يعتبر جميع أعضاء تلك المجموعة مالكين.

تحدد الملكية ما إذا كان يمكنك منح امتيازات على الكائنات المشتقة للمستخدمين الآخرين أم لا. على سبيل المثال، افترض أن المستخدم A يملك الجدول T ويمنح المستخدم امتياز B SELECT في الجدول T. على الرغم من أن المستخدم B يمكن تحديد من الجدول T، المستخدم B لا يمكن منح SELECT امتياز على الجدول T إلى المستخدم C، لأن المستخدم A لا يزال مالك الجدول الأساسي T. علاوة على ذلك، لا يمكن للمستخدم B التحايل على هذا التقييد ببساطة عن طريق إنشاء طريقة عرض V على الجدول T ومنح امتيازات على SELECT للمستخدم C. عندما يتحقق Azure Databricks من امتيازات المستخدم C للوصول إلى طريقة العرض V، فإنه يتحقق أيضا من أن مالك V والجدول الأساسي T متشابهان. إذا لم يكن المالكون متشابهين، يجب أن يكون للمستخدم SELECT C امتيازات على الجدول الأساسي T.

عند تعطيل عنصر تحكم الوصول إلى الجدول على كتلة، يتم تسجيل أي مالك عند إنشاء مخطط أو جدول أو طريقة عرض أو دالة. لاختبار ما إذا كان الكائن له مالك، قم بتشغيل SHOW GRANT ON <object-name>. إذا لم تشاهد إدخالا مع ActionType OWN، لا يملك الكائن مالكا.

تعيين مالك إلى كائن

يمكن لمالك كائن أو مسؤول نقل ملكية كائن باستخدام ALTER <object> OWNER TO `<user-name>@<user-domain>.com` الأمر:

ALTER SCHEMA <schema-name> OWNER TO `<user-name>@<user-domain>.com`
ALTER TABLE <table-name> OWNER TO `group_name`
ALTER VIEW <view-name> OWNER TO `<user-name>@<user-domain>.com`
ALTER FUNCTION <function-name> OWNER TO `<user-name>@<user-domain>.com`

Users and groups

يمكن للمسؤولين والمالكين منح امتيازات للمستخدمين والمجموعات. يتم تحديد كل مستخدم بشكل فريد من خلال اسم المستخدم الخاص به في Azure Databricks (والذي عادة ما يقوم بتعيين عنوان بريده الإلكتروني). جميع المستخدمين ضمنيا جزءا من مجموعة "كافة المستخدمين" ، ممثلة كما هو الحال users في SQL.

ملاحظة

يجب أن ترفق مواصفات المستخدم في backticks (` `) ، وليس علامات الاقتباس واحد (' ').

العمليات والامتيازات

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

يقوم الجدول التالي بتعيين SQL العمليات للامتيازات المطلوبة لتنفيذ تلك العملية.

ملاحظة

  • أي مكان حيث امتياز على جدول أو طريقة عرض أو دالة USAGE مطلوب أيضا على المخطط موجود فيه.
  • في أي مكان حيث يتم الرجوع إلى جدول في أمر، يمكن أيضا الرجوع إلى مسار. في هذه الحالات SELECT أو MODIFY مطلوب بدلا من USAGE المخطط ANY FILE وامتياز آخر على الجدول.
  • يتم تمثيل ملكية الكائن هنا كامتياز OWN .
‏‏التشغيل الامتيازات المطلوبة
استنساخ القدرة على SELECT من الجدول الذي يتم استنساخه، CREATE على المخطط، وإذا MODIFY كان يتم استبدال جدول.
نسخ إلى SELECT على ANY FILE إذا نسخ من مسار، MODIFY على الجدول الذي يتم نسخه إلى.
إنشاء مؤشر بلومفلتر OWN على الجدول الذي يتم فهرستها.
إنشاء مخطط CREATEعلى .CATALOG
إنشاء جدول إما OWN أو كليهما USAGE وعلى CREATE المخطط.
إنشاء طريقة العرض إما OWN أو كليهما USAGE وعلى CREATE المخطط.
إنشاء دالة (خارجي) إما OWN أو USAGECREATE_NAMED_FUNCTION على المخطط. إذا تم تحديد مورد ثم MODIFY_CLASSPATH على CATALOG مطلوب أيضا.
إنشاء دالة (SQL) إما OWN أو USAGE على المخطط.
إنشاء مخطط CREATEعلى .CATALOG
مخطط ALTER OWN على المخطط.
تغيير الجدول عادة OWN على الطاولة. MODIFY إذا فقط إضافة أو إزالة أقسام.
تغيير طريقة العرض OWN على طريقة العرض.
انخفاض مؤشر بلومفلتر OWN على الطاولة.
إسقاط المخطط OWN على المخطط.
إسقاط جدول OWN على الطاولة.
عرض الإسقاط OWN على طريقة العرض.
وظيفة الإسقاط OWN على الدالة.
شرح READ_METADATA على الجداول وطرق العرض.
وصف الجدول READ_METADATA على الطاولة.
وصف التاريخ OWN على الطاولة.
حدد SELECT على الطاولة.
إدراج MODIFY على الطاولة.
استعادة الجدول MODIFY على الطاولة.
تحديث: MODIFY على الطاولة.
دمج في MODIFY على الطاولة.
حذف من MODIFY على الطاولة.
اقتطاع جدول MODIFY على الطاولة.
تحسين MODIFY على الطاولة.
مِكْنَسَة كَهْرَبَائِيَّة MODIFY على الطاولة.
جدول إصلاح FSCK MODIFY على الطاولة.
MSCK OWN على الطاولة.
GRANT OWN على الكائن.
إظهار المنحة OWN على الكائن، أو المستخدم الخاضع للمنحة.
أنكر OWN على الكائن.
إبطال OWN على الكائن.

هام

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

إدارة امتيازات الكائنات

يمكنك استخدام GRANTالعمليات و DENYو REVOKEMSCKSHOW GRANT لإدارة امتيازات الكائن.

ملاحظة

  • يمكن لمالك كائن أو مسؤول عنه تنفيذ GRANTDENYREVOKEعمليات و.SHOW GRANT ومع ذلك، لا يمكن للمسؤول رفض امتيازات المالك أو إبطالها.

  • لا يمكن للمدير الذي ليس مالكا أو مسؤولا إجراء عملية إلا إذا تم منح الامتياز المطلوب.

  • لمنح امتياز لكافة المستخدمين أو رفضه أو إبطاله، حدد الكلمة الأساسية بعد TO. على سبيل المثال،

    GRANT SELECT ON ANY FILE TO users
    

أمثلة

GRANT SELECT ON SCHEMA <schema-name> TO `<user>@<domain-name>`
GRANT SELECT ON ANONYMOUS FUNCTION TO `<user>@<domain-name>`
GRANT SELECT ON ANY FILE TO `<user>@<domain-name>`

SHOW GRANT `<user>@<domain-name>` ON SCHEMA <schema-name>

DENY SELECT ON <table-name> TO `<user>@<domain-name>`

REVOKE ALL PRIVILEGES ON SCHEMA default FROM `<user>@<domain-name>`
REVOKE SELECT ON <table-name> FROM `<user>@<domain-name>`

GRANT SELECT ON ANY FILE TO users

دالات العرض الديناميكي

تتضمن Azure Databricks دالتين للمستخدم تسمح لك بالتعبير عن أذونات مستوى العمود والصف بشكل حيوي في نص تعريف طريقة العرض.

  • current_user()إرجاع اسم المستخدم الحالي.
  • is_member()تحديد ما إذا كان المستخدم الحالي عضوا في is_member() Azure Databricks معينة.

ملاحظة

متوفر في Databricks وقت التشغيل 7.3 LTS وما فوق. ومع ذلك، لاستخدام هذه الدالات في Databricks وقت التشغيل 7.3 LTS، يجب تعيين تكوين Spark.

خذ بعين الاعتبار المثال التالي الذي يجمع بين الدالتين لتحديد ما إذا كان المستخدم لديه عضوية المجموعة المناسبة:

-- 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_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

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

باستخدام طرق العرض الديناميكية يمكنك تحديد أذونات وصولا إلى مستوى الصف أو الحقل. خذ في الاعتبار المثال التالي، حيث المستخدمين الذين ينتمون إلى managers المجموعة فقط قادرون على رؤية مبالغ الحركة (total عمود) أكبر من $1,000,000.00:

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

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

كما هو موضح في الأمثلة السابقة، يمكنك تطبيق إخفاء مستوى العمود لمنع المستخدمين من رؤية بيانات عمود محددة ما لم يكونوا في المجموعة الصحيحة. نظرا لأن طرق العرض هذه هي SQL Spark القياسية، يمكنك إجراء أنواع أكثر تقدما من الإخفاء باستخدام تعبيرات 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_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw

الأسئلة المتداولة (FAQ)

كيف يمكنني منح امتياز لكافة المستخدمين أو رفض منحه أو إبطاله؟

حدد الكلمة الأساسية users بعد TO أو FROM. على سبيل المثال:

GRANT SELECT ON TABLE <schema-name>.<table-name> TO users

لقد أنشأت كائنا ولكن الآن لا يمكنني الاستعلام عنه أو إسقاطه أو تعديله.

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

ALTER [SCHEMA | TABLE | VIEW] <object-name> OWNER TO `<user-name>@<user-domain>.com`;

كيف يمكنني منح امتيازات على الآراء المؤقتة العالمية والمحلية؟

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

كيف يمكنني منح امتيازات مستخدم أو مجموعة على جداول متعددة في وقت واحد؟

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

GRANT USAGE, SELECT ON SCHEMA D TO `<user>@<domain-name>`

يمكن تحديد الأساسي <user>@<domain-name> من الجدولين t1 و t2، بالإضافة إلى أي جداول وطرق عرض تم إنشاؤها في المخطط D في المستقبل.

كيف يمكنني منح امتيازات المستخدم على كافة الجداول باستثناء جدول واحد؟

منح SELECT امتياز للمخطط ثم رفض SELECT امتياز جدول معين تريد تقييد الوصول إلى.

GRANT USAGE, SELECT ON SCHEMA D TO `<user>@<domain-name>`
DENY SELECT ON TABLE D.T TO `<user>@<domain-name>`

يمكن تحديد الأساسي <user>@<domain-name> من كافة الجداول في D باستثناء D.T.

لدى SELECT المستخدم امتيازات على طريقة عرض الجدول T، ولكن عندما يحاول SELECT المستخدم من طريقة العرض هذه، يحصل على الخطأ User does not have privilege SELECT on table.

يمكن أن يحدث هذا الخطأ الشائعة لأحد الأسباب التالية:

  • لا يوجد لدى الجدول T مالك مسجل لأنه تم إنشاؤه باستخدام كتلة أو نقطة نهاية SQL تم تعطيل عنصر التحكم في الوصول إلى الجدول لها.
  • المانح للامتياز على SELECT طريقة عرض الجدول T ليس مالك الجدول T أو المستخدم ليس لديه أيضا امتياز تحديد SELECT على الجدول T.

لنفترض أن هناك جدول T مملوكة من قبل A. وجهة نظر يملك V1 على تي و B يملك عرض V2 على T.

  • يمكن للمستخدم تحديد V1 عندما يمنح SELECT A امتيازات على طريقة العرض V1.
  • يمكن للمستخدم تحديد V2 عندما منح SELECT A امتيازات على الجدول T و B منح SELECT امتيازات على V2.

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

حاولت تشغيل sc.parallelize على كتلة مع تمكين التحكم في الوصول إلى الجدول وفشل.

على الكتل مع تمكين التحكم في الوصول إلى الجدول يمكنك استخدام فقط SQL Spark و واجهات برمجة التطبيقات بايثون DataFrame. API RDD غير مسموح به لأسباب أمنية، حيث لا يملك Azure Databricks القدرة على فحص وتخويل التعليمات البرمجية داخل RDD.

أريد إدارة الأذونات من البنية الأساسية كرمز

يمكنك إدارة التحكم في الوصول إلى الجدول في إعداد مؤتمت بالكامل باستخدام موفر Databricks Terraformdatabricks_sql_permissions:

resource "databricks_sql_permissions" "foo_table" {
    table = "foo"

    privilege_assignments {
        principal = "serge@example.com"
        privileges = ["SELECT", "MODIFY"]
    }

    privilege_assignments {
        principal = "special group"
        privileges = ["SELECT"]
    }
}