آموزش اتصال ریموت به پایگاه داده PostgreSQL

آموزش اتصال ریموت به پایگاه داده PostgreSQL

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

پیش‌نیازها برای اتصال به پایگاه داده PostgreSQL از راه دور

پیش از تلاش برای دسترسی به یک پایگاه داده PostgreSQL از راه دور، مطمئن شوید که:

  • PostgreSQL را روی رایانه خود نصب کرده‌اید و به درستی در حال اجراست (مانند سرور).
  • pgAdmin، psql یا هر ابزار شخص ثالثی که از اتصال پشتیبانی می‌کند را نصب کرده‌اید. اگر نصب نکرده‌اید، می‌توانید دستورالعمل‌های موجود در این راهنما را دنبال کنید.
  • تمامی مدارک دسترسی مورد نیاز مانند نام پایگاه داده، نام میزبان، پورت، نام کاربری و رمز عبور را در اختیار دارید.

پیکربندی PostgreSQL برای اتصالات از راه دور

تنظیم پیش‌فرض PostgreSQL اجازه اتصال تنها از localhost را می‌دهد. با این حال، می‌توانید چند فایل پیکربندی را ویرایش کنید تا اتصالات خارجی یا از راه دور فعال شوند.

ویرایش «postgresql.conf»

این تغییر به شما امکان می‌دهد که اتصالات فراتر از ماشین محلی را فعال کنید:

  • فایل «postgresql.conf» را از دایرکتوری «/etc/postgresql/<version>/main/» یا «/var/lib/pgsql/data/» بیابید و با یک ویرایشگر متن آن را باز کنید.
  • با به‌روزرسانی تنظیم “listen_addresses” به شکل «listen_addresses = ' (به جای "" می‌توانید تنها آدرس‌های IP مجاز برای اتصال به سرور را مشخص کنید) اجازه اتصال از راه دور داده شود.
  • تغییرات را ذخیره کرده و ویرایشگر را ببندید.
  • دستور روبرو را برای راه‌اندازی مجدد PostgreSQL اجرا کنید: sudo systemctl restart postgresql

اصلاح «pg_hba.conf»

این تغییر مشخص می‌کند که چه کسی (کاربران، آدرس‌های IP) می‌تواند به پایگاه داده دسترسی پیدا کند، به طوری که احراز هویت با رمز عبور (md5) الزامی است:

  • فایل «pg_hba.conf» را از دایرکتوری «/etc/postgresql/12/main/» باز کنید.
  • یک ورودی برای دسترسی از راه دور اضافه کنید به این صورت:
    • برای آدرس‌های IPV4: host all all 0.0.0.0/0 md5
    • برای آدرس‌های IPV6: host all all ::0/0 md5

تأمین امنیت در سطح شبکه

اجازه دادن به اتصالات از راه دور برای دسترسی به سرور PostgreSQL می‌تواند آن را در معرض تهدیدات و دیگر خطرات امنیتی قرار دهد. بنابراین، باید اقدامات پیشگیرانه‌ای برای محافظت از شبکه و پایگاه داده انجام دهید.

پیکربندی قوانین فایروال

فایروال‌ها به عنوان سدهایی عمل می‌کنند که دسترسی خارجی را محدود می‌کنند. بنابراین، لازم است فایروال سرور خود را طوری پیکربندی کنید که ترافیک در پورت پیش‌فرض، که معمولاً پورت 5432 است، مجاز شود. برای توضیح بهتر، فرض کنید PostgreSQL را روی یک سرور لینوکسی اجرا می‌کنید. برای پیکربندی فایروال و مجاز کردن ترافیک در پورت 5432، می‌توانید از ufw استفاده کنید و دستور زیر را اجرا کنید:

sudo ufw allow 5432/tcp

همچنین می‌توانید از ابزاری مانند iptables استفاده کنید و دستور زیر را اجرا کنید:

iptables -A INPUT -p tcp -m state --state NEW --dport 5432 -j ACCEPT

در محیط‌های ابری، می‌توانید تنظیمات security group یا قوانین فایروال را در کنسول مدیریتی پلتفرم ابری تنظیم کنید.

استفاده از VPN یا تونل SSH

  • با استفاده از یک VPN، می‌توانید تنظیمات پیش‌فرض فایروال PostgreSQL را حفظ کنید و حتی “listen_addresses” را به localhost محدود کنید. در نتیجه، پایگاه داده به صورت مستقیم در معرض اینترنت عمومی قرار نمی‌گیرد.
  • از سوی دیگر، تونل‌های SSH ترافیک را از یک پورت محلی در رایانه شما به سرور PostgreSQL از طریق یک اتصال رمزگذاری شده هدایت می‌کنند. این امر به حفاظت از داده‌ها در حین انتقال کمک می‌کند. برای ایجاد تونل SSH، از دستور زیر استفاده کنید:
ssh -L 5432:localhost:5432 user@remote_host 

اتصال به پایگاه داده PostgreSQL از راه دور از طریق روش‌های مختلف

پس از اعمال پیکربندی‌های لازم و اطمینان از امنیت شبکه، اکنون می‌توانید به پایگاه داده PostgreSQL از راه دور متصل شوید.

استفاده از psql

این روش از دستور زیر استفاده می‌کند:

psql -h <hostname> -p <port> -U <username> -d <database>

پس از زدن "Enter"، از شما درخواست می‌شود که رمز عبور برای احراز هویت را وارد کنید.

استفاده از pgAdmin

  • pgAdmin را از رایانه خود اجرا کنید و گزینه "Add New Server" را انتخاب کنید.
  • اطلاعات مورد نیاز را در برگه "Connection" در بالای صفحه سرور وارد کنید.
  • روی "Save" کلیک کنید.

استفاده از کلاینت‌های شخص ثالث (به عنوان مثال، DBeaver)

  • برنامه DBeaver را راه‌اندازی کنید، روی "Database" کلیک کرده و سپس "New Database Connection" را انتخاب کنید.
  • گزینه "PostgreSQL" را انتخاب کرده و اطلاعات دسترسی را وارد کنید.
  • روی "Test Connection" کلیک کنید تا اتصال آزمون شود، سپس "Finish" را بزنید تا برنامه به پایگاه داده متصل شود.

اتصال با استفاده از زبان‌های برنامه‌نویسی مختلف


در زیر نحوه اتصال به پایگاه داده PostgreSQL از راه دور با استفاده از زبان‌های برنامه‌نویسی مختلف آمده است:

  • Python
import psycopg2               
 conn = psycopg2.connect(      
          host="remote_host",  
          database="db_name",  
          user="username",     
          password="password"  
 )   
  • Node.js

const { Client } = require('pg'); 
 const client = new Client({       
   host: 'remote_host',            
   database: 'db_name',            
   user: 'username',               
   password: 'password',           
 });                               
 client.connect();        
  • Java

    Connection connection = DriverManager.getConnection(                         
           "jdbc:postgresql://remote_host:5432/db_name", "username", "password");
    

    برای اتصال به PostgreSQL، به درایور JDBC PostgreSQL نیاز دارید. بنابراین، آن را به عنوان یک وابستگی در پروژه خود اضافه کنید.

    در صورت استفاده از Gradle، این خط را به فایل build.gradle خود اضافه کنید:

     

    implementation ‘org.postgresql:postgresql:42.6.0’ 

مسائل و نکات رایج

هنگام اتصال از راه دور ممکن است با مشکلات احراز هویت مواجه شوید، از جمله اشتباه بودن ترکیب نام کاربری/رمز عبور یا تنظیمات نادرست در فایل «pg_hba.conf».

  • اگر پیام "connection refused" دریافت کردید، ممکن است به دلیل پیکربندی نادرست PostgreSQL برای گوش دادن به آدرس‌های مناسب یا عدم اجازه دادن فایروال به ترافیک در پورت 5432 باشد.
  • برای مثال، در صورت پیکربندی نادرست احراز هویت کاربر:
    • فایل «pg_hba.conf» را روی سرور PostgreSQL بیابید. این فایل معمولاً در دایرکتوری داده (به عنوان مثال، «/var/lib/postgresql/<version>/main/») قرار دارد.
    • اطمینان حاصل کنید که قانونی برای اجازه دادن به اتصال از آدرس IP مشتری شما وجود دارد. یک خط مانند زیر اضافه کنید: host all  all <client_IP_address>/32 md5

      (به جای <client_IP_address> آدرس واقعی IP مشتری را وارد کنید.)

    • تغییرات را ذخیره کرده و PostgreSQL را مجدداً راه‌اندازی کنید: sudo systemctl restart postgresql

بهترین روشهای اتصال امن از راه دور

ساده‌ترین راه برای ایمن کردن اتصالات PostgreSQL از راه دور، استفاده از رمزهای عبور پیچیده است. علاوه بر این، می‌توانید:

  • از اصل کمترین امتیاز (PoLP) استفاده کنید تا مجوزها تنها به آنچه کاربران برای انجام وظایفشان نیاز دارند محدود شود.
  • با به‌روزرسانی فایل «postgresql.conf»، از SSL/TLS برای رمزگذاری ترافیک بین مشتری و سرور استفاده کنید (تنظیمات "ssl = on").
  • حساب‌های کاربری که دیگر مورد استفاده قرار نمی‌گیرند را مرور کرده و غیر فعال کنید.
  • دسترسی به سرور PostgreSQL را با اجازه دادن تنها به آدرس‌های IP معتبر محدود کنید. این کار می‌تواند از طریق قوانین فایروال یا فایل «pg_hba.conf» مدیریت شود.
  • سرویس PostgreSQL را به یک آدرس IP خاص متصل کنید به جای گوش دادن روی همه رابط‌ها (0.0.0.0). این تنظیمات در فایل «postgresql.conf» انجام می‌شود.

منبع StrongDM

۶۵
۱۴۰۴/۱/۱۹