我創建了一堆插入腳本來將新用戶添加到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