5

मेरे पास एक SQL स्क्रिप्ट है जो उपयोगकर्ताओं को मेरे डेटाबेस में बनाता है। यह नेट सदस्यता संग्रहित प्रोसेस का उपयोग करता है।एसक्यूएल बनाने के लिए एसक्यूएल सदस्यता प्रदाता उपयोगकर्ता

इस बिंदु पर यह ठीक काम करता है।

एकमात्र मुद्दा यह है कि पासवर्ड स्पष्ट टेक्स्ट सहेजे गए हैं। क्या मैं करने के लिए यहाँ बदलना चाहिए वे कर रहे हैं नमकीन/एन्क्रिप्टेड (सुनिश्चित नहीं हैं कि शब्द यहाँ उपयोग करने के लिए)

GO 

DECLARE @return_value int, 
    @UserId uniqueidentifier 


EXEC @return_value = [dbo].[aspnet_Membership_CreateUser] 
    @ApplicationName = N'Theater', 
    @UserName = N'sam.sosa', 
    @Password = N'mypassword', 
    @PasswordSalt = N'eyhKDP858wdrYHbBmFoQ6DXzFE1FB+RDP4ULrpoZXt6f', 
    @Email = N'[email protected]', 
    @PasswordQuestion = N'Whats your favorite color', 
    @PasswordAnswer = N'Fusia', 
    @IsApproved = 1, 
    @CurrentTimeUtc = '2010-03-03', 
    @CreateDate = '2010-03-03', 
    @UniqueEmail = 1, 
    @PasswordFormat = 0, 
    @UserId = @UserId OUTPUT 

SELECT @UserId as N'@UserId' 

SELECT 'Return Value' = @return_value 

GO 

धन्यवाद!

+0

आप सदस्यता API का उपयोग क्यों नहीं करते हैं बल्कि इसके बजाय आप SQL चलाते हैं? –

+0

मुझे पर्यावरण कारणों के लिए एक एसक्यूएल स्टेटमेंट चलाने की आवश्यकता है – aron

+0

एसक्यूएल का कौन सा संस्करण आप उपयोग कर रहे हैं? 2005, 2008 या आर 2? – hwiechers

उत्तर

10

हुड यह "टुकड़ों में बंटी" पासवर्ड भंडारण मोड के लिए की तरह लग रहा तहत, यह बस गणना करता है:

SHA1 (नमक + पासवर्ड)

नमक संग्रहीत किया जाता है Base64 इनकोडिंग, तो यह पहले डीकोड किया जाना चाहिए (यूनिकोड) पासवर्ड के साथ संयोजित होने के लिए। अंत में, परिणाम भंडारण के लिए बेस 64 एन्कोड किया गया है।

निम्नलिखित (भयानक) एसक्यूएल एक उपयुक्त एन्कोडेड मान आउटपुट करेगा जिसे आपके पास वर्तमान में "mypassword" के स्थान पर प्रतिस्थापित किया जा सकता है। पासवर्ड को संग्रहीत किया जाता है यह इंगित करने के लिए आपको @PasswordFormat को 1 पर भी सेट करना होगा।

declare @salt nvarchar(128) 
declare @password varbinary(256) 
declare @input varbinary(512) 
declare @hash varchar(64) 

-- Change these values (@salt should be Base64 encoded) 
set @salt = N'eyhKDP858wdrYHbBmFoQ6DXzFE1FB+RDP4ULrpoZXt6f' 
set @password = convert(varbinary(256),N'mypassword') 

set @input = hashbytes('sha1',cast('' as xml).value('xs:base64Binary(sql:variable(''@salt''))','varbinary(256)') + @password) 
set @hash = cast('' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable(''@input'')))','varchar(64)') 

-- @hash now contains a suitable password hash 
-- Now create the user using the value of @salt as the salt, and the value of @hash as the password (with the @PasswordFormat set to 1) 

DECLARE @return_value int, 
    @UserId uniqueidentifier 

EXEC @return_value = [dbo].[aspnet_Membership_CreateUser] 
    @ApplicationName = N'Theater', 
    @UserName = N'sam.sosa', 
    @Password = @hash, 
    @PasswordSalt = @salt, 
    @Email = N'[email protected]', 
    @PasswordQuestion = N'Whats your favorite color', 
    @PasswordAnswer = N'Fusia', 
    @IsApproved = 1, 
    @CurrentTimeUtc = '2010-03-03', 
    @CreateDate = '2010-03-03', 
    @UniqueEmail = 1, 
    @PasswordFormat = 1, 
    @UserId = @UserId OUTPUT 

SELECT @UserId as N'@UserId' 

SELECT 'Return Value' = @return_value 
+0

इरिडियम, धन्यवाद, लेकिन मैं उपरोक्त एसक्यूएल कथन में इसे कैसे शामिल करूं? – aron

+0

मैंने आपके मूल SQL के साथ पासवर्ड हैशिंग को शामिल करने के लिए अपना कोड संशोधित किया है। – Iridium

+0

स्वीट! धन्यवाद! अच्छा काम करता है! साइड नोट: यदि उपयोगकर्ता बाद में अपना पासवर्ड बदलता है तो tb_Memberships तालिका – aron