Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Korrigieren das Fehlen von kryptografischen salt Abwandlung Hash für SQL Server-sa-Anmeldung

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

980671
Problembeschreibung
In Microsoft SQL Server 2005 und höheren Versionen verwenden mehrere Instanzen von SQL Server die gleiche kryptografische Salt für den integrierten Benutzernamen sa. Da die Salt für alle Installationen identisch ist, erzwingen bestimmte Arten von Brute Angriffe werden praktischer, wenn der Angreifer zunächst das gehashte Kennwort zugreifen kann. Hashkennwörter werden nur die Administratoren von SQL Server zur Verfügung.
Ursache
In SQL Server 2005 und höheren Versionen wird die kryptografische Salt zusammen mit dem Benutzernamen sa generiert. Wenn CHECK_POLICY aktiviert ist, wird die kryptografische Salt nicht neu generiert, wenn der Benutzer das Kennwort, ändert um mit der Kennwortchronik konsistent sein. Standardmäßig ist die CHECK_POLICY für SQL Server 2005 aktiviert. Wenn die CHECK_POLICY deaktiviert ist, die salt Konsistenz ist nicht mehr erforderlich, für die Systemadministratoranmeldung und eine neue Salt wird auf der nächsten Kennwortänderung regeneriert.

Obwohl dies für alle Konten true ist, wird das Anmeldekonto sa während des Buildvorgangs generiert. Daher die Salt wird während des gleichen Buildprozesses erstellt und verwaltet wird, während eine Instanz von SQL Server Setup.

Hinweis: Dieses Problem betrifft auch die Standard-Anmeldungen, die von der Gruppenrichtlinien-based-Feature verwendet werden, aber das Risiko reduziert, für SQL Server 2008. Standardmäßig sind diese Anmeldungen deaktiviert.

Schadensbegrenzende Maßnahmen

Auch wenn die kryptografische Salt über mehrere Installationen gleich bleibt, würde es nicht ausreichend, um den Kennworthash gefährden. Um dieses Verhalten auszunutzen, müsste der böswillige Benutzer administrativen Zugriff auf eine Instanz von SQL Server, um den Kennworthash erhalten haben. Wenn bewährte Methoden befolgt werden, werden normale Benutzer können nicht den Kennworthash abgerufen werden. Deshalb würden Sie ausnutzen den Mangel an kryptografischen salt Variation möglich.
Abhilfe
Für SQL Server 2005 Service Pack 2 oder höher können Sie das folgende Skript aus, um die kryptografische Salt, der das Anmeldekonto sa zurücksetzen ausführen. Um das Skript auszuführen, müssen Sie über ein Konto mit CONTROL SERVER Berechtigungen angemeldet sein, oder das Dienstkonto muss Mitglied der Serverrolle Sysadmin sein. You should be aware that, after you reset the cryptographic salt, the password history for the sa login will also be reset.
-- Work around for SQL Server 2005 SP2+---- Sets the password policy check off for [sa]-- Replaces [sa] password with a random byte array-- NOTE: This effectively replaces the sa password hash with -- a random bag of bytes, including the salt,-- and finally sets the password policy check on again---- After resetting the salt, -- it is necessary to set the sa password,-- or if preferred, disable sa--CREATE PROC #sp_set_new_password_and_set_for_sa(@new_password sysname, @print_only int = null)AS	DECLARE @reset_salt_pswdhash nvarchar(max)	DECLARE @random_data varbinary(24)	DECLARE @hexstring nvarchar(max)	DECLARE @i int	DECLARE @sa_name sysname;		SET @sa_name = suser_sname(0x01);	SET @random_data = convert(varbinary(16), newid()) + convert(varbinary(8), newid())	SET @hexstring = N'0123456789abcdef'	SET @reset_salt_pswdhash = N'0x0100'	SET @i = 1	WHILE @i <= 24	BEGIN		declare @tempint int		declare @firstint int		declare @secondint int		select @tempint = convert(int, substring(@random_data,@i,1))		select @firstint = floor(@tempint/16)		select @secondint = @tempint - (@firstint*16)		select @reset_salt_pswdhash = @reset_salt_pswdhash +			substring(@hexstring, @firstint+1, 1) +			substring(@hexstring, @secondint+1, 1)		set @i = @i+1	END	DECLARE @sql_cmd nvarchar(max)	SET @sql_cmd = N'ALTER LOGIN ' + quotename(@sa_name) + N' WITH CHECK_POLICY = OFF;	ALTER LOGIN ' + quotename(@sa_name) + N' WITH PASSWORD = ' + @reset_salt_pswdhash + N' HASHED;	ALTER LOGIN ' + quotename(@sa_name) + N' WITH CHECK_POLICY = ON;	ALTER LOGIN ' + quotename(@sa_name) + N' WITH PASSWORD = ' + quotename(@new_password, '''') + ';'	IF( @print_only is not null AND @print_only = 1 )		print @sql_cmd	ELSE		EXEC( @sql_cmd )go----------------------------------------------------------------------------------------- Usage example:--DECLARE @new_password sysname -- Use tracing obfuscation in order to filter the new password from SQL traces-- http://blogs.msdn.com/sqlsecurity/archive/2009/06/10/filtering-obfuscating-sensitive-text-in-sql-server.aspx--SELECT @new_password = CASE WHEN 1=1 THEN     -- TODO: replace password placeholder below with a strong password    --   ##[MUST_CHANGE: replace this placehoder with a new password]##:   ELSE EncryptByPassphrase('','') ENDEXEC #sp_set_new_password_and_set_for_sa @new_passwordgoDROP PROC #sp_set_new_password_and_set_for_sa go
Für SQL Server 2008 können Sie das folgende Skript ausführen. Um das Skript auszuführen, müssen Sie über ein Konto mit CONTROL SERVER Berechtigungen angemeldet sein, oder das Dienstkonto muss Mitglied der Serverrolle Sysadmin sein.
-- Work around for SQL Server 2008---------------------------------------------------------------------------- Set the password policy check off for [sa]-- Reset the password-- Set the password policy check on for [sa] once again-- -- NOTE: The password history will be deleted--CREATE PROC #sp_set_new_password_and_set_for_sa(@new_password sysname, @print_only int = null) AS	DECLARE @sql_cmd nvarchar(max);	DECLARE @sa_name sysname;	-- Get the current name for SID 0x01. 	-- By default the name should be "sa", but the actual name may have been chnaged by the system administrator	--	SELECT @sa_name = suser_sname(0x01);	-- NOTE: This password will not be subject to password policy or complexity checks	-- if desired, this step can be replaced with a "throw away" password for 	-- and set the real password after the check policy setting has been set	--	SELECT @sql_cmd = 'ALTER LOGIN ' + quotename(@sa_name) + ' WITH CHECK_POLICY = OFF;	ALTER LOGIN ' + quotename(@sa_name) + ' WITH PASSWORD = ' + quotename(@new_password, '''') + ';	ALTER LOGIN ' + quotename(@sa_name) + ' WITH CHECK_POLICY = ON;'	IF( @print_only is not null AND @print_only = 1 )		print @sql_cmd	ELSE		EXEC( @sql_cmd )go----------------------------------------------------------------------------------------- Usage example:--DECLARE @new_password sysname-- Use tracing obfuscation in order to filter the new password from SQL traces-- http://blogs.msdn.com/sqlsecurity/archive/2009/06/10/filtering-obfuscating-sensitive-text-in-sql-server.aspx--SELECT @new_password = CASE WHEN 1=1 THEN     -- TODO: replace password placeholder below with a strong password    --   ##[MUST_CHANGE: replace this placehoder with a new password]##:   ELSE EncryptByPassphrase('','') ENDEXEC #sp_set_new_password_and_set_for_sa @new_passwordgoDROP PROC #sp_set_new_password_and_set_for_sa go
In SQL Server 2008, the cryptographic salt for the Policy Based Management logins can be reset by using the following script. Um das Skript auszuführen, müssen Sie über ein Konto mit CONTROL SERVER Berechtigungen angemeldet sein, oder das Dienstkonto muss Mitglied der Serverrolle Sysadmin sein.
-------------------------------------------------------------------------- Set the password policy check off for the Policy principals-- Reset the password-- Set the password policy check on for them once again---- NOTE: -- These principals are not intended to establish connections to SQL Server-- So this SP will also make sure they are disabled--CREATE PROC #sp_reset_password_and_disable(@principal_name sysname, @print_only int = null) AS	DECLARE @random_password nvarchar(max)		SET @random_password = convert(nvarchar(max), newid()) + convert(nvarchar(max), newid())	DECLARE @sql_cmd nvarchar(max)	SET @sql_cmd = N'ALTER LOGIN ' + quotename(@principal_name) + N' WITH CHECK_POLICY = OFF;	ALTER LOGIN ' + quotename(@principal_name) + N' WITH PASSWORD = ''' + replace(@random_password, '''', '''''') + N''';	ALTER LOGIN ' + quotename(@principal_name) + N' WITH CHECK_POLICY = ON;	ALTER LOGIN ' + quotename(@principal_name) + N' DISABLE;'	IF( @print_only is not null AND @print_only = 1 )		print @sql_cmd	ELSE		EXEC( @sql_cmd )goEXEC #sp_reset_password_and_disable '##MS_PolicyEventProcessingLogin##';EXEC #sp_reset_password_and_disable '##MS_PolicyTsqlExecutionLogin##';goSELECT name, password_hash, is_disabled FROM sys.sql_loginsgo
Status
Dieses Problem wird in zukünftigen Servicepacks für SQL Server 2005, SQL Server 2008 und in zukünftigen Versionen von SQL Server behoben werden.
Weitere Informationen
Microsoft thanks folgenden für die Zusammenarbeit mit uns Kunden zu schützen:
sql2005 sql2008

Warnung: Dieser Artikel wurde automatisch übersetzt

Eigenschaften

Artikelnummer: 980671 – Letzte Überarbeitung: 03/02/2010 23:15:17 – Revision: 1.0

  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
  • kbmt kbpasswords kbexpertiseadvanced kbsurveynew kbprb KB980671 KbMtde
Feedback