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

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

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

المتطلبات

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

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

Databricks SQL

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

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

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

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

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

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

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

    ملاحظة

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

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

    تحذير

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

امتيازات

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

ملاحظة

CREATE_NAMED_FUNCTIONMODIFY_CLASSPATHوالامتيازات غير معتمدة في Databricks SQL.

USAGE امتياز

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

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

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

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

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

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

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

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

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

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

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

عندما يتم تمكين عنصر تحكم الوصول إلى الجدول على كتلة أو نقطة نهاية 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 متشابهان. إذا لم يكن المالكون متشابهين، يجب أن يكون للمستخدم C امتيازات SELECT على الجدول الأساسي T.

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

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

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

ALTER DATABASE <database-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`

المستخدمون والمجموعات

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

ملاحظة

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

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

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

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

ملاحظة

  • أي مكان حيث امتياز على جدول أو طريقة عرض أو دالة مطلوب USAGE أيضا على قاعدة البيانات الموجودة فيه.
  • في أي مكان حيث يتم الرجوع إلى جدول في أمر، يمكن أيضا الرجوع إلى مسار. في هذه الحالات SELECT أو مطلوب على بدلا من على قاعدة البيانات وامتياز آخر على MODIFYANY FILEUSAGE الجدول.
  • يتم تمثيل ملكية الكائن هنا 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 أو على قاعدة USAGECREATE_NAMED_FUNCTION البيانات. إذا تم تحديد مورد ثم MODIFY_CLASSPATH على CATALOG مطلوب أيضا.
ALTER DATABASE 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 العمليات و و DENYREVOKEMSCKSHOW GRANT لإدارة امتيازات الكائن.

ملاحظة

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

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

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

    GRANT SELECT ON ANY FILE TO users
    

أمثلة

GRANT SELECT ON DATABASE <database-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 DATABASE <database-name>

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

REVOKE ALL PRIVILEGES ON DATABASE 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 database.table TO users

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

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

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

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

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

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

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

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

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

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

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

GRANT USAGE, SELECT ON DATABASE 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 عندما يمنح A SELECT امتيازات على طريقة العرض V1.
  • يمكن للمستخدم تحديد V2 عندما منح A SELECT امتيازات على الجدول T و B منح امتيازات على SELECT V2.

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

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

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