أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

تصحيح نقص التباين salt التشفير على SQL Server sa التجزئة تسجيل الدخول

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية980671
الأعراض
في Microsoft SQL Server 2005 وفي الإصدارات الأحدث مثيلات متعددة من SQL Server استخدام نفس الملح التشفير لتسجيل الدخول sa المضمنة. لأن الملح نفسها لكافة عمليات التثبيت, فرض أنواع معينة من الضارة الهجمات تصبح عملياً إذا المهاجم يمكن أولاً الوصول إلى كلمة المرور المجزأة. تعتبر كلمات المرور المجزأة ومتوفرة فقط لمسؤولي SQL Server.
السبب
في SQL Server 2005 وفي الإصدارات الأحدث يتم إنشاء التشفير الملح مع تسجيل دخول sa. إذا تم تمكين CHECK_POLICY الملح التشفير ويتم إعادة لا إنشاء عندما يقوم المستخدم بتغيير كلمة المرور إلى تكون متوافقة مع محفوظات كلمة المرور. بشكل افتراضي، يتم تمكين CHECK_POLICY لـ SQL Server 2005. عند تعطيل CHECK_POLICY التناسق salt لم تعد تحتاج لتسجيل الدخول sa و ويتم إعادة إنشاء الملح جديد عند التغيير التالي لكلمة المرور.

على الرغم من أن يكون هذا صحيحاً لكافة الحسابات يتم إنشاء حساب تسجيل الدخول sa أثناء عملية الإنشاء. لذلك، يتم إنشاؤه أثناء عملية إنشاء نفس الملح الخاصة به والتي تمت صيانتها من أثناء وجود مثيل من SQL Server الإعداد.

ملاحظة تؤثر هذه المشكلة أيضًا على تسجيلات الدخول الافتراضية التي يتم استخدامها بواسطة ميزة نهج إدارة المستند إلى SQL Server 2008 ولكن تقليل المخاطر. افتراضياً، يتم تعطيل عمليات تسجيل الدخول هذه.

عوامل تخفيف مشاكل

حتى لو بقيت نفس الملح التشفير عبر عمليات تثبيت متعددة ، لا يتم كافية بخرق تجزئة كلمة مرور. لاستغلال هذا السلوك سيضطر المستخدم الضار حق الوصول الإداري إلى مثيل SQL Server للحصول على التجزئة كلمة المرور. إذا تم اتباع أفضل الممارسات لن تكون قادراً على استرداد تجزئة كلمة مرور المستخدمين العادية. لذلك، قد يكونوا غير قادر على استغلال نقص التباين salt التشفير.
الحل البديل
يمكن تشغيل البرنامج النصي التالي لإعادة تعيين الملح التشفير من حساب sa تسجيل الدخول لـ SQL Server 2005 المزود بحزمة الخدمة SP2 أو الإصدارات الأحدث. لتشغيل البرنامج النصي يجب تسجيل باستخدام حساب لديه أذونات CONTROL الملقم أو أن تكون عضواً دور مسؤول النظام ملقم الحساب. 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
لـ SQL Server 2008, يمكنك تشغيل البرنامج النصي التالي. لتشغيل البرنامج النصي يجب تسجيل باستخدام حساب لديه أذونات CONTROL الملقم أو أن تكون عضواً دور مسؤول النظام ملقم الحساب. تعيين
-- 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. لتشغيل البرنامج النصي يجب تسجيل باستخدام حساب لديه أذونات CONTROL الملقم أو أن تكون عضواً دور مسؤول النظام ملقم الحساب.
-------------------------------------------------------------------------- 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
تصريح
يتم تناول هذه المشكلة في حزم الخدمات المستقبلية لـ SQL Server 2005 و SQL Server 2008 و في المستقبل إصدارات SQL Server.
معلومات أخرى
Microsoft thanks التالية للعمل معنا للمساعدة على حماية العملاء:
sql2005 sql2008

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 980671 - آخر مراجعة: 03/02/2010 23:15:17 - المراجعة: 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 KbMtar
تعليقات
src="https://c.microsoft.com/ms.js"> var Route = "76500"; var Ctrl = ""; document.write(" /html>