نحوه‌ی Authentication در Postgresql

پایگاه داده‌ی Postgres یکی از قدیمی‌ترین پایگاه‌های داده‌ی Open Source در حوزه‌ی Sql است.با این حال اولین مواجه با آن، حتی برای کسانی که سالها با دیگر پایگاه‌های داده کار کرده‌اند کمی پیچیده (و شاید ترسناک) به نظر می‌رسد.در این مقاله خیلی کوتاه به نحوه‌ی Authentication در این پایگاه داده می‌پردازیم.در Postgresql علاوه بر تعریف کاربران (شامل نام کاربری، کلمه عبور، دسترسی و ..) باید نحوه‌ی Authentication شدن آنها را نیز مشخص کنید.برای این منظور باید فایل pg_hba.conf را ویرایش کنید.این فایل با توجه به اینکه از سیستم عامل ویندوز و یا شبه یونیکس استفاده می‌کنید، در یکی از مسیرهای زیر قابل دسترسی است:C:\Program Files\PostgreSQL\<VERSION>\data /etc/postgresql/<VERSION>/mainدر این فایل به یکی از دو شکل زیر نحوه اعتبار سنجی کاربران مشخص می‌شود:local DATABASE USER METHOD [OPTIONS] host DATABASE USER ADDRESS METHOD [OPTIONS]که در این متن کلماتی که با حروف بزرگ نوشته شده است باید با عبارت مناسب جایگزین شود.حالت اول ،که با کلمه local شروع می‌شود،به این معنی است که برنامه‌ای که می‌خواهد متصل شود بر روی همان سیستم عاملی قرار داد که در حال اجرای Postgresql است.و در حالت دوم،که با کلمه host شروع می‌شود، منظور نحوه‌ی اتصال دیگر سیستم‌ها است که البته باید ADDRESS آن مشخص گردد.برای تعیین آدرس می توانید از دو حالت استفاده کنید.حالت اول استفاده از روش x.x.x.x/y است و در حالت دوم IP و net mask را به صورت جدا معرفی می‌کنیم.عبارت ذیل DATABASE معرف نام پایگاه‌(های) داده است که قرار است تنظیم بر روی آن اعمال شود خواهد بود.از کلمه all برای اشاره به همه پایگاه‌های داده‌ی موجود می‌توانید استفاده کنید.همچنین USER نماینده کاربران مورد نظر است و به مانند قبل از کلمه all برای اشاره به تمام کاربران می‌توانید استفاده کنید.اگر چند کاربر یا پایگاه داده دارید می‌توانید با comma از هم جدایشان نمایید.تا اینجا به این مورد پرداختیم که «از کجا» و «به چه پایگاهی» و «با چه کاربری» قصد اتصال دارند.در ذیل عبارت METHOD نحوه اعتبار سنجی معرفی می‌شود.در صورتی که نیاز به تنظیمات اضافه برای این بخش باشد ذیل بخش OPTIONS قرار می گیرد.در این مطلب به توضیح مختصر METHODها می‌پردازیم.من METHODها را می توان به دو دست تقسیم می‌کنم.در دسته اول روش‌های زیر قرار هستند:GSSAPI SSPI Ident LDAP RADIUS SSL PAM BSDکه هر کدام برای اعتبار سنجی نیاز به یک عامل خارجی دارند.مثلا استفاده از RADIUS Server و یا LDAP و یا PAM و ... که محل بحث ما نیستند.برای این موارد می توانید به اسناد Postgres مراجعه کنید.گروه دیگر مقادیر نیز هستند:peer trust md5که می‌خواهم در موردشان توضیح دهم.به تنظیمات زیر توجه کنید:local all postgres trust host all postgres 127.0.0.1/32 trust host all all 127.0.0.1/32 peer host all all ::1/128 peer host all all 192.168.1.0/24 md5همانطور که می‌بینید در برای اتصال توسط کاربر postgres به همه پایگاه‌های داده از روی سیستم جاری برچسب trust زده شده است.برای اتصال دیگر کاربران از روی سیستم جاری به هر یکی از پایگاه‌های داده برچسب peer داده شده است.و در نهایت برای اتصال کاربران در شبکه جاری هم مقدار md5 مشخص شده است.اما اینها به چه معنی هستند؟مقدار trust هنگامی به کار می رود که شما از Postgresql درخواست می‌کنید که اجازه‌ی ارتباط را بدون هرگونه اعتبارسنجی،بپذیر.این روش ناامن ترین روش ممکن است.در این جا Postgresql هیچ گونه تلاشی برای شناسایی نمی‌کند و کلا Connection String مورد استفاده هیچ اطلاعاتی در مورد کلمه عبور و ... نیاز ندارد.همانطور که می‌بینید این مقدار در مثال بالا برای سیستم جاری ثبت شده و فقط برای یک کاربر معتبر است.برچسب peer فقط در سیستم‌های شبه یونیکس کاربر دارد و به این معنی است که چنانچه کاربر درخواست دهنده‌ی سیستم همنام کاربر Postgresql است، نیاز به اعتبار سنجی نیست.مثلا اگر کاربری در لینوکس خود دارید که نامش ali است و برنامه‌ای که تحت مجوز او اجرا شده است و می خواهد به پایگاه داده وصل شود با این فرض که کاربری به نام ali نیز در Postgresql وجود دارد،این اجازه صادر می‌شود.همانطور که می‌بینید این روش نیز نیاز به اعتبار سنجی دقیق (کلمه عبور) ندارد.با این حال چون سیستم‌های شبه یونیکس خودشان در هنگام login اعتبار سنجی انجام می‌دهند،از روش قبل امن‌تر است.ذکر این نکته ضروریست که چنانچه از برچسب ident بدون هیچ OPTIONS خاصی استفاده کنید،معادل همین peer خواهد بود.در حالت سوم سیستم علاوه بر نام کاربری معرفی شده در Postgresql، نیاز به کلمه عبور دارد.یکی از مهمترین برچسب های این دسته md5 است.یعنی در هنگام ارسال اطلاعات اتصال،کلمه عبور به صورت md5 ارسال شود.دقت کنید که اگر در هنگام برنامه نویسی در حالت ایجاد Connection String هستند،شما باید کلمه عبور را به صورت دقیق وارد کنید و این درایو اتصال است که آن را به صورت md5 برای پایگاه داده در شبکه ارسال می‌کند.برای ملاحظه‌ی اطلاعات بیشتر می توانید به صفحه رسمی Postgresql در این آدرس مراجعه کنید.