लॉगिन में पहले से ही एक अलग उपयोगकर्ता नाम के तहत एक खाता है


29

जब मैं इस SQL ​​को निष्पादित करता हूं:

USE ASPState
GO
IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser')
CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser];
GO

मुझे निम्नलिखित त्रुटि मिलती है:

लॉगिन में पहले से ही एक अलग उपयोगकर्ता नाम के तहत एक खाता है।

मुझे कैसे पता चलेगा कि मेरे लॉगिन खाते के लिए यह भिन्न उपयोगकर्ता नाम क्या है?

जवाबों:


31

इसका अर्थ है कि लॉगिन [R2Server \ AAOUser] पहले से ही उस डेटाबेस में एक उपयोगकर्ता के लिए मैप किया गया है। या, दूसरे शब्दों में, एक अन्य डेटाबेस उपयोगकर्ता इस लॉगिन का उपयोग कर रहा है। आप देख सकते हैं कि निम्नलिखित क्वेरी के साथ कौन सा डेटाबेस उपयोगकर्ता आपके लॉगिन का उपयोग कर रहा है:

use YourDB
go
SELECT su.name as DatabaseUser
FROM sys.sysusers su
join sys.syslogins sl on sl.sid = su.sid
where sl.name = 'test' -- login

पुनश्च: स्क्रिप्ट का एक संस्करण जो संगतता विचारों का उपयोग नहीं करता है:

Select sp.name as LoginName, sp.type_desc as LoginType,
    dp.name as DBUser, dp.type_desc as UserType
from sys.server_principals sp
join sys.database_principals dp on dp.sid = sp.sid
where sp.name = 'test' -- your login

ठीक है, मैं देख रहा हूँ कि मूल्य dboप्रदर्शित किया जा रहा है। अजीब बात है, मुझे याद नहीं है कि मैंने dboअपने खाते के लिए उपयोग किया है R2Server\AAOUser। सोच रहा था कि मुझे आगे क्या करना चाहिए।
जैक

4
क्या आपने सर्वर से कनेक्ट करने के लिए उस लॉगिन का उपयोग करके डेटाबेस बनाया है? यदि हाँ, तो आप इसके db मालिक हैं और किसी अन्य उपयोगकर्ता को बनाने की आवश्यकता नहीं है। आप पहले से ही सेट हैं।
मैरियन

दरअसल, मैंने डेटाबेस aspnet_regsql -E -S .\MSSQLSERVER_R2 -ssaddबनाने के लिए कमांड का उपयोग किया था ASPState। मुझे लगता है कि शायद, मैं पहले से ही सेट हूं, भले ही, मुझे पहली बार में भी इसका एहसास न हो।
जैक

लगता है क्या: "-ई -> वर्तमान विंडोज क्रेडेंशियल्स के साथ प्रमाणित करें।" :-)
मैरियन

4
मैं का प्रयोग करेंगे sys.server_principalsऔर sys.database_principalssysusersऔर sysloginsपिछड़े अनुकूलता के लिए ही हैं।
हारून बर्ट्रेंड

4

यह एक 'मेटाडेटा बात' है ...

कभी-कभी डेटाबेस उपयोगकर्ता को उस DB में जो कुछ भी चल रहा होता है, उस पर 'दूषित' हो जाता है। (यदि मैंने DB को पुनर्स्थापित किया है, तो मैंने समान व्यवहार देखा है, और पुनर्स्थापना प्रतिलिपि में भूमिकाएं उस चीज़ से भिन्न होती हैं, जिसे आपने ओवरलेड किया था। यही कारण है कि मैंने नीचे की कोशिश की, जिसने मेरे लिए समस्या तय कर दी।)

  1. SSMS में लॉगिन गुण खोलें -> (सुरक्षा | लॉगिन | विफल यूजरआईडी | गुण | उपयोगकर्ता मानचित्रण)। आप शायद डीबी की पहले से जाँच कर चुके हैं और रोल्स को सौंपा गया है (जैसे पूरी तरह से सामान्य)।

  2. केवल संदर्भ के लिए त्रुटि देने वाले DB पर अनुमतियों पर ध्यान दें।

  3. उस DB को अनचेक करें और लॉगिन सेव करें।
  4. अब लक्ष्य DB में लॉगिन / भूमिका जोड़ने के लिए अपनी क्वेरी फिर से चलाएँ। यह ठीक काम करना चाहिए।

2
जब मैं चरण 3 में Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
पहुँचता

मुझे Cannot drop the user 'dbo'.त्रुटि संदेश भी मिला । मैंने इस स्क्रिप्ट को चलाया, जिसने समस्याग्रस्त उपयोगकर्ता मानचित्रण को हटा दिया और समस्या को ठीक कर दिया USE DATABASE_NAME; ALTER AUTHORIZATION ON DATABASE::DATABASE_NAME TO [sa]:। अधिक जानकारी के लिए यह मेरे द्वारा उपयोग किया गया स्रोत है: blog.sql-assistance.com/index.php/cannot-drop-the-user-dbo
SherlockSpreadsheets
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.