2012-02-09 54 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

相关问题