نظرة عامة
في ClickHouse، تشير “القيود” المفروضة على الإعدادات إلى الحدود والقواعد التي يمكنك تعيينها للإعدادات. ويمكن تطبيق هذه القيود للحفاظ على الاستقرار والأمان وسهولة التنبؤ بسلوك قاعدة البيانات.تعريف القيود
يمكن تعريف القيود على الإعدادات في قسمملف التعريف ضمن ملف الإعداد user.xml.
وهي تمنع المستخدمين من تغيير بعض الإعدادات باستخدام تعليمة
SET.
تُعرَّف القيود على النحو التالي:
أنواع القيود
هناك عدة أنواع من القيود التي يدعمها ClickHouse:minmaxdisallowedreadonly(بالاسم المستعارconst)changeable_in_readonly
min وmax الحدين الأدنى والأقصى لإعداد رقمي،
ويمكن استخدامهما معًا.
يمكن استخدام القيد disallowed لتحديد قيمة أو قيم معيّنة
لا ينبغي السماح بها لإعداد محدد.
ينصّ القيد readonly أو const على أن المستخدم لا يمكنه تغيير
الإعداد المقابل مطلقًا.
يتيح نوع القيد changeable_in_readonly للمستخدمين تغيير الإعداد
ضمن نطاق min/max حتى إذا كان الإعداد readonly مضبوطًا على 1،
وإلا فلن يُسمح بتغيير الإعدادات في وضع readonly=1.
لا يكون
changeable_in_readonly مدعومًا إلا إذا كان settings_constraints_replace_previous
مفعّلًا:لا تجعل readonly قابلاً للتغيير في وضع القراءة فقط
لا تضع علامة changeable_in_readonly على readonly نفسه. فإن فعلت، فإن أي session تبدأ بـ readonly = 1 يمكنها تنفيذ SET readonly = 0 واستعادة القدرة على تنفيذ استعلامات الكتابة التي تسمح بها امتيازاتها الحالية أصلاً، ما لم يحظر القيد نفسه القيمة 0 أيضاً.
ولهذا أهمية بالنسبة لكل ملف تعريف تُعرّفه، وليس فقط الملفات التي تُعيّنها:
- لا يخضع
SET profileلفحص الوصول، لذا يمكن لأي session اختيار أي ملف تعريف باسمه. ويظل ملف التعريف متاحاً حتى إن لم تُعيّنه لأي أحد، وإن كان ما يغيّره حينئذٍ يظل خاضعاً للفحص وفق القيود النشطة مسبقاً في تلك الـ session. - عبر HTTP، لا تُفرَض القيمة
readonly = 2على طلباتGETإلا إذا كانت القيمة الفعلية ستكون0في الأصل. لذا فإن أي ملف تعريف يضبطreadonly = 1ويسمح في الوقت نفسه بتغييرreadonlyفي وضع القراءة فقط يُبطل هذه الحماية، إذ يمكن لطلبGETأن يحوّلها إلى0وينفّذ الكتابة.
ملفات تعريف القيود المتعددة
إذا كان هناك عدة ملفات تعريف نشطة لمستخدم، فستُدمَج القيود. تعتمد عملية الدمج علىsettings_constraints_replace_previous:
- true (موصى به): تُستبدَل القيود الخاصة بالإعداد نفسه أثناء الدمج، بحيث يُستخدَم القيد الأخير وتُتجاهَل جميع القيود السابقة. ويشمل ذلك الحقول غير المعيّنة في القيد الجديد.
- false (افتراضي): تُدمَج القيود الخاصة بالإعداد نفسه بطريقة يُؤخَذ فيها كل نوع من القيود غير المعيّنة من ملف التعريف السابق، ويُستبدَل كل نوع من القيود المعيّنة بالقيمة من ملف التعريف الجديد.
وضع القراءة فقط
يُفعَّل وضع القراءة فقط عبر الإعدادreadonly، ولا ينبغي الخلط بينه وبين نوع القيد readonly. فعندما تكون readonly = 1، يبقى بالإمكان تغيير إعدادٍ كان سيُرفض لولا ذلك، إذا سمح بذلك القيد changeable_in_readonly. ولمعرفة دلالة قيم هذا الإعداد، راجع مرجع الإعدادات؛ ولمعرفة أصناف الاستعلامات التي تسمح بها كل قيمة، وكيفية ضبطها عبر HTTP interface، راجع أذونات الاستعلامات.
مثال
ليتضمّن الملفusers.xml الأسطر التالية:
يُتعامل مع ملف التعريف
default على نحوٍ خاص: إذ تصبح جميع القيود المعرّفة
لملف التعريف default هي القيود الافتراضية، وبالتالي تُطبَّق على جميع المستخدمين
ما لم يُتجاوز عنها صراحةً لهؤلاء المستخدمين.قيود على إعدادات MergeTree
يمكن فرض قيود على إعدادات MergeTree. تُطبَّق هذه القيود عند إنشاء جدول يستخدم محرك MergeTree أو عند تعديل إعدادات التخزين الخاصة به. يجب أن يُسبق اسم إعداد MergeTree بالبادئةmerge_tree_ عند
الإشارة إليه في قسم <constraints>.
مثال
يمكنك منع إنشاء جداول جديدة مع تحديدstorage_policy صراحةً