> ## 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.

# إدارة حسابات خدمة قاعدة البيانات

> تصف هذه الصفحة كيف يمكن للمسؤولين إضافة حسابات خدمة قاعدة البيانات

يمكن أن تكون حسابات خدمة قاعدة البيانات بسيطة، مثل مستخدم لديه كلمة مرور أو شهادة منفصلة للمصادقة. وقد يرغب المستخدمون الأكثر تقدمًا في إعداد حسابات يمكن فيها تغيير نطاق الأذونات ديناميكيًا باستخدام SET ROLE، بما يتيح التبديل السريع بين ملفات profile من دون تسجيل الخروج أو إعادة تحميل المحتوى.

<div id="overview">
  ## نظرة عامة
</div>

يمكن استخدام [SET ROLE](/docs/ar/reference/statements/set-role) لتحديد نطاق الأذونات ديناميكيًا لحساب خدمة أثناء الجلسة. ويتم ذلك من خلال حصر الأذونات الفعلية للمستخدم في تلك التي تمنحها الأدوار المُفعَّلة فقط. ويوفّر هذا النهج عدة مزايا:

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

عمليًا، عليك:

1. تصميم أدوار تُحدِّد الحدود المسموح بها (read\_only وmaintenance وما إلى ذلك)
2. منحها إلى حساب الخدمة
3. عند إنشاء الاتصال، اختيار الدور أو الأدوار النشطة عبر `SET ROLE` (أو معلمة الدور)، وبذلك تُقيَّد الإجراءات التي يمكن لتلك الجلسة تنفيذها

<div id="setup-service-roles">
  ## إعداد دور خدمة
</div>

<Steps>
  <Step title="منح الأدوار إلى حساب الخدمة" id="grant-roles-to-service-account">
    أولًا، أنشئ الأدوار بالامتيازات/الإعدادات التي تريدها، ثم امنحها لحساب الخدمة.

    ```sql theme={null}
    CREATE ROLE read_only_role;
    GRANT SELECT ON db1.* TO read_only_role;

    CREATE ROLE maint_role;
    GRANT SELECT, INSERT, ALTER on db1.* TO maint_role;

    GRANT read_only_role, maint_role TO service_user;
    ```
  </Step>

  <Step title="استخدام SET ROLE لتحديد حدود الجلسة" id="define-permission-boundaries">
    في بداية الجلسة، يختار حساب الخدمة الأدوار النشطة:

    ```sql theme={null}
    -- سلوك القراءة فقط لهذه الجلسة
    SET ROLE read_only_role;
    ```

    أو:

    ```sql theme={null}
    -- استخدام جميع الأدوار الممنوحة (الصلاحيات الكاملة)
    SET ROLE ALL;
    ```

    يُفعِّل `SET ROLE` الأدوار للمستخدم الحالي؛ وتكون الامتيازات الفعلية هي اتحاد جميع الأدوار النشطة، بالإضافة إلى أي امتيازات مُنحت مباشرةً للمستخدم.

    يمكنك أيضًا إلغاء تنشيط جميع الأدوار:

    ```sql theme={null}
    SET ROLE NONE;
    ```

    أو تنشيط عدة أدوار:

    ```sql theme={null}
    SET ROLE read_only_role, maint_role;
    ```

    يمكن الاطلاع على الأدوار النشطة حاليًا عبر `system.current_roles`.
  </Step>

  <Step title="تعيين الأدوار الافتراضية لحساب الخدمة" id="set-default-role">
    لضمان أن يبدأ حساب الخدمة دائمًا في وضع مقيّد، قم بتكوين الأدوار الافتراضية:

    ```sql theme={null}
    SET DEFAULT ROLE read_only_role TO service_user;
    ```

    أو

    ```sql theme={null}
    SET DEFAULT ROLE ALL EXCEPT maint_role TO service_user;
    ```
  </Step>

  <Step title="استخدام SET ROLE عبر HTTP / برمجيًا" id="use-set-role-programmatically">
    إذا كان حساب الخدمة يتصل عبر HTTP، فلا يمكنك إرسال SET ROLE; SELECT ... كعبارة متعددة. بدلًا من ذلك، مرّر الدور كمعلمة استعلام:

    ```shell theme={null}
    curl "https://host:8123?user=service_user&password=...&role=read_only_role" \
     --data-binary "SELECT * FROM db1.table1"
    ```

    `?role=`... يعادل تنفيذ `SET ROLE read_only_role` قبل العبارة. وتتعامل معلمات الأدوار المتعددة كما لو أنها `SET ROLE role 1, role 2`.

    تعرض بعض برامج التشغيل (مثل ClickHouse Connect لـ بايثون) أيضًا إعدادًا للدور يُرسَل مع كل طلب، ويستخدمه الخادم بوصفه دور الجلسة.
  </Step>
</Steps>
