2012-02-09 19 views
7

Ho creato un gruppo di script di inserimento per aggiungere un nuovo utente alla tabella aspnet_Membership e aspnet_User. Non riesco ad autorizzare, dice che non riesce a trovare il mio utente.Script per creare un provider di appartenenze ASP.NET Utente

Qualcuno ha provato a creare un nuovo utente di appartenenza tramite inserti T-SQL? Devo farlo in questo modo perché il nostro codice utente creato in C#/ASP.NET non funziona al momento.

risposta

2

Ciò è più probabile perché il provider di appartenenze ha la password (e la salta) per il salvataggio e il recupero (l'hash viene confrontato, non la password senza fruscio).

Suppongo che abbia eseguito la procedura memorizzata aspnet_Membership_CreateUser. Questo sta per mettere una password unshshed (e sale sbagliato).

In altre parole, è necessario utilizzare il provider di appartenenza/API per creare, recuperare e autenticare.

+0

NO Io ho semplicemente copiato una password e il sale esistente da un altro utente di mine e lo ha utilizzato per questo nuovo utente così nella dichiarazione dell'inserto – PositiveGuy

+1

"Abbonamento provider/API "beh, questo è ciò che è spezzato nel codice, e non ho il tempo di sistemarlo adesso ... ho bisogno di creare un utente ora per un'emergenza/test di manutenzione – PositiveGuy

+0

@CoffeeAddict Ok, beh, basta fare questo. Creare un'applicazione che abbia un file di configurazione con connectionString che punta al proprio database, una sezione del provider di appartenenza che utilizza quella stringa di connessione (e l'altro nome dell'applicazione) e roleManager con gli stessi dettagli. –

2

provare i seguenti script:

Fase 1. User Defined Function per codificare la password e il sale

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 

Passaggio 2. Stored procedure per creare utente di appartenenza

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 

Fase 3. Crea l'utente

DECLARE @UserId uniqueidentifier 

SET @UserId = NewId() 

EXECUTE [dbo].[CreateUser] 
      'UserName' [email protected] 
      ,'[email protected] '[email protected] 
      ,'[email protected] '[email protected] 
      ,@UserId --User's uniqueidentifier 

Note aggiuntive:

  1. Controlla il tuo nome dell'applicazione è corretto nel vostro elemento appartenenza web.config.
  2. Ricordare di creare ruoli e aggiungere utenti ai ruoli.
+0

dove trovo [aspnet_Membership_CreateUser] o il mio amministratore di SQL Server mi ha bloccato ...? –

Problemi correlati