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

用于创建ASP.NET成员资格提供程序用户的脚本,asp.net,tsql,asp.net-membership,membership-provider,Asp.net,Tsql,Asp.net Membership,Membership Provider,我创建了一组插入脚本,将新用户添加到aspnet_成员和aspnet_用户表中。我不能认证,说找不到我的用户 是否有人试图通过T-SQL插入创建新的成员资格用户?我必须这样做,因为我们在C#/ASP.NET中创建的用户代码目前不起作用。这很可能是因为会员资格提供商对密码进行散列(并对其加盐)以进行保存和检索(散列是比较的,而不是未删除的密码) 我猜您运行了aspnet\u Membership\u CreateUser存储过程。这将放置一个未更改的密码(和错误的密码) 换句话说,您需要使用成员资

我创建了一组插入脚本,将新用户添加到aspnet_成员和aspnet_用户表中。我不能认证,说找不到我的用户


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

这很可能是因为会员资格提供商对密码进行散列(并对其加盐)以进行保存和检索(散列是比较的,而不是未删除的密码)

我猜您运行了
aspnet\u Membership\u CreateUser
存储过程。这将放置一个未更改的密码(和错误的密码)


换句话说,您需要使用成员资格提供程序/API来创建、检索和验证。

尝试以下脚本:

第一步。用户定义的用于编码密码和salt的函数

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
第二步。创建用户成员资格的存储过程

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
第三步。创建用户

DECLARE @UserId uniqueidentifier

SET @UserId = NewId()

EXECUTE [dbo].[CreateUser] 
           'UserName'   --@UserName
          ,'UserP@ssword '--@ClearTextPassword
          ,'user@email.com '--@Email
          ,@UserId --User's uniqueidentifier
补充说明:

  • 检查web.config成员资格元素中的应用程序名称是否正确
  • 记住创建角色和向角色添加用户
  • 从MSDN:

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

    不,我只是从我的另一个用户那里复制了一个现有密码和salt,并在insert语句“Membership provider/API”中为这个新用户使用了它。是的,这就是代码中的漏洞,我现在没有时间修复它……需要立即创建一个用户以备紧急维护/test@CoffeeAddict好啊那就这么做吧。创建一个应用程序,该应用程序具有一个配置文件,其中connectionString指向您的数据库,使用该连接字符串(以及其他应用程序名称)的成员资格提供程序节,以及具有相同详细信息的roleManager。我从何处获得[aspnet_membership_CreateUser],或者我的sql server管理员是否将我锁定?这里也有同样的问题。如果让visual studio设置成员资格提供程序表,则不会有aspnet_Membership_CreateUser命令。