این خطا هنگامی رخ میدهد که دیتابیس را از یک سرور برروی سرور دیگری ریستور می نمایید.تا زمانیکه دسترسی ها را تغییر ندهید ، نمی توانید به دیتابیس دسترسی داشته باشید. دستوراتی که در دیتابیس ایجاد شده باشند و هنگام ریستور نمودن اجازه دسترسی به آنها گرفته می شود. بخاطر عدم تعریف کاربر مورد نظر می باشد.(برای انجام دستورات زیر ، در سیستم لوکال از طریق SQL Management Studio به دیتابیس متصل شوید و با استفاده از New Query اقدام نمایید.)
برای پیدا کردن کاربرانی که اجازه دسترسی ندارند از دستور زیر استفاده نمایید :
EXEC sp_change_users_login 'REPORT'
این دستور گزارشی از دیتابیس مورد نظر و شناسه های امنیتی آن را ارائه میدهد.
برای حل این موضوع راه حل های متعددی وجود دارد.
1- حذف کاربر مورد نظر از دیتابیس : برای این منظور به بخش Security بروید. در این بخش Users را انتخاب نمایید. برروی اسم کاربر کلیک راست نمایید و گزینه Delete را انتخاب نمایید.
Security>Users>Right click on the user>Delete
برای بازسازی دوباره نام کاربر برای ورود به دیتابیس از مسیر زیر اقدام نمایید. به بخش Security بروید. در این قسمت گزینه Login را انتخاب نمایید ، سپس برروی گزینه Login کلیک راست نمایید. گزینه Properties را انتخاب کنید.
در این قسمت برروی گزینه User Mapping کلیک کنید. سپس کاربر مورد نظر را انتخاب کنید. در این قسمت نقش های مورد نظر را انتخاب نمایید و سپس گزینه OK را کلیک کنید.
Security > Logins > right click on the login > Properties > User Mapping > Select (checked) database in Users mapped to this login part > choose desired roles for the user in Database role membership > Click OK
این عملیات کاربرانی را که از قبل در دیتابیس ایجاد شده بودند و هنگام ریستور نمودن دیتابیس کماکان موجود بودند را حذف می نماید و کاربران فعلی را که حق ورود به دیتابیس را دارند اضافه می نماید.
2- برای ثبت یک کاربر که اطلاعات وی از قبل داخل دیتابیس موجود می باشد از دستور زیر استفاده نمایید:
EXEC sp_change_users_login 'Update_One', 'DB_Username', 'Login_Username'
3- اگر کاربر را ایجاد نموده اید و نام کاربری و رمز عبور را نیز در دسترس دارید ، برای برطرف کردن خطای DBO از دستور زیر دوباره نام کاربری را تنظیم نمایید.
EXEC sp_change_users_login 'Auto_Fix', 'user'
4- اگر می خواهید کاربر جدید ایجاد نمایید با استفاده از دستور زیر این کار را انجام دهید :
EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'
هنگامیکه از دستور sp_change_users_login استفاده می نمایید ممکن است به خطای : dbo is a forbidden value for the login name parameter in this procedure برخورد کنید. این خطا هنگامی رخ میدهد که کاربر DBO هیچ گونه دسترسی به دیتابیس نداشته باشد. برای رفع این مشکل از دستور زیر استفاده نمایید :
EXEC sp_changedbowner 'sa'