> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# تهيئة شهادة مستخدم SSL للمصادقة

> يوفّر هذا الدليل إعدادات بسيطة وبالحد الأدنى لتهيئة المصادقة باستخدام شهادات مستخدم SSL.

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            غير مدعوم في ClickHouse Cloud
        </div>;
};

<CloudNotSupportedBadge />

<Note>
  هذه الصفحة لا تنطبق على [ClickHouse Cloud](https://clickhouse.com/cloud). الميزة الموثقة هنا غير متاحة في خدمات ClickHouse Cloud.
  راجع دليل [التوافق مع Cloud](/docs/ar/products/cloud/guides/cloud-compatibility) الخاص بـ ClickHouse لمزيد من المعلومات.
</Note>

يوفّر هذا الدليل إعدادات بسيطة وبالحد الأدنى لتهيئة المصادقة باستخدام شهادات مستخدم SSL. ويستند هذا الدليل العملي إلى [دليل المستخدم لإعداد TLS](/docs/ar/concepts/features/security/tls/configuring-tls).

<Note>
  تكون مصادقة المستخدم عبر 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`.
</Note>

<Steps>
  <Step title="إنشاء شهادات مستخدم SSL" id="1-create-ssl-user-certificates">
    <Note>
      يستخدم هذا المثال شهادات موقَّعة ذاتيًا مع CA موقَّعة ذاتيًا. في بيئات production، أنشئ CSR وقدّمه إلى فريق PKI لديك أو إلى موفّر الشهادات للحصول على شهادة معتمدة.
    </Note>

    1. أنشئ طلب توقيع شهادة (CSR) ومفتاحًا. يكون التنسيق الأساسي كما يلي:
       ```bash theme={null}
       openssl req -newkey rsa:2048 -nodes -subj "/CN=<my_host>:<my_user>"  -keyout <my_cert_name>.key -out <my_cert_name>.csr
       ```
       في هذا المثال، سنستخدم ما يلي للنطاق والمستخدم اللذين سيُستخدمان في بيئة العينة هذه:
       ```bash theme={null}
       openssl req -newkey rsa:2048 -nodes -subj "/CN=chnode1.marsnet.local:cert_user"  -keyout chnode1_cert_user.key -out chnode1_cert_user.csr
       ```

    <Note>
      قيمة CN اختيارية، ويمكن استخدام أي سلسلة نصية كمعرّف للشهادة. وتُستخدم عند إنشاء المستخدم في الخطوات التالية.
    </Note>

    2. أنشئ شهادة المستخدم الجديدة ووقّعها لاستخدامها في المصادقة. يكون التنسيق الأساسي كما يلي:
       ```bash theme={null}
       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
       ```
       في هذا المثال، سنستخدم ما يلي للنطاق والمستخدم اللذين سيُستخدمان في بيئة العينة هذه:
       ```bash theme={null}
       openssl x509 -req -in chnode1_cert_user.csr -out chnode1_cert_user.crt -CA marsnet_ca.crt -CAkey marsnet_ca.key -days 365
       ```
  </Step>

  <Step title="إنشاء مستخدم في SQL ومنحه الأذونات" id="2-create-a-sql-user-and-grant-permissions">
    <Note>
      للاطّلاع على تفاصيل حول كيفية تمكين مستخدمي SQL وتعيين الأدوار، راجع دليل المستخدم [تعريف مستخدمي SQL والأدوار](/docs/ar/concepts/features/security/access-rights).
    </Note>

    1. أنشئ مستخدم SQL مُهيّأ لاستخدام المصادقة بالشهادة:
       ```sql theme={null}
       CREATE USER cert_user IDENTIFIED WITH ssl_certificate CN 'chnode1.marsnet.local:cert_user';
       ```

    2. امنح مستخدم الشهادة الجديد الامتيازات:
       ```sql theme={null}
       GRANT ALL ON *.* TO cert_user WITH GRANT OPTION;
       ```

    <Note>
      يُمنح المستخدم امتيازات إدارية كاملة في هذا التمرين لأغراض العرض التوضيحي. راجع وثائق ClickHouse الخاصة بـ [RBAC](/docs/ar/concepts/features/security/access-rights) للاطّلاع على إعدادات الأذونات.
    </Note>

    <Note>
      نوصي باستخدام SQL لتعريف المستخدمين والأدوار. ومع ذلك، إذا كنت تُعرّف المستخدمين والأدوار حاليًا في ملفات التهيئة، فسيبدو المستخدم كما يلي:

      ```xml theme={null}
      <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>
      ```
    </Note>
  </Step>

  <Step title="التحقق" id="3-testing">
    1. انسخ شهادة المستخدم، والمفتاح الخاص بالمستخدم، وشهادة CA إلى عقدة بعيدة.

    2. قم بتكوين OpenSSL في [إعدادات العميل](/docs/ar/concepts/features/interfaces/client#configuration_files) الخاصة بـ ClickHouse باستخدام الشهادة والمسارات.

       ```xml theme={null}
       <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`.
       ```bash theme={null}
       clickhouse-client --user <my_user> --query 'SHOW TABLES'
       ```

    <Note>
      لاحظ أن كلمة المرور التي يتم تمريرها إلى clickhouse-client يتم تجاهلها عند تحديد شهادة في الإعدادات.
    </Note>
  </Step>

  <Step title="اختبار HTTP" id="4-testing-http">
    1. انسخ شهادة المستخدم ومفتاح المستخدم وشهادة CA إلى node بعيدة.

    2. استخدم `curl` لاختبار أمر SQL تجريبي. يكون التنسيق الأساسي كما يلي:
       ```bash theme={null}
       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 @-
       ```
       على سبيل المثال:
       ```bash theme={null}
       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 @-
       ```
       سيكون الناتج مشابهًا لما يلي:
       ```response theme={null}
       INFORMATION_SCHEMA
       default
       information_schema
       system
       ```

    <Note>
      لاحظ أنه لم يتم تحديد أي كلمة مرور؛ إذ تُستخدم الشهادة بدلًا من كلمة المرور، وهي الطريقة التي سيُجري بها ClickHouse مصادقة المستخدم.
    </Note>
  </Step>
</Steps>

<div id="summary">
  ## الملخص
</div>

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