2011-07-17 21 views
36

क्या ऐसा कोई तरीका है जिससे मैं जान सकता हूं कि उपयोगकर्ता ( लॉगिन नहीं) डेटाबेस में पहले से ही बनाया गया है? मेरा मतलब है कि उपयोगकर्ता लॉगिन नहीं है, क्योंकि, मुझे पता है कि लॉगिन के लिए कैसे जांच करें। मुझे उस उपयोगकर्ता को जांचना होगा जो एक विशिष्ट डीबी & के लिए बनाई गई भूमिका के अंदर बनाई गई है।यह जांचने के लिए कि क्या उपयोगकर्ता पहले से ही डेटाबेस में बनाया गया है या SQL में नहीं है?

यह वह जगह है लॉगिन करने के लिए जाँच के लिए कोड:

SELECT name FROM sys.server_principals WHERE name = 'test_user' 

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

धन्यवाद

उत्तर

60

कैसे के बारे में:

USE (your database you want to check the user's existence in) 

SELECT * 
FROM sys.database_principals 
WHERE name = '(your user name to check here)' 

sys.server_principals आप लॉगिन सर्वर स्तर पर परिभाषित चलता - sys.database_principals आप एक डेटाबेस स्तर पर प्रिंसिपलों (जैसे उपयोगकर्ता खातों) दिखाता है।

+0

@marc_s: मुझे लगता है कि मान लिया उपयोगकर्ता iN CREATE USER को लॉग इन बनाने में लॉगिन से मेल नहीं खा सकता है। उदाहरण के लिए 'लॉग इन जीबीएन से यूजर मार्क्स बनाएं – gbn

3

आप sys.server_principals मिली है, तो मैं तुम्हें sys.database_principals नहीं मिला है हैरान हूँ। आप sid कॉलम के आधार पर विचारों में शामिल हो सकते हैं।

14

यह आप किसी दिए गए लॉगिन नाम के लिए उपयोगकर्ता मेल खाने वाले नाम बता देंगे

USE MyDB 
SELECT 
    sp.name AS ServerLoginName, 
    dp.name AS DBUserName 
FROM 
    sys.server_principals sp 
    LEFT JOIN 
    sys.database_principals dp ON sp.sid = dp.sid 
WHERE 
    sp.name = 'MyLogin' 
+0

धन्यवाद "जीबीएन" ... यह काम करता है;) – Q8Y

+0

यह सही जवाब है। एसक्यूएल लॉगिन को एक अलग नाम वाले डेटाबेस उपयोगकर्ता के लिए मैप किया जा सकता है। – themilkyninja

+0

@themilkyninja, आपको दोनों चेक (वह एक और marc_s का एक) लागू करना पड़ सकता है। यदि आप विशिष्ट नाम वाले उपयोगकर्ता को बनाने जा रहे हैं, तो आपको यह जांचना होगा कि उपयोगकर्ता नाम उपलब्ध है (marc_s की जांच चलाकर)। इसके अतिरिक्त, लॉगिन और उपयोगकर्ता के बीच 1 से 1 लिंक के कारण आपको यह जांचना होगा कि कोई उपयोगकर्ता लॉगिन से जुड़ा नहीं है (जीबीएन की जांच चलाकर)। –

7
use SomeDatabase 
go 

/* built-in system function */ 
select database_principal_id('UserNameHere') 

/* check if exists and drop */ 
if database_principal_id('UserNameHere') is not null 
    drop user 'UserNameHere' 
go 
+0

स्टैक ओवरफ्लो में आपका स्वागत है। भविष्य में उपयोगकर्ताओं के लिए आपकी प्रतिक्रिया को बेहतर ढंग से समझने के लिए कृपया अपने उत्तर पर विस्तृत जानकारी दे सकते हैं। – Sim

0

आप इस विधि के रूप में अच्छी तरह से देखभाल के लिए हो सकता है ...

IF DATABASE_PRINCIPAL_ID('domain\lanid') IS NULL 
BEGIN 
    CREATE USER [domain\lanid] FOR LOGIN [domain\lanid] WITH DEFAULT_SCHEMA=[dbo] 
    EXEC sp_addrolemember N'db_ApplicationUserRole', N'domain\lanid' 
END 
संबंधित मुद्दे

 संबंधित मुद्दे