- استعلامات قراءة البيانات:
SELECT,SHOW,DESCRIBE,EXISTS. - استعلامات كتابة البيانات:
INSERT,OPTIMIZE,DELETE,UPDATE,ALTER TABLE ... DELETE,ALTER TABLE ... UPDATE. - استعلامات تغيير الإعدادات:
SET,USE. - استعلامات DDL:
CREATE,ALTER,RENAME,EXCHANGE,ATTACH,DETACH,DROP,TRUNCATE. - استعلامات إدارة الوصول:
GRANT,REVOKE, وCREATEوALTERوDROPللمستخدمين والأدوار وسياسات الصفوف وسياسات الإخفاء والحصص وملفات تعريف الإعدادات. راجع التحكم في الوصول وإدارة الحسابات. KILL QUERY.
ALTER TABLE ... DELETE وALTER TABLE ... UPDATE البيانات نفسها لا البيانات الوصفية للجدول، ولذلك أُدرجا أعلاه ضمن استعلامات كتابة البيانات. وهما يتطلبان امتيازَي ALTER DELETE وALTER UPDATE، وهما الامتيازان نفسهما اللذان تتطلبهما عبارتا DELETE وUPDATE المستقلتان. وتنتمي هذه الامتيازات إلى مجموعة امتيازات ALTER TABLE، لذا فإن allow_ddl = 0 يرفض العبارات الأربع جميعها على أي جدول دائم.
تنظّم الإعدادات التالية أذونات المستخدم وفقًا لنوع الاستعلام:
readonly
يقيّد الاستعلامات التي يمكن للجلسة تنفيذها. قيم هذا الإعداد وقيمته الافتراضية والإعدادات التي تتيح كل قيمة تغييرها موصوفة في مرجع الإعدادات؛ ويصف هذا القسم فئات الاستعلامات التي تسمح بها كل قيمة. عند ضبطه على 1، يسمح باستعلامات مثل:- استعلامات القراءة (مثل
SELECTوالاستعلامات المكافئة لها). - الاستعلامات التي تعدّل سياق الجلسة فقط (مثل
USE).
SET وCREATE TEMPORARY TABLE وRESTORE. وبما أن RESTORE يمكنه إنشاء جدول وتحميل البيانات إليه، فإن readonly = 2 لا يمنع بحد ذاته الجلسة من
الكتابة، بينما يرفضها readonly = 1.
أما BACKUP فلا يقيّده readonly عند أي قيمة: فالجلسة التي تملك امتيازات النسخ الاحتياطي لجدول ما يمكنها كتابة نسخة احتياطية حتى عند readonly = 1. لذا لا تعتمد على readonly لمنع النسخ الاحتياطي.
تحتاج معظم دوال الجداول إلى امتياز CREATE TEMPORARY TABLE، لذا يُرفض استعلام SELECT الذي يقرأ من إحداها عند readonly = 1 دون readonly = 2. وبعضها، مثل numbers، مسموح به في وضع
القراءة فقط.
عند أي قيمة أكبر من 0، لا يُسمح بأي مما يلي على جدول دائم: استعلامات كتابة البيانات
(INSERT وOPTIMIZE وDELETE وUPDATE وALTER TABLE ... DELETE وALTER TABLE ... UPDATE) أو استعلامات DDL
(CREATE وALTER TABLE وALTER VIEW وRENAME وEXCHANGE وATTACH وDETACH وDROP
وTRUNCATE TABLE). كما لا يُسمح بعبارات SYSTEM التي تتطلب امتيازًا من مجموعة SYSTEM، ولا بعمليات CREATE وALTER
وDROP للمستخدمين والأدوار وسياسات الصفوف وسياسات الإخفاء والحصص وملفات تعريف الإعدادات. وتُستثنى من ذلك إدارة المجموعات المسماة، إذ لا يقيّد readonly
CREATE NAMED COLLECTION ولا ALTER NAMED COLLECTION ولا DROP NAMED COLLECTION.
كذلك يُرفض منح امتياز باستخدام GRANT، لكن لا ينطبق ذلك على كل عبارات إدارة الوصول: فعبارتا REVOKE المحلية وGRANT CURRENT GRANTS غير خاضعتين لـ readonly، لذا يمكن لجلسة للقراءة فقط أن تسحب
امتيازًا تملكها مع خيار المنح وأن تنقل صلاحياتها إلى مستخدم آخر.
أما سحب امتياز باستخدام ON CLUSTER فيُرفض.
الجداول المؤقتة مستثناة من كلا الإعدادين: فالجلسة التي يمكنها إنشاء جدول مؤقت يمكنها أيضًا تنفيذ ALTER عليه،
والإدراج فيه وحذفه.
عبر واجهة HTTP، يُنفَّذ الطلب الذي لا تكون طريقته
POST بقيمة
readonly = 2 إذا كانت القيمة الفعّالة ستكون 0 لولا ذلك. ويُحتفظ بأي قيمة أكثر صرامة سبق ضبطها عبر
إعدادات المستخدم أو عبر ملف تعريف إعدادات. وتُستثنى PUT وDELETE عندما تصل إلى
معالج معرّف بلغة SQL يقبلها، فيمكن لمثل هذا الطلب أن
يعدّل البيانات عندما تكون قيمة readonly الفعّالة 0؛ وإلا فاستخدم طريقة POST لتعديل البيانات.وفي الطلب الذي رُفعت قيمته بهذه الطريقة، يُرفض تمرير معامل readonly في سلسلة الاستعلام برسالة
Cannot modify 'readonly' setting in readonly mode ما لم يحدد القيمة التي يحملها الطلب أصلًا.توجد طريقة لمنع المستخدم من تغيير إعدادات محددة فقط، وطريقة للسماح بتغيير
إعدادات محددة فقط ضمن قيود readonly = 1. لمزيد من التفاصيل راجع
القيود على الإعدادات، التي
تنصح كذلك بعدم جعل إعداد readonly نفسه
قابلًا للتغيير في وضع القراءة فقط.allow_ddl
يسمح باستعلامات DDL أو يمنعها على قواعد البيانات، والجداول، وطرق العرض، والقواميس، والدوال المعرّفة من قبل المستخدم، وأحمال العمل، والموارد، والمعالجات المعرّفة بلغة SQL. القيم الممكنة:- 0 — يُحظر تنفيذ أي استعلام على كائن دائم يحتاج إلى أي من الامتيازات التالية:
CREATE DATABASE،DROP DATABASE،CREATE TABLE،CREATE VIEW،ALTER TABLE،ALTER VIEW،DROP TABLE،DROP VIEW،TRUNCATE،CREATE DICTIONARY،DROP DICTIONARY،CREATE FUNCTION،DROP FUNCTION،CREATE WORKLOAD،DROP WORKLOAD،CREATE RESOURCE،DROP RESOURCE،CREATE HANDLER،ALTER HANDLER،DROP HANDLER. وتحتاجRENAMEوEXCHANGEوATTACHوDETACHإلى هذه الامتيازات أيضًا، لذا فهي محظورة كذلك، باستثناءALTER TABLE ... ATTACH PARTITIONوATTACH PARTاللتين تحتاجان إلىINSERTفقط ولا يحظرهما هذا الإعداد، وإن كانreadonlyيحظرهما على الجدول الدائم. أماATTACH PARTITION ... FROMفتحتاج إلىALTER DELETEأيضًا، ولذلك فهي محظورة. ولا يشمل الحظر منح هذه الامتيازات أو سحبها. - 1 — لا يحظر هذا الإعداد شيئًا.
لا يمكنك تنفيذ
SET allow_ddl = 1 إذا كانت allow_ddl = 0 في الجلسة الحالية.لا يقيّد allow_ddl استعلامات إدارة الوصول: فـ GRANT وREVOKE وCREATE وALTER وDROP
للمستخدمين والأدوار وسياسات الصفوف وسياسات الإخفاء والحصص وملفات تعريف الإعدادات لا تتأثر
به. كما لا تتأثر CREATE TEMPORARY TABLE وإدارة المجموعات المسمّاة، وكذلك
ALTER DATABASE ... MODIFY SETTING وALTER DATABASE ... MODIFY COMMENT وUNDROP TABLE، وهي
غير مقيّدة بـ readonly أيضًا. وداخل CREATE أو ALTER لمستخدم أو دور أو ملف تعريف إعدادات،
تُرفض جملة SETTINGS allow_ddl = 1 ما دامت الجلسة الحالية لديها allow_ddl = 0،
بينما تُقبل جملة SETTINGS allow_ddl = 0. ويجري التحقق من الإعداد المضمّن وفق قيود إعدادات
الجلسة نفسها، وهذا أيضًا سبب رفض SET allow_ddl = 1.KILL QUERYلا يتطلب إنهاء استعلاماتك الخاصة امتياز
KILL QUERY، لذا فهو يعمل مع أي مزيج
من readonly وallow_ddl، لكنه يتطلب SELECT على system.processes، باستثناء
KILL QUERY WHERE query_id = '<id>'، الذي يلغي استعلامك الخاص الذي يحمل هذا المعرّف دون قراءة ذلك
الجدول. أما إنهاء استعلام يخص مستخدمًا آخر، وأي KILL QUERY ... ON CLUSTER، فيتطلب
امتياز KILL QUERY، وهو ما يرفضه readonly = 1 وreadonly = 2.إعدادات أخرى ذات صلة
allow_introspection_functionsهو الإعداد الثالث الذي يشارك في قرار الصلاحية نفسه، إلى جانبreadonlyوallow_ddl. فعند تعطيله، يُحظر تنفيذ دوال introspection، بينما لا يُحظر منح صلاحيةINTROSPECTION.allow_non_metadata_altersليس إعداد صلاحيات، لكنه يفرض قيودًا إضافية علىALTER TABLE: فعند تعطيله، يُرفض أي أمر يغيّر تعريف الجدول في جداول عائلةMergeTreeإذا كان تطبيقه سيؤدي إلى إعادة كتابة البيانات على القرص (DROP COLUMN،RENAME COLUMN، تغيير النوع عبرMODIFY COLUMN،MODIFY TTL). كما تُرفضCLEAR COLUMNوCLEAR INDEXوCLEAR PROJECTION، رغم أنها تترك التعريف دون تغيير. أما العبارات التي تُعدّ بحد ذاتها mutations، مثلALTER TABLE ... DELETEوALTER TABLE ... UPDATEوALTER TABLE ... MATERIALIZE INDEX، فلا تتأثر.