پست

بازنشانی رمز عبور دیتابیس Postgres

بازنشانی رمز عبور دیتابیس Postgres

فراموشی رمز عبور کاربر postgres یکی از رایج‌ترین چالش‌هایی است که در محیط توسعه با آن مواجه می‌شوید. خبر خوب این است که PostgreSQL برای چنین شرایطی یک مکانیزم رسمی و مستند طراحی کرده است که نیازی به نصب مجدد یا حذف داده‌ها ندارد. در این مطلب، فرآیند کامل بازنشانی رمز عبور در PostgreSQL نسخه ۱۸ روی ویندوز بررسی می‌شود.

فایل pg_hba.conf چه نقشی دارد؟

فایل pg_hba.conf (مخفف Host-Based Authentication) قلب سیستم احراز هویت PostgreSQL محسوب می‌شود. این فایل تعیین می‌کند که هر اتصال، بر اساس چه روشی احراز هویت شود. در نصب پیش‌فرض PostgreSQL 18 روی ویندوز، این فایل در مسیر زیر قرار دارد:

1
C:\Program Files\PostgreSQL\18\data\pg_hba.conf

مقدار پیش‌فرض روش احراز هویت در این نسخه، scram-sha-256 است که یک الگوریتم امن و توصیه‌شده برای احراز هویت مبتنی بر رمز عبور به شمار می‌رود:

1
2
3
local   all             all                                     scram-sha-256
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             ::1/128                 scram-sha-256

مرحله اول: تغییر موقت روش احراز هویت به trust

برای بازنشانی رمز عبور بدون دانستن رمز فعلی، لازم است موقتاً روش احراز هویت به trust تغییر یابد. این روش به هر کاربری اجازه می‌دهد بدون ارائه رمز عبور، به دیتابیس متصل شود. توجه داشته باشید که این تغییر تنها باید به‌صورت موقت و در محیطی امن (سیستم شخصی، بدون دسترسی شبکه خارجی) اعمال شود:

1
2
3
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust

توصیه می‌شود پیش از این تغییر، نسخه پشتیبان از فایل اصلی تهیه شود تا بازگرداندن تنظیمات در انتهای فرآیند با اطمینان بیشتری انجام گیرد.

مرحله دوم: اعمال تغییرات

پس از ویرایش فایل، سرویس PostgreSQL باید تغییرات را بارگذاری کند. راه‌اندازی مجدد کامل سرویس یکی از روش‌های معتبر برای این کار است:

1
Restart-Service postgresql*

نکته فنی قابل‌توجه این است که مطابق مستندات، برای اعمال تغییرات pg_hba.conf نیازی به راه‌اندازی مجدد کامل سرویس نیست؛ فراخوانی reload کفایت می‌کند و اتصالات فعال را قطع نمی‌کند. در ویندوز این کار از طریق دستور زیر در psql نیز قابل انجام است:

1
SELECT pg_reload_conf();

با این حال، در سناریوی بازنشانی رمز که کاربر اصلاً نمی‌تواند وارد psql شود، راه‌اندازی مجدد سرویس از طریق Services یا PowerShell ساده‌ترین گزینه است.

مرحله سوم: اتصال بدون رمز عبور و تغییر رمز

پس از فعال شدن روش trust، اتصال به دیتابیس بدون نیاز به رمز عبور امکان‌پذیر می‌شود:

1
psql -U postgres

در ادامه، دستور SQL زیر برای تنظیم رمز عبور جدید اجرا می‌شود:

1
ALTER USER postgres WITH PASSWORD 'postgres';

این دستور بخشی از دستورات استاندارد مدیریت نقش‌ها در PostgreSQL است و رمز عبور را به‌صورت رمزنگاری‌شده (بر اساس تنظیم password_encryption، که در نسخه‌های جدید معمولاً scram-sha-256 است) ذخیره می‌کند.

مرحله چهارم: بازگرداندن سطح امنیتی اولیه

این مرحله اغلب نادیده گرفته می‌شود، اما از نظر امنیتی حیاتی است. پس از تنظیم رمز جدید، فایل pg_hba.conf باید به حالت اولیه بازگردانده شود:

1
2
3
local   all             all                                     scram-sha-256
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             ::1/128                 scram-sha-256

سپس سرویس مجدداً راه‌اندازی یا reload شود. باقی ماندن روش trust به معنای این است که هر فرآیند یا کاربر روی سیستم می‌تواند بدون هیچ اعتبارسنجی به تمام دیتابیس‌ها دسترسی داشته باشد؛ این وضعیت در هر محیطی به‌جز یک ماشین کاملاً ایزوله، ریسک امنیتی جدی محسوب می‌شود.