MYSQL_TABLE(5) File Formats Manual MYSQL_TABLE(5)

mysql_table - پیکربندی کارخواه MySQL/MariaDB در Postfix

?Bpostmap -q "?Istring?B" mysql:/etc/postfix/?Ifilename?R
?Bpostmap -q - mysql:/etc/postfix/?Ifilename?B <?Iinputfile?R


سیستم ایمیل Postfix از جدول‌های اختیاری برای بازنویسی نشانی یا مسیریابی ایمیل استفاده می‌کند. این جدول‌ها معمولاً در قالب‌های ?Blmdb:?R، ?Bcdb:?R، ?Bhash:?R یا ?Bdbm:?R هستند.

به عنوان یک جایگزین، جدول‌های جستجو می‌توانند به عنوان پایگاه‌های داده MySQL مشخص شوند. برای اطلاع از اینکه سیستم Postfix شما از چه انواع جدول‌های جستجویی پشتیبانی می‌کند، از دستور «?Bpostconf -m?R» استفاده کنید.

برای استفاده از جستجوهای MySQL، یک منبع MySQL را به عنوان جدول جستجو در main.cf تعریف کنید؛ برای نمونه:

alias_maps = mysql:/etc/postfix/mysql-aliases.cf

فایل etc/postfix/mysql-aliases.cf/ قالبی مشابه فایل main.cf پست‌فیکس دارد، و می‌تواند پارامترهای شرح‌داده‌شده در زیر را مشخص کند.

اگرچه نام مؤلفه در Postfix برابر با 'mysql' است، کارخواه‌ها و کارسازهای MariaDB/MySQL می‌توانند به جای یکدیگر استفاده شوند زیرا عملکردی که Postfix به آن وابسته است در هر دو موجود است. با این حال، پایگاه کد آن‌ها ممکن است در آینده از هم فاصله بگیرد.

هنگام استفاده از SQL برای ذخیره فهرست‌هایی مانند mynetworks$، mydestination$، relay_domains$، local_recipient_maps$ و غیره، درک این نکته مهم است که جدول باید هر عضو فهرست را به عنوان یک کلید جداگانه ذخیره کند. جستجوی جدول *وجود داشتن* کلید را بررسی می‌کند. برای توضیحات بیشتر، بخش "Postfix lists versus tables" را در سند DATABASE_README ببینید.

جدول‌هایی ایجاد نکنید که کل فهرست دامنه‌ها در mydestination$ یا relay_domains$ یا نشانی‌های IP در mynetworks$ را بازگردانند.

جدول‌هایی ایجاد کنید که هر مورد منطبق را به عنوان یک کلید و با یک مقدار اختیاری داشته باشند. در پایگاه‌های داده SQL معمول است که خود کلید یا یک مقدار ثابت بازگردانده شود.

?Bhosts?R
میزبان‌هایی که Postfix برای اتصال و پرس‌وجو به آن‌ها تلاش خواهد کرد. برای سوکت‌های دامنه یونیکس ?Iunix:?R و برای اتصالات TCP عبارت ?Iinet:?R (پیش‌فرض) را مشخص کنید. مثال‌ها:
hosts = inet:host1.some.domain inet:host2.some.domain:port
hosts = host1.some.domain host2.some.domain:port
hosts = unix:/file/name

میزبان‌ها به ترتیب تصادفی بررسی می‌شوند و تمام اتصالات روی سوکت‌های دامنه یونیکس پیش از اتصالات روی TCP بررسی خواهند شد. اتصالات پس از حدود ۱ دقیقه بیکاری به طور خودکار بسته می‌شوند و در صورت نیاز مجدداً باز خواهند شد. نسخه‌های 2.0 و پیشین پست‌فیکس ترتیب میزبان‌ها را تصادفی نمی‌کردند.

نکته: اگر localhost را به عنوان نام میزبان مشخص کنید (حتی با پیشوند ?Iinet:?R)، MySQL به سوکت دامنه یونیکس پیش‌فرض متصل خواهد شد. برای دستور به MySQL جهت اتصال به localhost از طریق TCP باید مشخص کنید:

hosts = 127.0.0.1

نکته: اگر تنظیم ?Bhosts?R تنها یک سرور را مشخص کند، این کارخواه فرض می‌کند که مقصد یک متعادل‌کننده بار (load balancer) است و بلافاصله پس از یک شکست مجدداً متصل می‌شود. در نسخه‌های 3.9 و پیشین پست‌فیکس، همان سرور را دو بار مشخص کنید.

?Buser?R
?Bpassword?R
نام کاربری و گذرواژه برای ورود به سرور MySQL. مثال:
user = someone
password = some_password
?Bdbname?R
نام پایگاه داده روی سرورها. مثال:
dbname = customer_database
?Bcharset (پیش‌فرض: utf8mb4)?R
مجموعه نویسه‌های پیش‌فرض کارخواه MySQL؛ این مورد ترتیب تطبیق (collation) را نیز در بر می‌گیرد.

این پارامتر در نسخه 3.9 و بالاتر Postfix در دسترس است. در نسخه‌های پیشین، مقدار پیش‌فرض توسط پیاده‌سازی MySQL انتخاب می‌شد (?Butf8mb4?R در MySQL 8.0 به بعد، و از نظر تاریخی ?Blatin1?R).

?Bidle_interval (پیش‌فرض: 60)?R
تعداد ثانیه‌هایی که پس از آن یک اتصال پایگاه داده بیکار بسته خواهد شد.

این قابلیت در نسخه 3.9 و بالاتر Postfix در دسترس است.

?Bretry_interval (پیش‌فرض: 60)?R
تعداد ثانیه‌هایی که یک اتصال پایگاه داده پس از بروز خطا نادیده گرفته می‌شود.

نکته: اگر ?Bhosts?R تنها یک سرور را مشخص کند، این کارخواه فرض می‌کند که مقصد یک متعادل‌کننده بار است و بلافاصله پس از یک شکست مجدداً متصل می‌شود. در نسخه‌های 3.9 و پیشین همان سرور را دو بار مشخص کنید.

این قابلیت در نسخه 3.9 و بالاتر Postfix در دسترس است.

?Bquery?R
الگوی پرس‌وجوی SQL مورد استفاده برای جستجو در پایگاه داده، که در آن ?B%s?R جایگزینی برای نشانی‌ای است که Postfix در تلاش برای تحلیل آن است، به عنوان نمونه:
query = SELECT replacement FROM aliases WHERE mailbox = '%s'

به طور پیش‌فرض، هر پرس‌وجو باید یک مجموعه نتیجه بازگرداند (به جای ذخیره نتایج در جدول)؛ با «?Brequire_result_set = no?R» (در Postfix 3.2 و بالاتر)، نبود مجموعه نتیجه به عنوان «یافت نشد» تلقی می‌شود.

این پارامتر از بسط‌های '%' زیر پشتیبانی می‌کند:

?B%%?R
با نویسه نویسه‌به‌نویسه '%' جایگزین می‌شود.
?B%s?R
با کلید ورودی جایگزین می‌شود. نقل‌قول‌گذاری SQL برای اطمینان از اینکه کلید ورودی نویسه‌های متا غیرمنتظره‌ای اضافه نمی‌کند اعمال می‌شود.
?B%u?R
هنگامی که کلید ورودی یک نشانی به فرم user@domain باشد، ?B%u?R با بخش محلی نشانی (نقل‌قول‌شده در SQL) جایگزین می‌شود. در غیر این صورت با کل رشته جستجو جایگزین می‌شود. اگر بخش محلی خالی باشد، پرس‌وجو متوقف شده و هیچ نتیجه‌ای برنمی‌گرداند.
?B%d?R
هنگامی که کلید ورودی یک نشانی به فرم user@domain باشد، ?B%d?R با بخش دامنه نشانی (نقل‌قول‌شده در SQL) جایگزین می‌شود. در غیر این صورت پرس‌وجو متوقف می‌شود.
?B%[SUD]?R
معادل‌های حروف بزرگ بسط‌های بالا در پارامتر ?Bquery?R عملکردی کاملاً مشابه همتاهای حروف کوچک خود دارند. با پارامتر ?Bresult_format?R (در ادامه ببینید)، آن‌ها کلید ورودی را به جای مقدار نتیجه بسط می‌دهند.
?B%[1-9]?R
الگوهای %1، %2، ... %9 با مهم‌ترین جزء متناظر دامنه کلید ورودی جایگزین می‌شوند. اگر کلید ورودی ?Iuser@mail.example.com?R باشد، %1 برابر با ?Bcom?R، %2 برابر با ?Bexample?R و %3 برابر با ?Bmail?R خواهد بود. اگر کلید ورودی بدون صلاحیت باشد یا اجزای دامنه کافی برای برآورده کردن تمام الگوها نداشته باشد، پرس‌وجو متوقف می‌شود.
پارامتر ?Bdomain?R که در ادامه شرح داده شده است، کلیدهای ورودی را به نشانی‌های موجود در دامنه‌های منطبق محدود می‌کند. هنگامی که پارامتر ?Bdomain?R غیرخالی باشد، پرس‌وجوهای SQL برای نشانی‌های نامعتبر یا نشانی‌های موجود در دامنه‌های غیرمنطبق متوقف می‌شوند و نتیجه‌ای برنمی‌گردانند.

این پارامتر در نسخه 2.2 Postfix موجود است. در نسخه‌های قبلی پرس‌وجوی SQL از پارامترهای جداگانه ساخته می‌شد: ?Bselect_field?R، ?Btable?R، ?Bwhere_field?R و ?Badditional_conditions?R. نگاشت از پارامترهای قدیمی به پرس‌وجوی معادل چنین است:

SELECT [?Bselect_field?R]
FROM [?Btable?R]
WHERE [?Bwhere_field?R] = '%s'
      [?Badditional_conditions?R]

مقدار '%s' در بند ?BWHERE?R به رشته جستجوی اسکیپ‌شده بسط می‌یابد. در نسخه 2.2 پست‌فیکس اگر پارامتر ?Bquery?R مشخص نشده باشد از این پارامترهای موروثی استفاده می‌شود.

نکته: اطراف پارامتر query نقل‌قول قرار ندهید.

?Bresult_format (پیش‌فرض: ?B%s?R)?R
الگوی قالب اعمال‌شده بر ویژگی‌های نتیجه. معمولاً برای افزودن متن به انتها (یا ابتدا) نتیجه استفاده می‌شود. این پارامتر از بسط‌های '%' زیر پشتیبانی می‌کند:
?B%%?R
با نویسه واقعی '%' جایگزین می‌شود.
?B%s?R
با مقدار ویژگی نتیجه جایگزین می‌شود. وقتی نتیجه خالی باشد نادیده گرفته می‌شود.
?B%u?R
وقتی مقدار ویژگی نتیجه نشانی‌ای به فرم user@domain باشد، ?B%u?R با بخش محلی نشانی جایگزین می‌شود. در صورت خالی بودن بخش محلی نادیده گرفته می‌شود.
?B%d?R
وقتی مقدار ویژگی نتیجه نشانی‌ای به فرم user@domain باشد، ?B%d?R با بخش دامنه مقدار ویژگی جایگزین می‌شود. هنگامی که نتیجه بدون دامنه باشد نادیده گرفته می‌شود.
?B%[SUD1-9]?R
بسط‌های حروف بزرگ و ارقام ده‌دهی به جای نتیجه، بخش‌هایی از کلید ورودی را جای‌گذاری می‌کنند. رفتار آن‌ها مشابه موارد شرح داده شده در ?Bquery?R است.
برای نمونه، استفاده از "result_format = smtp:[%s]" اجازه می‌دهد تا از یک ویژگی mailHost به عنوان پایه یک جدول transport(5) استفاده شود. پس از اعمال قالب نتیجه، مقادیر چندگانه به عنوان رشته‌های جدا شده با کاما به هم متصل می‌شوند. پارامتر expansion_limit که در ادامه توضیح داده شده اجازه می‌دهد تعداد مقادیر نتیجه را محدود کنید.

مقدار پیش‌فرض ?B%s?R مشخص می‌کند که هر مقدار نتیجه همان‌طور که هست استفاده شود.

این پارامتر در نسخه 2.2 و بالاتر Postfix در دسترس است.

نکته: اطراف قالب نتیجه (result_format) نقل‌قول قرار ندهید!

?Bdomain (پیش‌فرض: بدون فهرست دامنه)?R
این یک فهرست از نام‌های دامنه، مسیر فایل‌ها یا پایگاه‌های داده "type:table" است. در صورت مشخص شدن، تنها کلیدهای جستجوی کامل با یک بخش محلی *غیرخالی* و یک دامنه منطبق واجد شرایط جستجو هستند: جستجوهای 'user'، جستجوهای دامنه تنها و جستجوهای "domain@" انجام نمی‌شوند. این امر می‌تواند بار پرس‌وجو روی سرور MySQL را به طور چشمگیری کاهش دهد.
domain = postfix.org, hash:/etc/postfix/searchdomains

بهتر است از SQL برای ذخیره دامنه‌های واجد شرایط جستجوهای SQL استفاده نکنید.

این پارامتر در نسخه 2.2 و بالاتر Postfix در دسترس است.

نکته: این پارامتر را برای نام‌های مستعار local(8) تعریف نکنید، زیرا کلیدهای ورودی همیشه بدون دامنه هستند.

?Bexpansion_limit (پیش‌فرض: 0)?R
محدودیت روی تعداد کل عناصر نتیجه بازگردانده شده (به صورت فهرست جدا شده با کاما). مقدار صفر این محدودیت را غیرفعال می‌کند. در صورت فراتر رفتن از حد مجاز، جستجوها با یک خطای موقت شکست می‌خورند. تنظیم حد روی 1 تضمین می‌کند که جستجوها مقادیر چندگانه برنمی‌گردانند.
?Boption_file?R
خواندن گزینه‌ها از فایل مشخص‌شده به جای مکان پیش‌فرض my.cnf. این گزینه گزینه‌ها را از گروه گزینه ?B[client]?R می‌خواند، که به صورت اختیاری گزینه‌های گروه مشخص‌شده با ?Boption_group?R به دنبال آن می‌آیند.

این پارامتر در نسخه 2.11 و بالاتر Postfix در دسترس است.

?Boption_group (پیش‌فرض: در Postfix >=3.2 برابر client، در <= 3.1 خالی)?R
خواندن گزینه‌ها از گروه مشخص‌شده در فایل گزینه‌های mysql، پس از خواندن گزینه‌ها از گروه ?B[client]?R.

پست‌فیکس 3.2 و بالاتر تنظیمات گروه ?B[client]?R را به صورت پیش‌فرض می‌خوانند. برای غیرفعال کردن این مورد هیچ ?Boption_file?R را مشخص نکنید و مقدار "?Boption_group =?R" (مقدار خالی) را تعیین کنید.

این پارامتر در نسخه 2.11 و بالاتر Postfix در دسترس است.

?Brequire_result_set (پیش‌فرض: yes)?R
در صورت تنظیم روی "?Byes?R"، الزام به اینکه هر پرس‌وجو یک مجموعه نتیجه بازگرداند. اگر "?Bno?R" باشد، نبود مجموعه نتیجه به عنوان «یافت نشد» تلقی می‌شود.

این پارامتر در نسخه 3.2 و بالاتر Postfix در دسترس است.

برای جزئیات قابلیت‌های زمینه‌ای MYSQL_OPT_SSL_* به نشانی‌های https://dev.mysql.com/doc/c-api/en/mysql-options.html یا https://mariadb.com/kb/en/mysql_optionsv مراجعه فرمایید.

?Btls_cert_file?R
فایل حاوی گواهی X509 کارخواه.

این پارامتر در نسخه 2.11 و بالاتر Postfix در دسترس است.

?Btls_key_file?R
فایل حاوی کلید خصوصی متناظر با ?Btls_cert_file?R.

این پارامتر در نسخه 2.11 و بالاتر Postfix در دسترس است.

?Btls_CAfile?R
فایل حاوی گواهی‌های X509 برای تمامی مراجع صدور گواهی که کارخواه شناسایی می‌کند. بر ?Btls_CApath?R تقدم دارد.

این پارامتر در نسخه 2.11 و بالاتر Postfix در دسترس است.

?Btls_CApath?R
دایرکتوری حاوی گواهی‌های مرجع صدور گواهی X509 در فایل‌های مجزای جداگانه.

این پارامتر در نسخه 2.11 و بالاتر Postfix در دسترس است.

?Btls_ciphers?R
فهرست رمزهای مجاز برای رمزنگاری SSL.

این پارامتر در نسخه 2.11 و بالاتر Postfix در دسترس است.

?Btls_verify_cert (پیش‌فرض: no)?R
اعتبارسنجی اینکه نام سرور با نام مشترک (CN) در گواهی مطابقت دارد یا خیر.

این پارامتر در نسخه 2.11 و بالاتر Postfix در دسترس است.

پست‌فیکس 3.2 و بالاتر از فراخوانی یک روال ذخیره‌شده (stored procedure) به جای استفاده از دستور SELECT در query پشتیبانی می‌کنند؛ برای نمونه:

?Bquery?R = CALL lookup('%s')

بسط‌های '%' که پیش‌تر شرح داده شدند می‌توانند در پارامترهای ارسالی به روال ذخیره‌شده استفاده شوند.

به طور پیش‌فرض، هر فراخوانی روال ذخیره‌شده باید یک مجموعه نتیجه بازگرداند، یعنی هر مسیر کد باید یک دستور SELECT را اجرا کند که مجموعه نتیجه بازمی‌گرداند. با «?Brequire_result_set = no?R»، نبود مجموعه نتیجه به عنوان «یافت نشد» تلقی می‌شود.

یک روال ذخیره‌شده نباید چندین مجموعه نتیجه بازگرداند.

نمونه زیر یک روال ذخیره‌شده را نشان می‌دهد که یک مجموعه نتیجه منفرد بازمی‌گرداند:

CREATE [DEFINER=`user`@`host`] PROCEDURE
`lookup`(IN `param` VARCHAR(255))
    READS SQL DATA
    SQL SECURITY INVOKER
    BEGIN
        select goto from alias where address=param;
    END

برای سازگاری با سایر جدول‌های جستجوی Postfix، پارامترهای MySQL می‌توانند در main.cf نیز تعریف شوند. برای انجام این کار، به عنوان منبع MySQL نامی را مشخص کنید که با اسلش یا نقطه آغاز نمی‌شود. پارامترهای MySQL به عنوان نامی که در تعریف به منبع داده‌اید، یک خط زیرین (_) و نام پارامتر در دسترس خواهند بود. برای نمونه، اگر جدول به صورت "mysql:?Imysqlname?R" مشخص شود، پارامتر "hosts" در main.cf به صورت "?Imysqlname?R_hosts" تعریف می‌شود.

نکته: در این روش، گذرواژه‌ها برای منابع MySQL در main.cf نوشته می‌شوند که معمولاً برای همه کاربران قابل خواندن است. پشتیبانی از این فرم در نسخه‌های آینده حذف خواهد شد.

این بخش رابطی را توصیف می‌کند که از نسخه 2.2 Postfix منسوخ شده است. این رابط با رابط عمومی‌تر ?Bquery?R که در بالا شرح داده شد جایگزین گردیده است. اگر پارامتر ?Bquery?R تعریف شده باشد، پارامترهای موروثی شرح‌داده‌شده در اینجا نادیده گرفته می‌شوند. لطفاً به رابط جدید مهاجرت فرمایید زیرا رابط قدیمی در نسخه‌های آینده حذف خواهد شد.

پارامترهای زیر می‌توانند برای پر کردن یک الگوی دستور SELECT استفاده شوند:

SELECT [?Bselect_field?R]
FROM [?Btable?R]
WHERE [?Bwhere_field?R] = '%s'
      [?Badditional_conditions?R]

مشخص‌کننده s% با رشته جستجو جایگزین شده و اسکیپ می‌شود تا در صورتی که حاوی نقل‌قول تکی یا سایر نویسه‌های خاص باشد، خطای تجزیه یا مشکل امنیتی ایجاد نکند.

?Bselect_field?R
پارامتر "select" در SQL. مثال:
?Bselect_field?R = forw_addr
?Btable?R
نام جدول "select .. from" در SQL. مثال:
?Btable?R = mxaliases
?Bwhere_field?R
پارامتر "select .. where" در SQL. مثال:
?Bwhere_field?R = alias
?Badditional_conditions?R
شرایط اضافی برای پرس‌وجوی SQL. مثال:
?Badditional_conditions?R = AND status = 'paid'

postmap(1), نگهداری جدول جستجوی Postfix
postconf(5), پارامترهای پیکربندی
ldap_table(5), جدول‌های جستجوی LDAP
pgsql_table(5), جدول‌های جستجوی PostgreSQL
sqlite_table(5), جدول‌های جستجوی SQLite

از دستور «?Bpostconf readme_directory?R» یا «?Bpostconf html_directory?R» برای مکان‌یابی این اطلاعات استفاده کنید.

DATABASE_README, بررسی اجمالی جدول جستجوی Postfix
MYSQL_README, راهنمای کارخواه MYSQL در Postfix

مجوز Secure Mailer باید همراه با این نرم‌افزار توزیع شود.


پشتیبانی از MySQL با نسخه 1.0 پست‌فیکس معرفی شد.

پیاده‌سازی اولیه توسط:
Scott Cotton, Joshua Marcus
IC Group, Inc.
بهبودهای بیشتر توسط:
Liviu Daia
Institute of Mathematics of the Romanian Academy
P.O. BOX 1-764
RO-014700 Bucharest, ROMANIA
پشتیبانی از روال ذخیره‌شده توسط John Fawcett.
Wietse Venema
Google, Inc.
111 8th Avenue
New York, NY 10011, USA