用于创建ASP.NET成员资格提供程序用户的脚本

时间:2012-02-09 21:46:22

标签: asp.net tsql asp.net-membership membership-provider

我创建了一堆插入脚本来将新用户添加到aspnet_Membership和aspnet_User表中。我不能认证,说它找不到我的用户。

是否有人尝试通过T-SQL插入创建新的成员资格用户?我必须这样做,因为我们在C#/ ASP.NET中创建用户代码目前不起作用。

3 个答案:

答案 0 :(得分:14)

来自MSDN:

declare @now datetime
set @now= GETDATE()
exec aspnet_Membership_CreateUser 'MyAppName','admin1','pass@word1', '','admin1@contoso.com','','',1,@now,@now,0,0,null

http://msdn.microsoft.com/en-us/library/gg252020(v=office.14).aspx

答案 1 :(得分:2)

这很可能是因为成员资格提供者为了保存和检索而散列密码(并将其加密)(比较散列,而不是未散列的密码)。

我猜你运行了aspnet_Membership_CreateUser存储过程。这将是一个未加密的密码(和错误的盐)。

换句话说,您需要使用Membership provider / API来创建,检索和验证。

答案 2 :(得分: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 @UserId=@pUserId

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'   --@UserName
          ,'UserP@ssword '--@ClearTextPassword
          ,'user@email.com '--@Email
          ,@UserId --User's uniqueidentifier

附加说明:

  1. 在您的web.config成员资格元素中检查您的应用程序名称是否正确。
  2. 请记住创建角色并将用户添加到角色。