2012-02-09 1 views
7

Я создал кучу скриптов вставки, чтобы добавить нового пользователя в таблицу aspnet_Membership и aspnet_User. Я не могу утверждать, что он не может найти моего пользователя.Сценарий для создания поставщика членства ASP.NET Пользователь

Кто-нибудь пытался создать нового пользователя членства через вставки T-SQL? Я должен сделать это так, потому что наш код пользователя на C#/ASP.NET не работает на данный момент.

ответ

2

Это скорее всего, потому что поставщик членства хэширует пароль (и его соли) для сохранения и извлечения (хеш сравнивается, а не неуправляемый пароль).

Я предполагаю, что вы запустили хранимую процедуру aspnet_Membership_CreateUser. Это приведет к неподтвержденному паролю (и неправильной соли).

Другими словами, вам необходимо использовать поставщик членства/API для создания, извлечения и аутентификации.

+0

НЕТ Я просто скопировал существующий пароль и соль от другого пользователя шахты и использовать его для этого нового пользователя, а также в вставной заявлении – PositiveGuy

+1

«Membership провайдер/API «да, это то, что сломано в коде, и у меня нет времени исправить это прямо сейчас ... нужно создать пользователя сейчас для аварийного обслуживания/теста – PositiveGuy

+0

@CoffeeAddict Хорошо, просто сделайте это. Создайте приложение, в котором есть файл конфигурации с connectionString, указывающий на вашу базу данных, раздел поставщика членства с использованием этой строки подключения (и вашего другого имени приложения) и roleManager с теми же подробностями. –

2

Попробуйте следующие сценарии:

Шаг 1. User Defined Function для кодирования паролей и соли

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-сервера заблокировал меня ...? –