PDA

View Full Version : ایراد دسترسی در Restore کردن دیتابیس



AmirAlimadadi
چهارشنبه 28 اسفند 1392, 14:30 عصر
با سلام
من یه مشکلی توی Restore کردن دارم. من یه دیتابیس دارم با تعدادی User که همگی از نوع dbOwner هستند و از Windows Authentication استفاده می کنند. یه دیتابیس دارم که از اون استفاده می کنم. تمام User ها رو به اون دیتابیس Add کردم و تا اینجا مشکلی نیست.
مشکل از اونجا شروع می شه که توی Application می خوام اون دیتابیس رو Restore With replace کنم. بعد از این عملیات تمام User ها پاک می شن و اون دیتابیس از دسترس خارج می شه. یه سری کارا کردم و یه چیزایی از بقیه شنیدم که تقریبا هیچ کدوم جواب نداد. کارایی که کردم این بود:
1- می خواستم User ها رو بعد از عملیات Restore دستی دوباره به دیتابیس اضافه کنم، ولی چون dbo بودم sql اجازه نمی داد.
2- تمام User ها رو از dbo به sysAdmin تغییر دادم. که کار کرد. اما خوب کار خطرناک و نادرستی است.

چه طوری می شه User ها رو بعد از عملیات Restore دوباره به دیتابیس به صورت خودکار اضافه کرد. یا اینکه جلوی پاک شدنشون رو بگیریم.

شنیدم که اگه از application role استفاده کنم درست می شه ولی در این مورد هم چیز زیادی نمی دونم.

AmirAlimadadi
یک شنبه 03 فروردین 1393, 19:22 عصر
سلام . میدونم عیده، ولی کسی نیست که بدونه

espootin
پنج شنبه 14 فروردین 1393, 14:19 عصر
با سلام.

طبق بررسی هایی که من انجام دادم ، بهترین راهکار برای شما اینه که یک اسکریپت از login و users ها تهیه کنید و پس از بازیابی دیتابیستون ، اسکریپت ساخته شده را بروی دیتابیستون اجرا کنید.

اسکریپت را هم از قسمت Task->Generate scripts می توانید بسازید.

یک راه دیگر هم استفاده از Copy Database هست که معمولا برای انتقال دیتابیس به یک سرور دیگر استفاده می شود که در این روش نیز یوزر ها و ورود ها را انتقال می دهد.

موفق باشید.

esteghamat
دوشنبه 01 اردیبهشت 1393, 15:40 عصر
سلام
در زمان Restore كردن قطعا Security بانك اطلاعاتي جديد مد نظر قرار خواهد گرفت. حال اگر اين Backup از همان سرور تهيه شده باشد، اشكالات غيرفعال شدن و يا حذف شدن User ها خيلي كمتر خواهد بود.
اما اگر بانك مبدا در سرور ديگري باشد و شما Backup آنرا در دستگاه ديگري Restore مي كنيد، قطعا User هاي شما همان User هاي سرور مبدا خواهند شد و به احتمال زياد اين Userها در سرور جديد يتبم (Orphan) مي شوند و نيز Userهاي باك اطلاعاتي قبلي شما حذف مي‌شوند.
اما راهكارها ، اول اينكه در سرور مبدا مشابه همين User هايي كه در مقصد داريد ايجاد كنيد كه با Restore كردن راحت تر باشيد.
دوم اينكه طبق گفته دوستمون اسكريپت توليد لاگين و يوزر ها را داشته باشيد.
سوم اينكه اگر بعد از Restore تعداي از User ها هستند ولي يتيم شده اند (ارتباطشان با لاگين قطع شده ) از اين اسكريپت استفاده كنيد :

Declare @UserName varchar(100), @GUID varchar(1001)

declare MyUserCR cursor forselect Name from sysUserswhere Name not in ('public' , 'Sys' , 'DBO' , 'Information_Schema','Guest')OPEN MyUserCR FETCH NEXT FROM MyUserCR Into @UserName while @@Fetch_Status = 0 begin set @GUID = NewId() exec sp_change_users_login 'Auto_fix' ,@UserName,Null,@GUID FETCH NEXT FROM MyUserCR Into @UserName endClose MyUserCR deallocate MyUserCR