2

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 = '0123456789ABCDEF'

  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

私は変数を持っています

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

これをリモート サーバー上のストアド プロシージャに送信し、そこでこの変数を実行します。

 Exec (@SQL)

しかし、私はエラーが発生しました:

@SQL 変数は次のように設定されます: 'Create Login [Name] With password = 0x Hashed'

ありがとう :)

4

2 に答える 2

2

手順を変更して、パスワードに引用符を追加します。

SET @tmpstr = 'CREATE LOGIN [' + @name + '] WITH PASSWORD=' + @txtpwd + ' HASHED' 
于 2012-04-18T12:32:26.187 に答える
1

これは私のために働く

SELECT  'create login ' + QUOTENAME(name) + ' with password = '
        + CONVERT(SYSNAME, [password_hash], 1) + ' hashed'
FROM    sys.[sql_logins]
于 2012-04-18T20:49:23.953 に答える