الانتقال إلى المحتوى الرئيسي
هذه الصفحة لا تنطبق على ClickHouse Cloud. الميزة الموثقة هنا غير متاحة في خدمات ClickHouse Cloud. راجع دليل التوافق مع Cloud الخاص بـ ClickHouse لمزيد من المعلومات.
يوفّر هذا الدليل إعدادات بسيطة وبالحد الأدنى لتهيئة المصادقة باستخدام شهادات مستخدم SSL. ويستند هذا الدليل العملي إلى دليل المستخدم لإعداد TLS.
تكون مصادقة المستخدم عبر SSL مدعومة عند استخدام واجهات https وnative وmysql وpostgresql.يجب ضبط <verificationMode>strict</verificationMode> على عُقد ClickHouse لضمان مصادقة آمنة (مع أن relaxed يعمل لأغراض الاختبار).إذا كنت تستخدم AWS NLB مع واجهة MySQL، فيتعين عليك أن تطلب من دعم AWS تمكين الخيار غير الموثّق التالي:
أود أن أتمكن من تهيئة بروتوكول الوكيل v2 لـ NLB لدينا على النحو التالي: proxy_protocol_v2.client_to_server.header_placement,Value=on_first_ack.

1. إنشاء شهادات مستخدم SSL

يستخدم هذا المثال شهادات موقَّعة ذاتيًا مع CA موقَّعة ذاتيًا. في بيئات production، أنشئ CSR وقدّمه إلى فريق PKI لديك أو إلى موفّر الشهادات للحصول على شهادة معتمدة.
  1. أنشئ طلب توقيع شهادة (CSR) ومفتاحًا. يكون التنسيق الأساسي كما يلي:
    openssl req -newkey rsa:2048 -nodes -subj "/CN=<my_host>:<my_user>"  -keyout <my_cert_name>.key -out <my_cert_name>.csr
    
    في هذا المثال، سنستخدم ما يلي للنطاق والمستخدم اللذين سيُستخدمان في بيئة العينة هذه:
    openssl req -newkey rsa:2048 -nodes -subj "/CN=chnode1.marsnet.local:cert_user"  -keyout chnode1_cert_user.key -out chnode1_cert_user.csr
    
قيمة CN اختيارية، ويمكن استخدام أي سلسلة نصية كمعرّف للشهادة. وتُستخدم عند إنشاء المستخدم في الخطوات التالية.
  1. أنشئ شهادة المستخدم الجديدة ووقّعها لاستخدامها في المصادقة. يكون التنسيق الأساسي كما يلي:
    openssl x509 -req -in <my_cert_name>.csr -out <my_cert_name>.crt -CA <my_ca_cert>.crt -CAkey <my_ca_cert>.key -days 365
    
    في هذا المثال، سنستخدم ما يلي للنطاق والمستخدم اللذين سيُستخدمان في بيئة العينة هذه:
    openssl x509 -req -in chnode1_cert_user.csr -out chnode1_cert_user.crt -CA marsnet_ca.crt -CAkey marsnet_ca.key -days 365
    

2. أنشئ مستخدم SQL وامنحه الصلاحيات

للاطلاع على تفاصيل كيفية تمكين مستخدمي SQL وتعيين الأدوار، راجع دليل المستخدم Defining SQL Users and Roles.
  1. أنشئ مستخدم SQL مُعدًّا لاستخدام authentication بالشهادة:
    CREATE USER cert_user IDENTIFIED WITH ssl_certificate CN 'chnode1.marsnet.local:cert_user';
    
  2. امنح المستخدم الجديد المعتمد على الشهادة الامتيازات:
    GRANT ALL ON *.* TO cert_user WITH GRANT OPTION;
    
يُمنح هذا المستخدم امتيازات المسؤول الكاملة في هذا التمرين لأغراض توضيحية. راجع وثائق RBAC في ClickHouse للاطلاع على إعدادات الصلاحيات.
نوصي باستخدام SQL لتعريف المستخدمين والأدوار. ومع ذلك، إذا كنت تُعرّف المستخدمين والأدوار حاليًا في ملفات configuration، فسيكون تعريف المستخدم على النحو التالي:
<users>
    <cert_user>
        <ssl_certificates>
            <common_name>chnode1.marsnet.local:cert_user</common_name>
        </ssl_certificates>
        <networks>
            <ip>::/0</ip>
        </networks>
        <profile>default</profile>
        <access_management>1</access_management>
        {/* خيارات إضافية*/}
    </cert_user>
</users>

3. الاختبار

  1. انسخ شهادة المستخدم والمفتاح الخاص بالمستخدم وشهادة المرجع المصدق (CA) إلى عقدة بعيدة.
  2. هيّئ OpenSSL في ملف إعدادات عميل ClickHouse وحدد الشهادة والمسارات.
    <openSSL>
        <client>
            <certificateFile>my_cert_name.crt</certificateFile>
            <privateKeyFile>my_cert_name.key</privateKeyFile>
            <caConfig>my_ca_cert.crt</caConfig>
        </client>
    </openSSL>
    
  3. شغّل clickhouse-client.
    clickhouse-client --user <my_user> --query 'SHOW TABLES'
    
لاحظ أن كلمة المرور التي تُمرَّر إلى clickhouse-client يتم تجاهلها عند تحديد شهادة في ملف الإعدادات.

4. اختبار HTTP

  1. انسخ شهادة المستخدم ومفتاحه وشهادة المرجع المصدق (CA) إلى عقدة بعيدة.
  2. استخدم curl لاختبار أمر SQL نموذجي. الصيغة الأساسية هي:
    echo 'SHOW TABLES' | curl 'https://<clickhouse_node>:8443' --cert <my_cert_name>.crt --key <my_cert_name>.key --cacert <my_ca_cert>.crt -H "X-ClickHouse-SSL-Certificate-Auth: on" -H "X-ClickHouse-User: <my_user>" --data-binary @-
    
    على سبيل المثال:
    echo 'SHOW TABLES' | curl 'https://chnode1:8443' --cert chnode1_cert_user.crt --key chnode1_cert_user.key --cacert marsnet_ca.crt -H "X-ClickHouse-SSL-Certificate-Auth: on" -H "X-ClickHouse-User: cert_user" --data-binary @-
    
    سيكون الناتج مشابهًا لما يلي:
    INFORMATION_SCHEMA
    default
    information_schema
    system
    
لاحظ أنه لم يتم تحديد كلمة مرور؛ إذ تُستخدم الشهادة بدلًا منها، وبهذه الطريقة يُجري ClickHouse مصادقة المستخدم.

الملخص

استعرضت هذه المقالة أساسيات إنشاء مستخدم وتهيئته لمصادقة شهادة SSL. ويمكن استخدام هذه الطريقة مع clickhouse-client أو أي عميل يدعم واجهة https ويمكن تعيين رؤوس HTTP فيه. يجب الحفاظ على خصوصية الشهادة والمفتاح اللذين جرى إنشاؤهما مع تقييد الوصول إليهما، لأن الشهادة تُستخدم لمصادقة المستخدم وتخويله لإجراء عمليات على قاعدة بيانات ClickHouse. تعامل مع الشهادة والمفتاح كما لو كانا كلمتي مرور.
آخر تعديل في ٢٥ يونيو ٢٠٢٦