我创建了一堆插入脚本来将新用户添加到aspnet_Membership和aspnet_User表。我无法验证,说它无法找到我的用户。用于创建ASP.NET成员资格提供程序的脚本用户
有没有人试图通过T-SQL插入创建新的成员资格用户?我必须这样做,因为我们在C#/ ASP.NET中创建的用户代码目前不起作用。
我创建了一堆插入脚本来将新用户添加到aspnet_Membership和aspnet_User表。我无法验证,说它无法找到我的用户。用于创建ASP.NET成员资格提供程序的脚本用户
有没有人试图通过T-SQL插入创建新的成员资格用户?我必须这样做,因为我们在C#/ ASP.NET中创建的用户代码目前不起作用。
这很可能是因为成员资格提供程序为了保存和检索而哈希密码(和盐)(哈希是比较的,而不是非哈希密码)。
我猜你跑了aspnet_Membership_CreateUser
存储过程。这将会产生一个不加密的密码(和错误的盐)。
换句话说,您需要使用Membership provider/API来创建,检索和验证。
尝试下面的脚本:
步骤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
个
其他注意事项:
我在哪里得到[aspnet_Membership_CreateUser]或者我的sql服务器管理员锁定了我......? – 2017-10-02 19:48:54
从MSDN:
declare @now datetime
set @now= GETDATE()
exec aspnet_Membership_CreateUser 'MyAppName','admin1','[email protected]', '','[email protected]','','',1,@now,@now,0,0,null
http://msdn.microsoft.com/en-us/library/gg252020(v=office.14).aspx
NO我只是从我的另一个用户复制现有的密码和盐,在INSERT语句 – PositiveGuy 2012-02-09 21:53:09
“会员将它用于这个新的用户,以及提供者/ API“好吧,这就是代码中的问题,我现在没有时间来解决这个问题......现在需要为维护紧急情况/测试创建一个用户 – PositiveGuy 2012-02-09 21:53:52
@CoffeeAddict好的,就这么做。创建一个具有指向数据库的connectionString配置文件的应用程序,使用该连接字符串(以及您的其他应用程序名称)的成员资格提供程序部分以及具有相同详细信息的roleManager。 – 2012-02-09 21:55:56