Teď jste offline a čekáte, až se znova připojí internet.

Oprava nedostatek kryptografických soli změnu na hash přihlášení správce systému SQL Server

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:980671
Příznaky
Microsoft SQL Server 2005 a novějších verzích více instancí serveru SQL Server používat stejný šifrovací sůl při předdefinované přihlášení sa. Vzhledem k tomu, že sůl je stejné pro všechna zařízení, vynutit určité druhy hrubou útoky, které se stanou praktičtější, pokud nejprve může útočník získat přístup k hodnoty hash hesla. Hodnoty hash hesla jsou k dispozici pouze správci serveru SQL Server.
Příčina
SQL Server 2005 a novějších verzích kryptografických sůl generováno spolu s přihlášením sa. Pokud je povoleno CHECK_POLICY, kryptografických sůl je obnoven Pokud uživatel změní heslo, aby mohly být konzistentní s historie hesel. CHECK_POLICY je ve výchozím nastavení povoleno pro SQL Server 2005. CHECK_POLICY je zakázána, soli konzistenci již není potřebné pro přihlášení sa a nové sůl je vygenerován nový při příští změně hesla.

Přestože se jedná o hodnotu true pro všechny účty, přihlašovací účet sa generováno během procesu sestavení. Proto je vytvořen během procesu stejné sestavení její soli a udržována během instancí Instalační program serveru SQL Server.

Poznámka: Tento problém se týká také výchozí přihlášení, které jsou používány funkce Správa podle zásad SQL Server 2008, ale riziko se sníží. Tyto přihlášení jsou ve výchozím nastavení zakázána.

Skutečnosti snižující závažnost rizika

I v případě, že kryptografických sůl zůstane ve více instalacích, nebylo by dostatečné pro ohrozit hodnotu hash hesla. Aby mohl útočník zneužít k tomuto chování, uživateli se zlými úmysly by mít přístup správce k instanci serveru SQL Server za účelem získání hodnoty hash hesla. Pokud jsou dodrženy doporučené postupy, běžným uživatelům nelze načíst hodnotu hash hesla. Proto jsou by nemohl zneužití nedostatek kryptografických soli variantu.
Jak potíže obejít
Pro SQL Server 2005 Service Pack 2 nebo novější můžete spustit následující skript obnovíte kryptografické sůl přihlašovací účet správce systému. Ke spuštění skriptu, je musíte být přihlášeni s účtem, který má oprávnění k řízení SERVER nebo účet musí být členem role serveru sysadmin. 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
Pro SQL Server 2008, můžete spuštěním následujícího skriptu. Ke spuštění skriptu, je musíte být přihlášeni s účtem, který má oprávnění k řízení SERVER nebo účet musí být členem role serveru sysadmin. Nastavení
-- 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. Ke spuštění skriptu, je musíte být přihlášeni s účtem, který má oprávnění k řízení SERVER nebo účet musí být členem role serveru sysadmin.
-------------------------------------------------------------------------- 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
Prohlášení
Tento problém bude vyřešen v budoucí aktualizace service Pack pro SQL Server 2005, SQL Server 2008 a v budoucnu verzích serveru SQL Server.
Další informace
Společnost Microsoft thanks následující pro spolupráci při ochraně zákazníků:
SQL2005 sql2008

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 980671 - Poslední kontrola: 03/02/2010 23:15:17 - Revize: 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 KbMtcs
Váš názor
le="display: none; " src="https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">=1&t=">