2012-04-18 17 views
2

SQLログインのパスワードを抽出して別のサーバーに広げるスクリプトを作成する必要があります。SQLログインからパスワードを抽出する

私はこれをしなかった:

Declare @PasswordBinary varbinary(256) 
Set @PasswordBinary = CAST(LOGINPROPERTY(@LoginName, 'PasswordHash') AS varbinary (256)) 

Exec sp_hexadecimal @PasswordBinary, @PasswordStr Out 

sp_hexadecimal:

Create PROCEDURE [dbo].[sp_hexadecimal] 
    @binvalue varbinary(256), 
    @hexvalue varchar (514) OUTPUT 
AS 
    DECLARE @charvalue varchar (514) 
    DECLARE @i int 
    DECLARE @length int 
    DECLARE @hexstring char(16) 

    SELECT @charvalue = '0x' 
    SELECT @i = 1 
    SELECT @length = DATALENGTH (@binvalue) 
    SELECT @hexstring = 'ABCDEF' 

    WHILE (@i <= @length) 
    BEGIN 
    DECLARE @tempint int 
    DECLARE @firstint int 
    DECLARE @secondint int 

    SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) 
    SELECT @firstint = FLOOR(@tempint/16) 
    SELECT @secondint = @tempint - (@firstint*16) 

    SELECT @charvalue = @charvalue + 
         SUBSTRING(@hexstring, @firstint+1, 1) + 
         SUBSTRING(@hexstring, @secondint+1, 1) 

    SELECT @i = @i + 1 
    END 

    SELECT @hexvalue = @charvalue 

私が持っている変数私は、リモートサーバーとI上のストアドプロシージャに送信

@SQL nvarchar(max) = 'CREATE LOGIN ' + QUOTENAME(@LoginName) + ' With PASSWORD = ' + @PasswordStr + ' HASHED''' 

この変数をそこに実行してください:

Exec (@SQL) 

が、私はエラーだ:

The @SQL variable is set to : 'Create Login [Name] With password = 0x Hashed'

感謝:)

答えて

2

パスワードに引用符を追加するために、あなたの手順を変更しては:

SET @tmpstr = 'CREATE LOGIN [' + @name + '] WITH PASSWORD=' + @txtpwd + ' HASHED' 
+0

ありがとうございましたDiego、しかし、あなたが 'Hashe d 'のパスワードはsysnameのデータ型にあるべきです:) –

+0

私の編集を見て、これを見てください:http://support.microsoft.com/kb/246133 – Diego

1

これは私

SELECT 'create login ' + QUOTENAME(name) + ' with password = ' 
     + CONVERT(SYSNAME, [password_hash], 1) + ' hashed' 
FROM sys.[sql_logins] 
のために働きます
関連する問題