رفع مشکل خطای اتصال به دیتابیس SQL Server
در این مطلب میخواهیم درباره خطایی صحبت کنیم که هنگام اتصال به SQL Server ممکن است با آن روبرو شوید. اگر با EF Core کار میکنید یا مستقیم به دیتابیس وصل میشوید، شاید این مشکل برایتان پیش آمده باشد. این خطا به خاطر تغییراتی است که در نسخههای 7 دات نت و SQL Server ایجاد شد که ممکن است کمی گیجکننده باشد.
نسخه NET 7. که منتشر شد، بسیاری از کاربران در شبکههای اجتماعی و بخش نظرات سایت ما، با ارسال این خطا، علت مشکل را میپرسیدند. در روزهای ابتدایی عرضه این نسخه، راهنمای مشخصی برای رفع این خطا وجود نداشت و بسیاری از کاربران دچار سردرگمی شده بودند. حتی حالا، با گذشت چند سال از معرفی این قابلیت، هنوز هم کاربرانی که تازه کار با NET. را شروع کردهاند، بهخصوص آنهایی که اتصال به دیتابیس را از آموزشهای قدیمیتر یاد گرفتهاند یا از کانکشن استرینگهای قدیمی کپی میکنند، با این مشکل مواجه میشوند.
هدف ما از انتشار این مقاله، کمک به همین دسته از کاربران است؛ کسانی که در آغاز مسیر یادگیری هستند و نیاز دارند سریع و ساده این مشکل را برطرف کنند.
خطا
ممکن است هنگام اجرای EF Core یا تلاش برای اتصال، این پیام خطا را ببینید:
A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)
این یعنی ارتباط برقرار شده، ولی در مرحله ورود مشکلی پیش آمده. مشکل؟ گواهینامه SSL توسط یک مرجع معتبر تأیید نشده است.
چرا این خطا پیش میآید؟
از نسخه .NET 7 به بعد، مقدار پیشفرض گزینه TrustServerCertificate
به False
تغییر کرده است. هدف از این تغییر افزایش امنیت است. در نسخههای قبلی، این مقدار True
بود و به طور خودکار گواهینامهها را قبول میکرد. با این تغییر، اگر گواهینامه معتبر نباشد، اتصال برقرار نمیشود.
میتوانید اطلاعات بیشتری درباره این ویژگی را در لینک زیر مطالعه کنید:
https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-7.0/breaking-changes?tabs=v7#new-behavior
TrustServerCertificate چیست؟
این گزینه میگوید آیا برنامه باید گواهینامه SSL سرور را تأیید کند یا نه.
وقتی True
باشد، برنامه بررسی نمیکند و اتصال برقرار میشود.
وقتی False
باشد، برنامه بررسی میکند. اگر گواهینامه مشکل داشته باشد، اتصال رد میشود.
چطور این خطا را رفع کنیم؟
روش سریع
برای رفع سریع، مقدار TrustServerCertificate
را در کانکشن استرینگ به True
تغییر دهید. مثل این:
Server=your_server_name;Database=your_database_name;User Id=your_username;Password=your_password;TrustServerCertificate=True;
🚫این روش مشکل را حل میکند ولی امنترین راه نیست.
روش اصولی
اگر امنیت برایتان مهم است (که باید باشد!)، این مراحل را انجام دهید:
تهیه گواهینامه:
برای سرور لوکال یا تست،میتوانید از همین روش استفاده کنید.
اما برای سرور پروداکشن، یک گواهینامه معتبر از یک مرجع گواهینامه (CA) تهیه کنید.
نصب گواهینامه روی سرور:
گواهینامه را روی سرور نصب کنید و مطمئن شوید آماده استفاده است.
فعال کردن ارتباط امن:
در SQL Server Configuration Manager، گزینه Force Encryption را فعال کنید.
تنظیمات در SQL Server Management Studio (SSMS)
اگر با SSMS کار میکنید و این مشکل را دارید، میتوانید گزینه "Trust server certificate" را فعال کنید. :
وارد SSMS شوید.
در صفحه اتصال به سرور.
گزینه Trust server certificate را فعال کنید.
این روش کارتان را راه میاندازد، ولی باز هم بهتر است از گواهینامههای معتبر استفاده کنید.
خطای The certificate chain was issued by an authority that is not trusted نشاندهنده تلاش برای امنتر کردن ارتباطات در NET. و SQL Server است. اگر عجله دارید، میتوانید از روش سریع TrustServerCertificate=True استفاده کنید، اما توصیه ما استفاده از گواهینامه معتبر است.
ارتباط امنتر یعنی دادههای شما بهتر محافظت میشوند و حملات امنیتی سختتر میشوند. به همین دلیل ارزشش را دارد که این مراحل را طی کنید.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید