2012-06-18 10 views
5

वर्तमान में मैं एसक्यूएल सर्वर में उपयोगकर्ता के विंडोज खाते को nvarchar (10) के रूप में संग्रहीत कर रहा हूं, क्या यह उपयोगकर्ता आईडी स्टोर करने का सही तरीका है? डेटा प्रकार क्या होना चाहिए? या मुझे उपयोगकर्ता आईडी भी स्टोर करना चाहिए?मुझे डेटाबेस में विंडोज उपयोगकर्ता आईडी कैसे स्टोर करना चाहिए?

उत्तर

10

विंडोज एनटी उपयोगकर्ता पहचान एसआईडी, security-identifier के रूप में जाना जाता है। यह स्ट्रिंग प्रस्तुति SID String Format Syntax में निर्दिष्ट है और मार्शल प्रतिनिधित्व SID--Packet Representation में निर्दिष्ट है। यदि आप डेटाबेस में एक एसआईडी स्टोर करना चाहते हैं, तो sys.databases.owner_sid फ़ील्ड के समान प्रतिनिधित्व का उपयोग करें: varbinary (85)। लॉगिन एसआईडी का उपयोग करने के लिए SUSER_SID (जो भी लौटाता है ... varbinary(85))।

विशेष रूप से लॉगिन नाम (domain\user या [email protected]) के रूप में नहीं दुकान पहचान के बाद से इन परिवर्तन रास्ता अधिक बार आपकी अपेक्षा से, विशेष रूप से बड़े निगमों में करते हैं। मेरा 10 वर्षों में 5 गुना बदल गया।

+0

जहां तक ​​मैं उत्तर से समझता हूं, अगर मैं कुछ प्रक्रिया के साथ उपयोगकर्ता को जोड़ने के लिए उपयोगकर्ता आईडी का उपयोग करूँगा, तो मुझे एसआईडी का उपयोग करना चाहिए, लेकिन अगर मैं एक लेबल की तरह उपयोगकर्ता आईडी का उपयोग करूँगा, तो यह एक बेहतर विकल्प है शुद्ध उपयोगकर्ता आईडी के साथ जाने के लिए क्योंकि एसआईडी मेरे डेटाबेस को पढ़ने में कठोर बनाता है, क्या मैं सही हूँ? – HOY

+0

व्यवस्थापक को छोड़कर उपयोगकर्ता को एसआईडी प्रदर्शित करना कोई उपयोग नहीं है। हालांकि आप टी-एसक्यूएल में ['SUSER_SNAME (sid)'] (http://msdn.microsoft.com/en-us/library/ms174427.aspx) का उपयोग करके या ['SecurityIdentifier का उपयोग करके एक एसआईडी को हमेशा एक नाम में परिवर्तित कर सकते हैं। अनुवाद (टाइपोफ (एनटीएसीसीएउंट)) '] (http://msdn.microsoft.com/en-us/library/system.security.principal.securityidentifier.translate.aspx) सी # में। –

2

यह एक बहुत ही जटिल सवाल है।

तकनीकी रूप से नाम संग्रहित नहीं करते हैं। आईडी को स्टोर करें, जो संयोग से किसी भी तरह से एक GUID है।

इसका मतलब है कि आप सुरक्षित हैं जब आप खाते का नाम बदलते हैं और यही वह है जो विन्डोज करता है। जब आप किसी फ़ाइल पर अधिकार खोलते हैं तो कभी भी नाम दिखने में एक सेकंड लगता है? और पहले एक नंबर दिखाता है? ऐसा इसलिए है क्योंकि डोमेन नियंत्रक से नाम प्राप्त करने के लिए विंडोज़ थोड़ा सा लेता है।

सिम्पल खाता नाम संग्रहित करना है, लेकिन इसका मतलब है कि आप नाम पर "मृत" हैं, जो काफी दर होनी चाहिए, ओह। मुझे लगता है कि ज्यादातर समाधान इसके लिए जाते हैं;)

+0

"आईडी 'GUID' वैसे भी टाइप होनी चाहिए।" जरुरी नहीं। आप 'एसआईडी' या 'GUID' निर्दिष्ट कर सकते हैं। यदि आपके पास बड़ी कंपनी है, तो एक 'GUID' एकाधिक डोमेन में अनूठी होगी, जबकि' एसआईडी 'डोमेन पर अद्वितीय होने की गारंटी नहीं है। लेकिन 'एसआईडी' विंडोज एनटी के लिए पिछड़ा संगत है। – GibralterTop

1

वर्तमान उपयोगकर्ता आईडी प्राप्त करने पर (HERE देखें), char(30) का उपयोग किया जाता है।

तो, कम से कम, आपको लंबाई 30 तक बदलनी चाहिए!

1

यह userid में डेटा के प्रकार पर निर्भर करता है यदि यह किसी अन्य तालिका से मैं आईडी करता हूं, तो इसे पैरांट टेबल में डेटाटाइप के अनुसार सहेजें। यदि यह विंडोज उपयोगकर्ता आईडी है तो इसे nvarchar के रूप में सहेजें लेकिन सुनिश्चित करें कि लॉगस्ट उपयोगकर्ता आईडी को समायोजित किया गया है। जैसे nvarchar (50)

1

या चाहिए मैं भी दुकान

userids Stack overflow में नया खाता बनाना है। यह उपयोगकर्ता आईडी स्वीकार करता है जिसका अर्थ है कि यह Passport Authentication का उपयोग करता है। लेकिन फिर भी यह क्वेरी/उत्तरों/टिप्पणियों/झंडे आदि के बीच संबंध के लिए डेटाबेस में उपयोगकर्ता की जानकारी रखता है

डेटा प्रकार क्या होना चाहिए?

अच्छा, यह आपकी आवश्यकता पर निर्भर करता है। गैर अंग्रेजी लैगेज के मामले में। यह NVarchar(50)

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