2012-02-09 50 views
7

我創建了一堆插入腳本來將新用戶添加到aspnet_Membership和aspnet_User表。我無法驗證,說它無法找到我的用戶。用於創建ASP.NET成員資格提供程序的腳本用戶

有沒有人試圖通過T-SQL插入創建新的成員資格用戶?我必須這樣做,因爲我們在C#/ ASP.NET中創建的用戶代碼目前不起作用。

回答

2

這很可能是因爲成員資格提供程序爲了保存和檢索而哈希密碼(和鹽)(哈希是比較的,而不是非哈希密碼)。

我猜你跑了aspnet_Membership_CreateUser存儲過程。這將會產生一個不加密的密碼(和錯誤的鹽)。

換句話說,您需要使用Membership provider/API來創建,檢索和驗證。

+0

NO我只是從我的另一個用戶複製現有的密碼和鹽,在INSERT語句 – PositiveGuy 2012-02-09 21:53:09

+1

「會員將它用於這個新的用戶,以及提供者/ API「好吧,這就是代碼中的問題,我現在沒有時間來解決這個問題......現在需要爲維護緊急情況/測試創建一個用戶 – PositiveGuy 2012-02-09 21:53:52

+0

@CoffeeAddict好的,就這麼做。創建一個具有指向數據庫的connectionString配置文件的應用程序,使用該連接字符串(以及您的其他應用程序名稱)的成員資格提供程序部分以及具有相同詳細信息的roleManager。 – 2012-02-09 21:55:56

2

嘗試下面的腳本:

步驟1.用戶定義函數進行編碼的密碼和鹽

CREATE FUNCTION [dbo].[base64_encode] (@data VARBINARY(MAX)) RETURNS VARCHAR(MAX) WITH SCHEMABINDING, 
                         RETURNS NULL ON NULL INPUT BEGIN RETURN 
    (SELECT [text()] = @data 
    FOR XML PATH('')) END GO 

步驟2.存儲過程創建成員資格用戶

CREATE PROCEDURE [dbo].[CreateUser] 
    @UserName nvarchar(256) 
, @ClearTextPassword nvarchar(128) 
, @Email nvarchar(256) 
, @pUserId uniqueidentifier 


AS 

BEGIN 

DECLARE @ApplicationName nvarchar(256) 
DECLARE @PasswordFormat int 
DECLARE @UnencodedSalt uniqueidentifier 
DECLARE @Password nvarchar(128) 
DECLARE @PasswordSalt nvarchar(128) 
DECLARE @Now DATETIME 
DECLARE @UniqueEmail int 
DECLARE @UserId uniqueidentifier 

SET @ApplicationName = 'ApplicationName' --Find in aspnet_Applications.ApplicationName 
SET @PasswordFormat = 1 
SET @UnencodedSalt = NEWID() 
SET @PasswordSalt = dbo.base64_encode(@UnencodedSalt) 
SET @Password = dbo.base64_encode(HASHBYTES('SHA1', 
    CAST(@UnencodedSalt as varbinary(MAX)) 
    + CAST(@ClearTextPassword AS varbinary(MAX)))) 
SET @Now = getutcdate() 
SET @UniqueEmail = 1 
SET @[email protected] 

BEGIN TRANSACTION 

--DECLARE @UserId uniqueidentifier 

EXECUTE [dbo].[aspnet_Membership_CreateUser] 
    @ApplicationName 
    ,@UserName 
    ,@Password 
    ,@PasswordSalt 
    ,@Email 
    ,NULL 
    ,NULL 
    ,1 -- IsApproved == true 
    ,@Now 
    ,@Now 
    ,@UniqueEmail 
    ,@PasswordFormat 
    ,@UserId OUTPUT 

COMMIT 

END 

GO 

步驟3。創建用戶

DECLARE @UserId uniqueidentifier 

SET @UserId = NewId() 

EXECUTE [dbo].[CreateUser] 
      'UserName' [email protected] 
      ,'[email protected] '[email protected] 
      ,'[email protected] '[email protected] 
      ,@UserId --User's uniqueidentifier 

其他注意事項:

  1. 檢查應用程序的名稱是在你的web.config成員元素正確。
  2. 請記住創建角色並將用戶添加到角色。
+0

我在哪裏得到[aspnet_Membership_CreateUser]或者我的sql服務器管理員鎖定了我......? – 2017-10-02 19:48:54

相關問題