اتصال به SQL از راه دور (Remote) و یا به یک سرور در شبکه
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: پنج دقیقه

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

1. کلاینت (Client): منظور از کلاینت کامپیوتری است که میخواهد به سرور متصل گردد و از SQL کامپیوتر سرور خدماتی را دریافت نماید.

2. سرور (Server): کامپیوتری است که میخواهیم به آن متصل شویم و داده‌ها را بصورت متمرکز بر روی آن ذخیره و بازیابی نماییم.

به دو روش می‌توان به سرور متصل شد:

1. Windows Authentication
در این روش جهت اتصال به بانک اطلاعاتی، کامپیوتر مبدا یا Client باید عضو شبکه ای باشد کهServer در آن وجود دارد. در واقع برای شبکه هایی استفاده می‌شوند که دارای Domain می باشند وClient به عنوان یک کاربر شناخته شده در سرور تعریف شده است.

2. SQL Authentication
در این روش کلاینت به عنوان یک کاربر یا Login در SQL تعریف شده است و دارای نام کاربری و رمز عبور می‌باشد.

جهت اتصال از راه دور به یک سرور دارای SQL، باید تنظیمات زیر را برای کامپیوتر سرور انجام دهیم:

1. به SQL Server کامپیوتر سرور متصل شوید.

2. در پنجره Object Explorer بر روی نام سرور (اولین آیتم موجود در لیست) کلیک راست کنید و گزینهProperties را انتخاب نمایید.

3. در پنجره ظاهر شده (Server Properties) و در قسمت Select a page (سمت چپ پنجره) بر رویSecurity کلیک کنید.

4. در سمت راست پنجره گزینه SQL Server and Windows Authentication mode را انتخاب کنید.

5. دکمه OK را انتخاب کنید. پنجره پیغامی مبنی بر Restart کردن سرور نمایش داده می‌شود. این پنجره را تایید کنید.

6. مجددا بر روی نام سرور کلیک راست کنید و گزینه Restart را انتخاب نموده و در پیغام ظاهر شده Yesرا انتخاب نمایید.

تا به اینجا سرور آماده پذیرش اتصال از راه دور بصورت SQL Authentication می باشد. حال نوبت به تعریف یک Login می باشد تا توسط این Login بتوانید به سرور از راه دور متصل شوید. مراحل زیر را برای تعریفLogin دنبال کنید:

1. در پنجره Object Explorer به مسیر Security > Logins بروید.

2. بر روی پوشه Logins کلیک راست نموده و گزینه New Login… را انتخاب نمایید.

3. در پنجره ظاهر شده در بخش Login name نامی را به کاربر اختصاص دهید. (به عنوان مثال user1)

4. گزینه SQL Server authentication را انتخاب نموده و در بخش Password و Confirm password رمز عبوری را به این کاربر اختصاص دهید. (به عنوان مثال abc123)

5. گزینه Enforce password policy را از حالت انتخاب خارج کنید تا رمز عبور را از قید سیاستهای رمزگذاری ویندوز خارج کنید.

6. در قسمت Select a page (سمت چپ پنجره) بر روی Server Roles کلیک کنید.

7. در سمت راست پنجره گزینه sysadmin یا هر نوع دسترسی دیگری را که مایل هستید انتخاب نمایید.
توجه: با انتخاب sysadmin کاربر ایجاد شده به کل سرور و بانک‌های اطلاعاتی دسترسی کامل یاAdmin دارد. اگر نمیخواهید کاربر چنین دسترسی داشته باشد، در بخش فوق فقط گزینه public انتخاب شده باشد.

8. در قسمت Select a page (سمت چپ پنجره) بر روی User Mapping کلیک کنید. در این بخش نحوه دسترسی کاربر را به بانکهای اطلاعاتی موجود، مشخص می‌کنیم.

9. در سمت راست پنجره و در بخش Users mapped to this login یک یا چند بانک اطلاعاتی را که میخواهید توسط این Login قابل دسترسی باشند را انتخاب نمایید.

10. پس از انتخاب هر بانک اطلاعاتی، در قسمت پایین (Database role membership for:) نوع دسترسی کاربر به آن Database را انتخاب کنید. در اینجا من db_owner را انتخاب می‌کنم تا کاربر دسترسی کامل به بانک اطلاعاتی انتخاب شده را داشته باشد.

11. دکمه OK را انتخاب کنید تا Login مورد نظر ساخته شود.

حالا می‌توانید از راه دور و حتی از روی خود سرور با کاربر ایجاد شده به سرور متصل شوید. برای این منظور SQL را Disconnect نمایید و یا یکبار SQL Server Management Studio (SSMS) را ببندید و دوباره اجرا نمایید. در پنجره Connect to Server اطلاعات زیر را وارد نمایید:

Server name :نام یا IP سرور (به عنوان مثال 192.168.0.1)

Authentication: انتخاب گزینه SQL Server Authentication

Login: طبق مثال user1

Password: طبق مثال abc123

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


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

ممکن است در زمان اتصال از راه دور با مشکل عدم امکان اتصال به سرور مواجه شوید. برای این منظور و اطمینان از صحت تنظیمات سرور، موارد زیر را در سرور بررسی نمایید تا بدرستی تنظیم شده باشند:

1. به مسیر Start > All Programs > Microsoft SQL Server 2008/2005 > Configuration Tools > SQL Server Configuration Manager مراجعه کنید و موارد زیر را بررسی نمایید:

1.1. بر روی SQL Server Services کلیک کنید و در سمت راست پنجره بررسی کنید که ستون Stateمربوط به SQL Server Browser و SQL Server در وضعیت Running باشد.

1.2. بر روی آیتم‌های زیر مجموعه SQL Server Network Configuration کلیک کنید و در سمت راست پنجره بررسی کنید که آیتم های Shared Memory، Named Pipes و TCP/IP در وضعیت Enabled باشند.

1.3. بر روی آیتم SQL Native Client Configuration > Client Protocols  کلیک کنید و در سمت راست پنجره بررسی کنید که آیتم های Shared Memory، Named Pipes و TCP/IP در وضعیت Enabled باشند.

2. بررسی کنید که فایروال سیستم سرور غیر فعال باشد و یا SQL Server به برنامه های Trust فایروال اضافه شده باشد. 

  • #
    ‫۹ سال و ۱۰ ماه قبل، چهارشنبه ۱۲ آذر ۱۳۹۳، ساعت ۰۳:۰۹
    این مقاله رو دیدم یاد موضوعی افتادم ، یادم هست موقعی که از sql server 2005 استفاده می‌کردیم موقع انتقال جداول از این بانک به بانک راه دور ، جداول انتقال می‌یافت ولی کلیدها خیر
    حالا یا من اشتباهی می‌کردم یا مشکل از طرف sql server بوده ، البته بعضی‌ها هم می‌گفتن همین مشکل رو دارند
    من بیشتر از generate scripts برای انتقال استفاده می‌کنم که نسبت به اون روش انتقال جداول سریعتر عمل می‌کنه و برای همین دیگه توی نسخه‌های جدیدتر این موضوع رو تست نکردم
    • #
      ‫۹ سال و ۱۰ ماه قبل، شنبه ۱۵ آذر ۱۳۹۳، ساعت ۱۴:۱۵
      سلام آقای مقدم
      شما برای این کار زمانی که می‌خواهید Script  از Database خود تهیه کنید با پس از مشخص کردن Object‌های مورد نظر از قیبل (Table,SP,..) باید گزینه Advance رو کلیک کنید و در پنجره پیش رو کلیه‌ی تنظیماتی که در خصوص Object‌ها وجود دارد را می‌توانید انجام دهید .
      و در آخر موضوعی که شما مد نظرتان است را می‌توانید با True کردن گزینه‌ی مربوط به Index می‌توانید کلید‌ها را هم انتقال بدهید.
      انشالله تو این هفته سعی می‌کنم مقاله ای کامل در باره Script  در بانک اطلاعاتی در سایت قرار دهم.
       سئوالی بود در خدمتم
      .
      • #
        ‫۹ سال و ۱۰ ماه قبل، شنبه ۱۵ آذر ۱۳۹۳، ساعت ۱۵:۳۰
        ممنون آقای طاهری بابت پاسختون
        منظور من انتقال جداول در حالت ویزادی بود ، یه امکان انتقال در حالت ویزادی برای جداول و تمامی آبجکت‌ها هست و در اون این مشکل بود
        برای همین من دیگه از اسکریپت استفاده می‌کنم که انتقالش به مراتب راحت تره و تنظیمات زیادی هم داره ، وگرنه در حالت اسکریپت مشکلی ندارم
        مشکل از طریق ویزارد مربوطه هست که مثلا جداول رو انتخاب میکردم و بعد هم سرور مقصد و بعد جداول رو انتقال میداد ولی وقتی چک میکردی می‌دیدی کلیدها نیست
  • #
    ‫۷ سال و ۳ ماه قبل، یکشنبه ۴ تیر ۱۳۹۶، ساعت ۱۴:۲۵
    روشی برای افزایش سرعت کار با دیتابیس Remote توسط Management Studio هست یا خیر؟