SLAPO-UNIQUE(5) File Formats Manual SLAPO-UNIQUE(5)

slapo-unique - روکش یکتایی ویژگی‌ها Attribute Uniqueness برای slapd

/etc/openldap/slapd.conf

روکش یکتایی ویژگی‌ها (Attribute Uniqueness) می‌تواند همراه با یک پایگاه‌دادهٔ بک‌اند مانند slapd-mdb(5) برای اعمال یکتایی برخی یا تمام ویژگی‌ها در یک دامنه (scope) استفاده شود. این زیردرخت به‌طور پیش‌فرض شامل تمام اشیاء درون زیردرخت پایگاه‌داده‌ای است که روکش یکتایی برای آن پیکربندی شده است.

یکتایی با جستجوی زیردرخت اعمال می‌شود تا اطمینان حاصل گردد که مقادیر تمام ویژگی‌های ارائه‌شده در یک عملیات add، modify یا modrdn درون آن دامنه یکتا هستند. برای نمونه، اگر یکتایی برای ویژگی uid اعمال شده باشد، زیردرخت برای یافتن هر رکورد دیگری که ویژگی uid آن حاوی همان مقدار باشد جستجو می‌شود. در صورت یافت شدن هر موردی، درخواست رد می‌شود.

این جستجو با استفاده از rootdn پایگاه‌داده انجام می‌شود تا از بروز مشکلاتی که در آن‌ها ACLها مانع از مشاهدهٔ تمام داده‌های مربوطه توسط روکش می‌شوند، جلوگیری گردد. بدین ترتیب، پایگاه‌داده حتماً باید یک rootdn پیکربندی‌شده داشته باشد.

این گزینه‌های slapd.conf بر روکش یکتایی ویژگی‌ها اعمال می‌شوند. آن‌ها باید بعد از دستورالعمل overlay قرار گیرند.

پیکربندی base، ویژگی‌ها، scope و filter را برای بررسی یکتایی انجام می‌دهد. چندین URI می‌توانند درون یک دامنه مشخص شوند که امکان گزینش پیچیدهٔ اشیاء را فراهم می‌کند. چندین عبارت unique_uri یا مقادیر ویژگی olcUniqueURI دامنه‌های مستقلی ایجاد می‌کنند که هر کدام فهرست‌های مستقل خود را از URIها و تنظیمات ignore/strict دارند.

کلیدواژه‌های strict، ignore و serialize هنگام استفاده از پیکربندی‌های منسوخ‌شدهٔ slapd.conf باید همراه با URI در علامت نقل‌قول (") قرار گیرند.

نحو LDAP URI زیرمجموعه‌ای از RFC-4516 است و به این صورت است:

ldap:///[base dn]?[attributes...]?scope[?filter]

بخش base dn به‌طور پیش‌فرض به base dn پایگاه‌دادهٔ بک‌اند تنظیم می‌شود. مقدارهای مشخص‌شده برای base dn باید درون زیردرخت پایگاه‌دادهٔ بک‌اند باشند.

اگر هیچ attributes (ویژگی‌هایی) مشخص نشود، URI بر تمام ویژگی‌های غیرعملیاتی اعمال می‌گردد.

مؤلفهٔ scope عملاً اجباری است، زیرا پیش‌فرض LDAP URIها برابر با دامنهٔ base است که برای بررسی یکتایی معتبر نیست، چرا که گروه‌های تک‌عضوی همواره یکتا هستند. دامنه‌های sub (برای زیردرخت) و one (برای یک سطح) معتبر هستند.

مؤلفهٔ filter باعث می‌شود که دامنه، قیدهای یکتایی را تنها بر اشیاء منطبق اعمال کند. برای نمونه ldap:///?cn?sub?(sn=e*) نیازمند ویژگی‌های یکتای cn برای تمام اشیاء درون زیردرخت پایگاه‌دادهٔ بک‌اند است که sn آن‌ها با یک e آغاز می‌شود.

امکان اعمال یکتایی بر تمامی ویژگی‌های غیرعملیاتی به جز موارد فهرست‌شده با قرار دادن کلیدواژهٔ ignore در ابتدای آن وجود دارد. در صورت عدم پیکربندی، تمام ویژگی‌های غیرعملیاتی (مانند سیستمی) باید یکتا باشند. توجه داشته باشید که فهرست attributes یک URI از نوع ignore به‌طور کلی باید شامل ویژگی‌های objectClass، dc، ou و o باشد، چرا که این ویژگی‌ها معمولاً یکتا نیستند و از نوع ویژگی‌های عملیاتی نیز به شمار نمی‌روند.

می‌توان با قرار دادن کلیدواژهٔ strict در ابتدا، بررسی سخت‌گیرانه را برای دامنهٔ یکتایی تنظیم کرد. به‌طور پیش‌فرض، یکتایی برای مقادیر تهی (null) اعمال نمی‌شود. فعال‌سازی حالت strict مفهوم یکتایی را به مقادیر تهی نیز گسترش می‌دهد، به‌طوری که تنها به یک ویژگی درون یک زیردرخت اجازه داده می‌شود مقدار تهی داشته باشد. سخت‌گیری (Strictness) بر تمام URIهای درون یک دامنهٔ یکتایی اعمال می‌شود، اما ممکن است برخی دامنه‌ها سخت‌گیرانه و برخی دیگر غیرسخت‌گیرانه باشند.

می‌توان با قرار دادن کلیدواژهٔ serialize در ابتدا، ترتیبی‌سازی سخت‌گیرانهٔ (strict serialization) تغییرات را اعمال کرد. به‌طور پیش‌فرض، هیچ ترتیبی‌سازی انجام نمی‌شود، بنابراین چندین تغییر که تقریباً به‌طور هم‌زمان رخ می‌دهند ممکن است نتایج یکتایی ناقصی را مشاهده کنند. استفاده از serialize عملیات‌های نوشتن منفرد را وادار می‌کند تا قبل از اجازه دادن به ادامهٔ سایر عملیات‌ها کاملاً تکمیل شوند، تا اطمینان حاصل شود که بررسی‌های یکتایی در هر عملیات سازگار و معتبر هستند.

امکان تنظیم هم‌زمان URIها و پارامترهای پیکربندی قدیمی slapo-unique وجود ندارد. به‌طور کلی، گزینه‌های پیکربندی موروثی بخش‌هایی از یک دامنهٔ زیردرخت منفرد بدون فیلتر را کنترل می‌کنند.

این پارامتر پیکربندی قدیمی باید به مؤلفهٔ base dn از سبک پارامتر unique_uri در بالا تبدیل شود.
این پارامتر پیکربندی قدیمی باید به یک پارامتر unique_uri با کلیدواژهٔ ignore همان‌طور که در بالا توضیح داده شد تبدیل شود.
این پارامتر پیکربندی قدیمی باید به یک پارامتر unique_uri همان‌طور که در بالا توضیح داده شد تبدیل شود.
این پارامتر پیکربندی قدیمی باید به کلیدواژهٔ strict اضافه‌شده به ابتدای پارامتر unique_uri همان‌طور که در بالا توضیح داده شد تبدیل شود.

unique_uri را نمی‌توان همراه با سبک پیکربندی قدیمی استفاده کرد و برعکس. با این حال، unique_uri می‌تواند هر کاری را که سیستم قدیمی‌تر انجام می‌داد پیاده‌سازی کند.

ویژگی‌های رایج برای URIهای ignore ldap:///... عمداً به‌صورت کدنوشتهٔ ثابت (hardcoded) در روکش قرار نگرفته‌اند تا بیشترین انعطاف‌پذیری در برآوردن نیازمندی‌های ویژهٔ هر محیط فراهم شود.

همانندسازی (Replication) و عملیات‌هایی با کنترل relax مجاز هستند این اعمال قانون را دور بزنند. بنابراین مهم است که تمام سرورهایی که عملیات نوشتن را می‌پذیرند، این روکش را پیکربندی کرده باشند تا یکتایی در یک DIT همانندسازی‌شده حفظ شود.

/etc/openldap/slapd.conf
فایل پیکربندی پیش‌فرض slapd

slapd.conf(5), slapd-config(5).

2026/03/09 OpenLDAP 2.6.13