نمای کلی اجرایی و اهمیت معماری
انتشار نسخه ۱.۷.۲ از pg_vault_tde نقطه عطفی حیاتی در بلوغ ابزارهای رمزنگاری شفاف داده (TDE) در اکوسیستم PostgreSQL محسوب میشود. از آنجا که سازمانها به طور فزایندهای در حال مهاجرت بارهای کاری حساس خود به PostgreSQL هستند، جداسازی رمزنگاریشده و مقاوم در لایه ذخیرهسازی امری غیرقابل مذاکره است. نسخه ۱.۷.۲ به عنوان یک نسخه اصلاحیه باینری متمرکز عرضه شده است که برای رفع خطاهای جدی ناپایداری، انحراف در حسابداری حافظه، و موارد خاص رمزنگاری که میتوانند استقرار در سطح سازمانی را به خطر بیندازند، طراحی شده است. در حالی که نسخه اصلی افزونه روی ۱.۷ باقی مانده است، ادغام ابزار بازرسی زمان اجرای pg_vault_tde_build_version() تضمین میکند که مدیران پایگاه داده میتوانند باینریهای مستقر شده در محیطهای پروداکشن را به طور کاملاً واضح تأیید کنند.
از نظر معماری، این نسخه به آسیبپذیریهای اساسی در چیدمان دادهها و ایندکسگذاری میپردازد که در شرایط همزمانی بالای نوشتن و برنامهریزی پیچیده پرسوجو ظاهر شده بودند. تیم مهندسی با رویارویی مستقیم با موارد خاص در مدیریت منابع ثبت وقایع پیش از نوشتن (WAL)، مدیریت TOAST (فنون ذخیرهسازی صفات بیش از حد بزرگ) و چرخههای حیات چرخش کلید، تضمینهای دوام پایهای PostgreSQL را تقویت کرده است. سازمانهایی که بارهای کاری رمزنگاریشده را اجرا میکنند دیگر نمیتوانند TDE را به عنوان یک لایه منفعل در نظر بگیرند؛ نسخه ۱.۷.۲ نیازمند همسویی دقیق معماری است، بهویژه در رابطه با اینکه چگونه دادههای با طول متغیر و چرخشهای آنلاین و همزمان کلید با استخر بافر زیرساختی PostgreSQL و مکانیسمهای بازیابی تعامل دارند.
بهبودهای هسته و ارگونومی توسعهدهنده
مهمترین تغییر معماری در نسخه ۱.۷.۲، معرفی چیدمان جدید تاپل روی دیسک (v5) است. پیش از این، جدولهای حاوی ستونهای ایندکسشده با طول متغیر به دلیل ابهام در ناوبری تاپل، مستعد خطاهای جدی segmentation fault در طول عملیاتهای UPDATE بودند. چیدمان v5 یک پارادایم ساختاری کاملاً قابل پیمایش را معرفی میکند که عبور ایمن از صفات با طول متغیر را تضمین کرده و مشکل PSQLE-165 را به طور کامل خنثی میسازد. در تکمیل این مورد، خرابیهای مربوط به TOAST به طور جامع حل شدهاند. سیستمها به کرات با خطاهای segmentation fault مواجه میشدند زمانی که مقادیر ستون دقیقاً پس از تبدیل رمزنگاری از آستانه TOAST_TUPLE_THRESHOLD عبور میکردند. علاوه بر این، یک باگ دسترسی شدید که در آن یک سطر با مقادیر کاملاً NULL باعث میشد جدول والد به طور کامل غیرقابل خواندن شود، خنثی شده است.
از منظر ایندکسگذاری و اجرای پرسوجو، tde_btree تحت سختسازی شدیدی قرار گرفته است. پیادهسازی ایندکس اکنون سیاست صفر تساهل را در قبال عملگرهای پشتیبانینشده اعمال میکند و صرفاً به پرسوجوهای برابری پاسخ میدهد. این امر مانع از خرابی خاموش دادهها و بازگشت نادرست سطرها زمانی که برنامهریزهای پرسوجو تلاش میکنند عملگرهای بازه، بندهای ORDER BY، یا پیوندهای ادغامی را روی ایندکسهای b-tree رمزنگاریشده بهینهسازی کنند، میشود (PSQLE-173). به موازات آن، مدیریت کلید و قابلیت اطمینان به طور قابل توجهی ارتقا یافتهاند. آسیبپذیریهای مرتبط با از دست رفتن دادهها و شرایط مسابقه (race conditions) در طول دسترسی همزمان rotate_online() (PSQLE-184)، چرخشهای کلید رمزنگاری کلید (KEK) کیف پول محلی (PSQLE-185)، و مهاجرتهای vault به کیف پول (PSQLE-188) به طور سیستماتیک حذف شدهاند. در نهایت، انحراف حسابداری حافظه رمزگشایی منطقی پایدار شده و شناسه مدیر منابع WAL سفارشی از یک فضای اختصاصنیافته به شناسه ثبتشده رسمی ۱۶۱ منتقل شده است (PSQLE-172).
ماتریس مقایسه معماری
| بردار معماری | مبنای قبلی (نسخه ۱.۷.۱ و پیش از آن) | اخبار PostgreSQL نسخه ۱.۷.۲ | تأثیر بر عملیات پروداکشن |
|---|---|---|---|
| چیدمان تاپل | نسخه ۴ (آسیبپذیر در برابر خطاهای segfault در UPDATE روی ستونهای ایندکسشده با طول متغیر) |
نسخه ۵ (ساختار قابل پیمایش که عبور ایمن و پایداری را تضمین میکند) | خطاهای segmentation fault را حذف میکند؛ نیازمند یک VACUUM FULL اجباری پس از ارتقا است. |
| شناسه مدیر منابع WAL | شناسه ثبتنشده ۱۲۸ (خطر تداخل شناسه با سایر افزونهها) | شناسه ثبتشده رسمی ۱۶۱ | نیازمند خاموشی تمیز و ارتقاهای همزمان نمونههای اصلی/آماده به کار (primary/standby) است. |
معناشناسی ایندکس (tde_btree) |
مدیریت مجاز عملگرهای بازه و بندهای مرتبسازی | اعمال سختگیرانه فقط پرسوجوهای برابری | مانع از خرابی خاموش دادهها در طول اسکنهای بازه و پیوندهای ادغامی میشود. |
| همزمانی مدیریت کلید | شرایط مسابقه در طول rotate_online() و مهاجرتهای کیف پول |
قفلگذاری سختشده و انتقالهای حالت اتمی | بردارهای از دست رفتن داده را در طول عملیاتهای چرخه حیات کلید با همزمانی بالا حذف میکند. |
تغییرات ساختارشکن و نکات مهم مهاجرت
نسخه ۱.۷.۲ تغییرات ساختارشکنی را معرفی میکند که مانع از ارتقاهای چرخشی (rolling upgrades) استاندارد میشوند. به دلیل انتقال شناسه مدیر منابع WAL سفارشی از ۱۲۸ به ۱۶۱، خاموش کردن تمیز پایگاه داده الزامی است. اگر ویژگی toast_custom_rmgr فعال باشد، نمونههای اصلی و آماده به کار باید به صورت همزمان ارتقا یابند؛ ارتقاهای چرخشی در سراسر مرزهای replication به دلیل ناسازگاری جریان WAL از نظر ساختاری غیرممکن هستند.
علاوه بر این، انتقال به چیدمان تاپل روی دیسک نسخه ۵ مستلزم مداخله صریح مدیریت پایگاه داده است. در حالی که سطرهای قدیمی ذخیرهسازی شده در قالب نسخه ۴ پس از ارتقا قابل خواندن باقی میمانند، هرگونه عملیات UPDATE بعدی که این سطرها را هدف قرار دهد، تا زمانی که چیدمان جدول بهروزرسانی نشود، باعث ایجاد خطای segmentation fault خواهد شد. مدیران اکیداً موظفند دستور VACUUM FULL را روی هر جدول رمزنگاریشده اجرا کنند تا تاپلهای قدیمی را به قالب قابل پیمایش نسخه ۵ بازنویسی کنند.
راهنمای گام به گام ارتقا
برای ارتقای امن به نسخه ۱.۷.۲ افزونه pg_vault_tde بدون ریسک خرابی داده یا واگرایی نسخه پشتیبان (replica)، مدیران باید پروتکل زیر را اجرا کنند:
- انجام خاموشی تمیز و بهروزرسانی باینری:
سرویس PostgreSQL را به طور تمیز متوقف کنید تا تمام بافرهای کثیف پاکسازی شوند، باینریهای افزونه در گرههای اصلی و آماده به کار به صورت همزمان بهروزرسانی شوند، و نمونهها مجدداً راهاندازی گردند.
# متوقف کردن تمیز گرههای اصلی و آماده به کار pg_ctl -D /var/lib/postgresql/data stop -m smart #
