عند تشغيل SET ROLE في ClickHouse Cloud SQL Console، قد يبدو أن الدور يتغير لاستعلام واحد ثم يعود إلى حالته السابقة في الاستعلام التالي. استخدم دور SQL Console مخصصًا لكل مستخدم عندما تحتاج الأذونات إلى الاستمرار عبر الاستعلامات والجلسات.
الأعراض
قد تلاحظ واحدًا أو أكثر مما يلي:
- بعد تشغيل
SET ROLE sql_console_developer، تستمر الاستعلامات اللاحقة في التنفيذ باستخدامsql_console_read_only. - تختلف نتائج
currentRolesوenabledRolesوdefaultRolesمن استعلام إلى آخر. - لا يؤدي تشغيل
SET ROLEمع استعلام آخر إلى الاحتفاظ بالدور المحدد باستمرار. - يعرض
SHOW GRANTSالأدوار المتوقعة، لكن أذوناتها غير مفعّلة.
يمكنك فحص المستخدم الحالي والأدوار باستخدام:
SELECT
currentUser(),
currentRoles(),
enabledRoles(),
defaultRoles();سبب حدوث ذلك
ترسل SQL Console الاستعلامات عبر اتصالات HTTP عديمة الحالة إلى خدمة ClickHouse Cloud تضم عدة نُسخ متماثلة. ولا يُضمن أن تستخدم الاستعلامات المتتالية الاتصال نفسه أو النسخة المتماثلة نفسها.
يغيّر SET ROLE الأدوار المفعّلة للجلسة الحالية، لكنه لا يحفظ حالة الجلسة هذه لطلبات SQL Console اللاحقة. لذلك، قد يُنفَّذ استعلام لاحق من دون الدور الذي فعّله طلب سابق.
لهذا السبب، لا تستخدم SET ROLE كآلية دائمة للتحكم في الوصول في SQL Console.
آلية عمل أدوار مستخدمي SQL Console
عندما يفتح المستخدم SQL Console، ينشئ ClickHouse Cloud مستخدم قاعدة بيانات وفق اصطلاح التسمية التالي:
sql-console:user@example.comيتحقق ClickHouse Cloud أيضًا من وجود دور قاعدة بيانات يتبع اسمه الاصطلاح التالي:
sql-console-role:user@example.comعند وجود هذا الدور، يُسنِده ClickHouse Cloud إلى مستخدم SQL Console المقابل. وهذه هي الطريقة المدعومة لمنح أذونات مخصصة دائمة لمستخدم محدد في SQL Console.
| الكيان | الغرض | دائم |
|---|---|---|
sql-console:<email> |
مستخدم قاعدة بيانات يُنشأ عند فتح المستخدم SQL Console | نعم، يديره ClickHouse Cloud |
sql_console_admin وsql_console_read_only |
أدوار SQL Console المضمّنة | نعم، يديرها ClickHouse Cloud |
sql-console-role:<email> |
دور مخصص لكل مستخدم ينشئه مسؤول | نعم، يُطبّق عند تسجيل دخول المستخدم |
تهيئة الأذونات الدائمة
نفّذ العبارات التالية بصفتك مستخدمًا لديه امتيازات إدارية على الخدمة، مثل مستخدم SQL Console لديه دور sql_console_admin أو مستخدم آخر لديه امتياز ACCESS MANAGEMENT.
إنشاء الدور المخصص
ينشئ المثال التالي دورًا مخصصًا باسم sql_console_developer ويمنحه أذونات على my_database:
CREATE ROLE IF NOT EXISTS sql_console_developer;
GRANT SELECT, INSERT, CREATE TABLE
ON my_database.*
TO sql_console_developer;sql_console_developer دورٌ مستخدم في المثال، وليس دورًا مضمّنًا في ClickHouse Cloud. يمكنك بدلًا من ذلك استخدام دور مخصص موجود يتضمن الأذونات التي يحتاج إليها المستخدم.
إنشاء دور SQL Console لكل مستخدم
أنشئ دورًا يتضمن اسمه عنوان البريد الإلكتروني الكامل للمستخدم:
CREATE ROLE IF NOT EXISTS `sql-console-role:user@example.com`;تُعد علامات backticks مطلوبة لأن اسم الدور يحتوي على أحرف خاصة.
منح الدور المخصص
امنح الدور المطلوب لدور SQL Console الخاص بالمستخدم:
GRANT sql_console_developer
TO `sql-console-role:user@example.com`;يمكنك منح أدوار متعددة عند الحاجة:
GRANT sql_console_developer, sql_console_read_only
TO `sql-console-role:user@example.com`;بدء جلسة جديدة في SQL Console
اطلب من المستخدم تسجيل الخروج ثم تسجيل الدخول مجددًا إلى SQL Console، أو تحديث علامة تبويب المتصفح. في الجلسة الجديدة، يطبّق ClickHouse Cloud sql-console-role:user@example.com على sql-console:user@example.com، ولا يلزم تنفيذ عبارة SET ROLE.
تحقق من الأدوار النشطة:
SELECT
currentUser(),
currentRoles(),
enabledRoles(),
defaultRoles();يجب أن تتضمن النتائج الأذونات الممنوحة عبر sql-console-role:user@example.com.
تجنب تعديل الأدوار المُدارة
لا تعدّل sql_console_admin أو sql_console_read_only لمنح أذونات مخصصة. يدير ClickHouse Cloud هذه الأدوار المضمنة. استخدم بدلاً من ذلك sql-console-role:<email> لتعيين أذونات لكل مستخدم.
للاطلاع على أمثلة عامة لإدارة الأدوار، راجع استعلامات شائعة لإدارة الوصول.