Brume 2.1؛ ساخت کپی‌های PostgreSQL با pseudonymization و حفظ foreign key

چرا مهم است

اگر برای بازتولید bug به داده‌های production نیاز داری، کپی مستقیم اطلاعات شخصی را هم منتقل می‌کند. Brume این داده‌ها را پیش از نوشتن تغییر می‌دهد و هم‌زمان اعتبار foreign key‌ها را حفظ می‌کند.

قبل از خواندن، این‌ها را بدان۶ مفهوم
pseudonymization

جایگزین‌کردن اطلاعات شناسایی‌کننده با مقدارهای جایگزین، به‌جای استفاده مستقیم از اطلاعات شخصی.

در حال نگارش

foreign key

ستون یا مجموعه‌ستون‌هایی که به کلیدی در جدول دیگر اشاره می‌کنند و معتبرماندن ارتباط میان ردیف‌ها را محدود می‌کنند.

در حال نگارش

referential integrity

وضعیتی که در آن ارجاع‌های میان جدول‌ها معتبرند؛ برای مثال، مقدار foreign key به ردیفی موجود اشاره می‌کند.

در حال نگارش

deterministic

ویژگی عملیاتی که با ورودی و شرایط یکسان، همیشه خروجی یکسان تولید می‌کند.

در حال نگارش

format-preserving encryption

روشی از encryption که قالب مقدار اولیه را در خروجی حفظ می‌کند.

در حال نگارش

declarative

شیوه‌ای برای توصیف نتیجه یا تنظیمات مطلوب، به‌جای تعیین گام‌به‌گام نحوه اجرای عملیات.

در حال نگارش

Brume 2.1 منتشر شد؛ ابزاری open source با مجوز Apache 2.0 که از database‌های PostgreSQL کپی‌هایی با pseudonymization برای تست، debug و دمو می‌سازد. مسئله‌ای که این ابزار هدف گرفته، نیاز به داده‌های واقع‌گرایانه برای بازتولید bug‌ها، بدون انتقال مستقیم اطلاعات شخصی production است. طبق معرفی ابزار، روش‌های معمول masking ممکن است referential integrity را بشکنند و تیم را به غیرفعال‌کردن trigger‌ها، تعلیق constraint‌ها یا ترمیم دستی join‌ها وادار کنند.

Brume زیرمجموعه‌ای مشخص از database مبدأ را به database مقصد یا فایل .sql منتقل می‌کند. تغییر اطلاعات شخصی هنگام انتقال و پیش از هرگونه نوشتن انجام می‌شود؛ ابزار در مبدأ فقط عملیات خواندن دارد و foreign key‌ها در مقصد معتبر می‌مانند.

برای هر ستون می‌توان راهبرد جداگانه‌ای تعیین کرد: FAKE برای تولید مقادیر مصنوعی واقع‌گرایانه، MASK برای نمایش بخشی از مقدار، HASH برای hashing یک‌طرفه و NULLIFY برای حذف داده حساس. گزینه‌های FPE_ID و FPE_UUID از format-preserving encryption برای شناسه‌ها استفاده می‌کنند و DATE_SHIFT تاریخ‌ها را با حفظ توزیعشان جابه‌جا می‌کند.

خروجی deterministic است: ورودی یکسان با secret یکسان، در تمام انتشارهای یک نسخه اصلی، خروجی یکسان می‌دهد. این رفتار، داده‌های تست و جلسه‌های debug را بین اجراها ثابت نگه می‌دارد. همچنین primary key و foreign key‌های اشاره‌کننده به آن به‌شکل هماهنگ بازنویسی می‌شوند. با linked_columns،؜ مقدار مشترک میان جدول‌هایی که foreign key رسمی ندارند، مانند ایمیل در users و audit_logs،؜ همه‌جا جایگزین یکسانی می‌گیرد.

برای محدودکردن داده‌ها می‌توان روی هر جدول شرط سطح ردیف گذاشت؛ مثلاً بر اساس تاریخ یا tenant_id. Brume سپس ارتباط‌های foreign key را در جهت والد و فرزند تا عمق قابل‌تنظیم دنبال می‌کند تا زیرمجموعه‌ای کوچک، مستقل و منسجم بسازد.

تنظیمات declarative در فایل brume.yml قرار می‌گیرند: راهبرد هر جدول و ستون، نوع‌های معنایی مانند EMAIL و PHONE و مسیرهای JSONB برای فیلدهای تودرتو. این فایل پیش از اجرا قابل نگهداری در version control و بازبینی است. معرفی Brume به pseudonymization به‌عنوان یکی از اقدام‌های ذکرشده در مواد ۲۵ و ۳۲ GDPR اشاره می‌کند و تنظیمات را توصیفی قابل‌ممیزی برای تیم‌های امنیت می‌داند. ابزار از PostgreSQL 12 تا 18 پشتیبانی می‌کند و برای Debian/Ubuntu،؜ RHEL/Fedora و macOS بسته نصب دارد.

نکته کلیدی

برای تهیه کپی تست، فقط راهبرد تغییر هر ستون را مشخص نکن؛ ارتباط مقدارها میان جدول‌ها را هم در نظر بگیر. در Brume می‌توانی برای مقدارهای مشترک بدون foreign key رسمی از linked_columns استفاده کنی.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۳)