उपयोगकर्ता अनुमतियाँ बैकअप के बाद गड़बड़ कर दिया - ऑपरेशन पुनर्स्थापित करें


11

मुझे कई नए SQL सर्वर 2008 डेटाबेस को अपने नए db सर्वर पर ले जाना था, इसलिए मैंने उन सभी (.bak फ़ाइलों) का समर्थन किया, इन फ़ाइलों को नए बॉक्स पर कॉपी किया और उन्हें पुनर्स्थापित किया (सभी SQL प्रबंधन स्टूडियो का उपयोग करके किया गया)।

सब ठीक हो गया, लेकिन अब मुझे लगता है कि मैं किसी भी डेटाबेस में SQL Server खाते का उपयोग करके लॉगिन नहीं कर सकता जो पुराने RDBMS पर काम करना जारी रखता है। मेरी विंडोज़-प्रामाणिक लॉगिन अभी भी संयोग से ठीक काम करती है।

मुझे यह पता था कि उपयोगकर्ताओं और अनुमतियों को सभी नए डेटाबेस सर्वर पर मूल रूप से डुप्लिकेट किया जाएगा, लेकिन ऐसा लगता है कि कुछ गलत हो गया है। मैं टिप्पणी की सराहना / सुझाव / मदद के प्रस्ताव ;-)

जवाबों:


7

मैं देख रहा हूं कि आपको पहले से ही आपकी समस्या का हल मिल गया है, एक बात जो मैंने आपके मूल प्रश्न में देखी थी वह यह थी कि आपके पास अभी भी पुराने सर्वर का उपयोग था।

SO पर निम्नलिखित प्रश्न में एक समान समस्या थी और इसमें उपयोगकर्ता अनुमतियाँ उत्पन्न करने के लिए एक स्क्रिप्ट के साथ Microsoft आलेख के लिंक शामिल हैं।

/programming/461385/restoring-a-backup-to-a-different-server-user-permissions

(उस प्रश्न के लिए सूचीबद्ध संसाधन http://support.microsoft.com/kb/918992 )

ऐसा लगता है कि Windows प्रमाणीकरण से सर्वर सेटिंग को मिक्स्ड मोड ऑथेंटिकेशन में बदलने से आपकी समस्या ठीक हो गई है, लेकिन अगर मुझे लगा कि यह समस्या पूरी तरह से हल नहीं हुई है तो यह उपयोगी हो सकता है।


मुझे यकीन है कि यह उपयोगकर्ता / अनुमतियों पर SQL सर्वर के साथ छेड़छाड़ करने वाला पहला मौका नहीं होगा, इसलिए मैं इस लेख को पोस्टीरिटी के लिए बुकमार्क करूंगा। पोस्ट करने के लिए बहुत धन्यवाद।
5arx

6

इसे "अनाथ उपयोगकर्ताओं" के रूप में जाना जाता है। इसे ठीक करने के 2 तरीके यहां दिए गए हैं

  1. यदि आप मूल मास्टर डेटाबेस को "loginsource" के रूप में पुनर्स्थापित कर सकते हैं और sys.server_principals में सभी SQL सर्वर और Windows लॉगिन उत्पन्न करने के लिए पर्याप्त जानकारी है। यही है, SIDs और एन्क्रिप्टेड पासवर्ड

  2. यदि आप केवल Windows लॉगिन का उपयोग करते हैं, तो आप स्क्रिप्ट बनाने के लिए प्रति डेटाबेस इसे चला सकते हैं

स्क्रिप्ट:

SELECT
    'CREATE LOGIN [' + SUSER_SNAME(sid) + '] FROM WINDOWS'
FROM
    sys.database_principals
WHERE
    [type] IN ('G', 'U')

आपकी प्रतिक्रिया के लिए धन्यवाद - मेरा वेब ऐप एसक्यूएल लॉगिन का उपयोग करता है जबकि हमारे विंडोज़ खाते का उपयोग प्रशासन के प्रयोजनों के लिए किया जाता है। जैसा कि आप सुझाव देते हैं, मैं 'loginsource' को पुनर्स्थापित करने का एक तरीका नहीं देख सकता - क्या आप कृपया विस्तृत कर सकते हैं? मुझे उम्मीद है कि यह सब Managment Studio का उपयोग करके किया जा सकता है?
5ARx

पुनश्च। मैंने इस दस्तावेज़ का समर्थन किया: support.microsoft.com/kb/274188 और सभी स्क्रिप्ट्स (जाहिरा तौर पर) सफलतापूर्वक चलाईं। लेकिन कुछ भी नहीं बदला है।
Marx

5

आदर्श रूप से आप उपयोगकर्ताओं और अनुमतियों को पुनर्स्थापित करने से पहले स्क्रिप्ट करेंगे। यदि ऐसा नहीं हुआ है, तो आपको तथ्य के बाद चीजों को ठीक करने के बारे में जाने की जरूरत है, और संभावना है कि कुछ छूट जाएगा लेकिन आपको वहां लगभग 90% प्राप्त करने में सक्षम होना चाहिए।

पहली बात यह पता लगाने की जरूरत है कि क्या नए सर्वर पर समान लॉगिन मौजूद हैं। यदि वे नहीं करते हैं तो आपको यह पता लगाना चाहिए कि नए सर्वर पर लॉगइन किए जाने के लिए यह ठीक है या नहीं। कभी लगता है कि वे बनाया जाना चाहिए, वहाँ क्यों वे पहली जगह में मौजूद नहीं था के रूप में एक अच्छा कारण हो सकता है। फिर आप साइनस तालिका के माध्यम से खुदाई करके उन्हें बनाने के बारे में जा सकते हैं।

आप निम्न के समान कुछ चलाकर अनाथ उपयोगकर्ताओं को ठीक कर सकते हैं:

DECLARE @username varchar(25), @loginsid varbinary(85)
DECLARE fixusers CURSOR
FOR
SELECT UserName = name 
    FROM sysusers
    WHERE issqluser = 1 
    and (sid is not null and sid <> 0x0)
    and suser_sname(sid) is null
    and name in (select name from master..syslogins)
    ORDER BY name
OPEN fixusers
FETCH NEXT FROM fixusers
INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC sp_change_users_login 'update_one', @username, @username

    FETCH NEXT FROM fixusers
    INTO @username
END CLOSE fixusers
DEALLOCATE fixusers 

यह कोड SQL2008 के लिए काम करेगा, लेकिन SQL2000 के लिए पीछे संगत लिखा गया था।


स्क्रिप्ट के लिए धन्यवाद। क्या मैं मान सकता हूं कि प्रबंधन स्टूडियो में ऐसा करने का कोई तरीका नहीं है? इसके अलावा, कुछ लोग डीबी स्तर के उपयोगकर्ताओं को हटाने और पुनः बनाने का सुझाव दे रहे हैं - क्या यह अनुशंसित है?
5arx

यह मानता है कि लोगिन पहले से ही मौजूद है और केवल SIDs
gbn

SID को sp_change_users_login अपडेट नहीं करता है? msdn.microsoft.com/en-us/library/ms174378.aspx
SQLRockstar

5arx - SSMS में ऐसा करने का कोई तरीका नहीं है। जैसा कि मैंने कहा, एक आदर्श स्थिति में आपने पुनर्स्थापना से पहले अपनी अनुमतियाँ लिखी होंगी। इस बिंदु पर या तो आपको हाथ से फिर से बनाने की जरूरत है या चीजों को स्वयं एक साथ करने की कोशिश करें। अगर मैं तुम होते, तो मैं पुराने db को पुनर्स्थापित करता, अनुमतियों को स्क्रिप्ट करता, दूसरे सर्वर से पुनर्स्थापना करता, और फिर अपनी अनुमतियाँ फिर से करता।
SQLRockstar

"Update_One: वर्तमान डेटाबेस में निर्दिष्ट उपयोगकर्ता को मौजूदा SQL सर्वर लॉगिन में लिंक करता है। उपयोगकर्ता और लॉगिन निर्दिष्ट होना चाहिए। पासवर्ड NULL होना चाहिए या निर्दिष्ट नहीं होना चाहिए।" तो यह मानता है कि लॉगिन पहले से मौजूद है।
gbn


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.