CREATE USER ... IDENTIFIED WITH jwt، وأي محاولة لذلك تؤدي إلى ظهور استثناء. ويُدار مستخدمو JWT بالكامل وفقًا لدورة حياة الـ رمز المميز.
نظرة عامة
- يقدّم عميل رمز JWT موقّعًا عبر إحدى آليات النقل المدعومة (ترويسة HTTP
Authorization: Bearer، أو البروتوكول الأصلي عبر TCP، أو الحقلjwtفي gRPC). - يتحقق ClickHouse من توقيع الرمز المميز.
- يُتحقق من المطالبات المطلوبة (
exp,iat,iss,sub,aud). - يُنشأ مستخدم مؤقت في الذاكرة مع صلاحيات وصول مشتقة من مطالبات الرمز المميز
clickhouse:grantsوclickhouse:roles، ومتقاطعة مع حدّ الصلاحيات. - عند انتهاء صلاحية الرمز المميز، تزيل مهمة جمع البيانات المهملة في الخلفية هذا المستخدم.
مطالبات الرمز المميز
المطالبات المطلوبة
تكون مطالبة
kid في الترويسة (معرّف المفتاح) مطلوبة أيضًا عند استخدام تحليل المفاتيح المستند إلى JWKS.
يدعم وضع JWKS مفاتيح RSA فقطفي حين أن موفّري المفاتيح الثابتة يقبلون أيًا من
HS256 أو RS256 أو ES256، فإن الموفّرين المستندين إلى JWKS لا يقبلون إلا JWKs التي تكون فيها قيمة kty هي RSA (أي الرموز المميزة الموقّعة باستخدام RS256). ولا يمكن التحقق من الرموز المميزة الموقّعة بمفاتيح HMAC (HS256) أو EC (ES256) باستخدام endpoint لـ JWKS، لذلك سيتم رفضها.مطالبات أخرى معترف بها
المطالبات الاختيارية
مثال على رأس الرمز المميز وحمولته
سلوك المستخدم المؤقت
الهوية والتسمية
iss وsub وaud. ويظل هذا المعرّف ثابتًا عبر عمليات تسجيل الدخول. لذا فإن المستخدم الذي يسجّل الدخول عدة مرات باستخدام رموز مميزة مختلفة (ولكن مع issuer وsubject وaudience نفسها) يحصل دائمًا على معرّف UUID نفسه.
أما اسم المستخدم فهو غير ثابت. ويُنشأ على النحو التالي:
<claims_hash> كلما تغيّرت المطالبات clickhouse:roles أو clickhouse:grants. وهذا يعني أن الرموز المميّزة ذات مجموعات الأدوار أو الامتيازات المختلفة تُنتِج أسماء مستخدمين مختلفة حتى للهوية نفسها.
صلاحيات الوصول
permission_limit هي مجموعة حقوق الوصول التي يمتلكها دور مرجعي أو مستخدم مُعدّ ليكون الحد الأعلى. وأي حقوق يطلبها الرمز المميز وتتجاوز هذا الحد تُسقَط بصمت.
حداثة الرمز المميز
iat (وقت الإصدار) لأحدث رمز مميز تمت مصادقته لكل هوية مستقرة. وإذا قُدِّم رمز مميز بقيمة iat تساوي القيمة المخزنة أو تسبقها، يعيد الخادم استخدام المستخدم المؤقت الحالي من دون إعادة تقييم المطالبات. ويمنع ذلك الرموز المميزة الأقدم من تقليص أذونات المستخدم.
دورة الحياة وجمع البيانات المهملة
valid_until (المشتق من exp). ويتم التحكم في الفاصل الزمني لـ GC بواسطة المعلَمة gc_interval (الافتراضي: 5 دقائق).
بين مرات تشغيل GC، قد يظل المستخدمون منتهو الصلاحية ظاهرين في system.users، لكن لن يعودوا قادرين على المصادقة.
تعيينات صلاحيات الوصول الدائمة
يمكن العثور على اسم المستخدم ومعرّف UUID لهوية معيّنة في العمودين
name وid في system.users ما دام المستخدم نشطًا.ALTER USER لا يعمل مباشرةً مع مستخدمي JWT، لأنهم للقراءة فقط. لإسناد ملفات تعريف الإعدادات أو الحصص أو السياسات، استخدم عبارات ALTER SETTINGS PROFILE أو ALTER QUOTA أو ALTER ROW POLICY كما هو موضح أعلاه.
الاختلافات عن المستخدمين العاديين
طرق العرض SQL SECURITY DEFINER
SQL SECURITY DEFINER، ينشئ الخادم تلقائيًا نسخة ظل دائمة من هذا المستخدم لتكون مُعرِّف طريقة العرض. ويتميّز هذا المستخدم الظل بما يلي:
- يحمل الاسم
<original_jwt_username>:definer - لديه
NO_AUTHENTICATION(ولا يمكن استخدامه لتسجيل الدخول) - يحتفظ بحقوق الوصول نفسها التي كانت لدى مستخدم JWT الأصلي وقت إنشاء طريقة العرض
استخدام العميل البرمجي
تمرير رمز مميز مباشرةً
--jwt مع clickhouse-client للمصادقة باستخدام رمز مميز تم الحصول عليه مسبقًا:
الخيار
--jwt لا يمكن استخدامه مع --user. عند تحديد --jwt، يُشتق اسم المستخدم من الرمز المميّز.واجهة HTTP
Authorization:
تسجيل الدخول باستخدام رمز جهاز OAuth2
clickhouse-client مسار رمز جهاز OAuth2 التفاعلي عبر الخيار --login. بالنسبة إلى نقاط النهاية في ClickHouse Cloud، يُجري العميل تلقائيًا عملية تبادل الرموز المميزة للحصول على JWT خاص بـ ClickHouse. تُحدَّث الرموز المميزة تلقائيًا أثناء الجلسة. وعند الحصول على رمز مميز جديد، يعيد العميل الاتصال تلقائيًا.
مُصادِق JWT المضمّن في ClickHouse Cloud
--login في clickhouse-client. يُضبط هذا المُصادِق على النحو التالي:
يحتوي المُصادِق المضمّن على حدٍّ للصلاحيات مضبوط على الدور
default_role والمستخدم default. وهذا يعني أن الصلاحيات الفعلية لأي مستخدم JWT تُقاطع مع الصلاحيات الممنوحة لهذين الكيانين، لذا لا يمكن لأي رمز JWT مطلقًا رفع الامتيازات إلى ما يتجاوز المسموح به لكل من default_role وdefault.
لا تحتاج إلى تهيئة أي شيء لاستخدام هذا المُصادِق. إذ يُوفَّر تلقائيًا عند إنشاء الخدمة.
الاتصال بين الخوادم
استكشاف الأخطاء وإصلاحها
- لم تُمنح صلاحيات الوصول: قد يفتقر الدور أو المستخدم المشار إليه إلى الامتيازات المطلوبة. تأكد من أن الأدوار المشار إليها في
clickhouse:rolesموجودة وتتضمن الامتيازات المناسبة. - رُفض الرمز المميز: تحقّق من أن
issوaudوخوارزمية التوقيع في الرمز المميز لديك تطابق ما يتوقعه موفّر JWT. إذا كان JWKS مستخدمًا، فتأكد من أنkidالخاص بالرمز المميز يطابق مفتاحًا في مجموعة مفاتيح الموفّر. - يختفي المستخدم بين الاستعلامات: يُزال المستخدمون المؤقتون بعد انتهاء صلاحية الرمز المميز. استخدم عميلًا يدعم تحديث الرمز المميز (مثل وضع
--login) للجلسات طويلة الأمد. - يفشل
CREATE USER ... IDENTIFIED WITH jwt: هذا متوقع. لا يمكن إنشاء مستخدمي JWT عبر DDL، إذ تُدار بالكامل من خلال دورة حياة الرمز المميز.