كيفية تعيين كلمة مرور SA قوية عند تثبيت SQL Server 2000 Desktop Engine (MSDE 2000)

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

اضغط هنا لرابط المقالة باللغة الانجليزية814463
إخلاء مسؤولية من محتوى قديم في قاعدة المعارف
عن تقديم الدعم التقني لهاو لذلك تظهر هذه المقالة كما هي و لن يتم تحديثها Microsoft تمت كتابة هذه المقالة بخصوص منتجات توقفت
الموجز
توضح هذه المقالة كيفية تحديد كلمة مرور sa معقدة عند تثبيت SQL Server Desktop Engine (يعرف أيضاً MSDE 2000).
معلومات أخرى
يجب تعيين كلمة مرور قوية حساب sa أثناء تثبيت أي مثيل SQL Server 2000 Desktop Engine (MSDE 2000). يجب إجراء ذلك حتى إذا كان المثيل تستخدم وضع مصادقة Windows. لا يمكن استخدام حساب sa قبل أي مستخدم عند التشغيل في وضع مصادقة Windows; ومع ذلك، يمكن تبديلها المثيل فيما بعد إلى "وضع مختلطة" ويصبح حساب sa دخول نشط.

إذا كان حساب sa كلمة مرور فارغة ، فارغة أو بسيط أو معروفة عند التبديل مثيل MSDE 2000 إلى "وضع مختلطة" ، يمكن الوصول مثيل MSDE ثم بواسطة المستخدمين غير المخولين. إسقاط حساب sa ثم يجب حماية دوماً باستخدام كلمة مرور قوية للمساعدة على تقييد الوصول غير المصرح به. قد أي المستخدم الذي بواسطته يصل إلى مثيل MSDE 2000 باستخدام حساب sa حق التحكم الكامل على ذلك المثيل من MSDE ثم تملك القدرة على الوصول إلى أية موارد لدى حساب خدمة MSDE. حساب خدمة MSDE بشكل افتراضي حساب الأمان المضمنة LocalSystem.

لمزيد من المعلومات حول كلمات مرور قوية قم بزيارة موقع Microsoft التالي على الويب:

Security Rules

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

للمساعدة في تحسين الأمان يجب غير الثابت رمز المرور sa المعينة في الإعداد كمعلمة في ملف Setup.ini أو موجه الأوامر التبديل في ملف أوامر (.cmd) أو تتضمن الخاصية في ملف MSI أو بأي طريقة أخرى يمكن كشف كلمة المرور كنص عادي. كلمة المرور يجب أن يكون إنشاء ديناميكي بواسطة برنامج إعداد تطبيق في وقت التشغيل ومن أنه يجب أن يمرر إلى عملية الإعداد MSDE بإحدى الطرق التالية:
  • تشغيل setup.exe MSDE من التعليمات البرمجية إعداد التطبيق ثم حدد قيمة SAPWD في الوسائط.

    على سبيل المثال، تشغيل برنامج الإعداد عن طريق استخدام فئة.NET Framework معالجة ومن ثم تحديد SAPWD في الخاصية وسيطات ProcessStartInfo أو تشغيل برنامج الإعداد باستخدام الدالة Win32 CreateProcess وحدد SAPWD في المعلمة lpCommandLine.


    لمزيد من المعلومات حول معلمة سطر أوامر SAPWD انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
    810826رموز التبديل الجديدة في برنامج MSDE إعداد Service Pack 2
  • تنفيذ إجراء مخصص لتمرير كلمة مرور معقدة عند استخدام الوحدات النمطية دمج MSDE في إعداد مخصص يستند إلى Windows Installer.

ملاحظة لا يمكن تعيين كلمة مرور حساب sa أثناء الإعداد MSDE 2000 باستخدام Windows "وضع مصادقة". في هذا السيناريو، يجب عليك تعيين كلمة المرور بعد اكتمال الإعداد. توصي Microsoft بشدة استخدام أحدث إصدار لحزمة الخدمة تثبيت MSDE 2000.

تعتبر الطريقة توصي Microsoft من استخدام لإنشاء كلمة مرور عشوائي استخدام دالات تشفير API مثل:
  • CryptAcquireContext
  • CryptGenRandom
  • CryptCreateHash
  • CryptHashData
في حالة استخدام تعليمة برمجية أصلية استخدام CryptReleaseContext.

في حالة استخدام تعليمات برمجية تمت إدارتها استخدم System.Security.Cryptography.RNGCryptoServiceProvider للحصول على سلسلة مرمزة عشوائي ثم ثم تجزئة القيمة التي تم إرجاعها بواسطة استخدام الأسلوب ComputeHash فئة System.Security.Cryptography.SHA1. يجب أن تكون سلسلة عشوائية من متغير الطول بين 7 و 20 حرف.

إذا نسيت كلمة المرور ' sa ' ، أو كنت لا تعرف ما كلمة المرور sa تحويل المثيل إلى "وضع مختلطة" ، يمكن عضواً دور مسؤول النظام الملقم ثابت إعادة تعيين كلمة المرور sa بدون معرفة كلمة المرور السابقة. افتراضياً، تكون كافة المستخدمين الذين هم أعضاء مجموعة "المسؤولين" المحليين أعضاء دور sysadmin. يمكن تغيير مثيل MSDE من وضع مصادقة Windows إلى "وضع مختلطة" أو العكس بالعكس أعضاء دور sysadmin و يمكن تغيير كلمة المرور sa. ومن ثم لأسباب تتعلق بالأمان، قد تحتاج إلى إزالة مجموعة المسؤولين من دور مسؤول النظام.

لمزيد من المعلومات حول كيفية إزالة مجموعة المسؤولين من دور مسؤول النظام انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
263712كيفية impede المسؤولين Windows NT من إدارة مثيل SQL Server متفاوت المسافات


للحصول على مزيد من المعلومات حول تغيير كلمة المرور للحصول sa حساب ، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
322336كيفية التحقق من تغيير كلمة مرور مسؤول النظام في MSDE أو SQL Server 2005 Express Edition

ملاحظة تطبيق الأساليب تغيير كلمة المرور sa أثناء التثبيت المسردة في هذه المقالة فقط على عمليات التثبيت الجديدة MSDE.

الخطوات التالية استخدام نموذج التعليمة البرمجية المصدر لإنشاء كلمة مرور sa عشوائي ثم قم بتشغيل تثبيت MSDE.

باستخدام Microsoft Visual C++ .NET

  1. انقر فوق ابدأ ، وأشر إلى كافة البرامج ، وأشر إلى Microsoft Visual Studio .NET ، أشر إلى أدوات .NET Visual Studio ثم انقر فوق موجه الأوامر .NET Visual Studio.
  2. افتح المفكرة.
  3. قم بلصق التعليمة البرمجية التالية في "المفكرة":: & # pragma
    #pragma once#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers.#define UNICODE#include <stdio.h>#include <windows.h>#include <wincrypt.h>#ifdef UNICODE	#define STRNCPY	wcsncpy#else	#define STRNCPY strncpy#endif#include <atlenc.h>#define SAPWDSWITCH _T("SAPWD=")#define INSTANCENAME _T("INSTANCENAME=MSDETEST")BOOL GenPwd(TCHAR*, int);void DisplayError (DWORD);int main(void){		//Generate random length for password, between 7 and 20 characters.	int nPwdLen = ((rand() % 20) + 7) + 1;	//Extra character for null terminator	TCHAR* pPwd = new TCHAR[nPwdLen];	UINT uRes = 0;	DWORD dwRes = 0;	if (!GenPwd(pPwd, nPwdLen))	{		//Failed to generate a password, log the error and return failure.		dwRes = GetLastError();		DisplayError(dwRes);		return dwRes;	}        STARTUPINFO si;        PROCESS_INFORMATION pi;        ZeroMemory( &si, sizeof(si) );        si.cb = sizeof(si);        ZeroMemory( &pi, sizeof(pi) );	//Allocate a string for the command line.	LPTSTR lpCommand = new TCHAR[nPwdLen + _tcslen(INSTANCENAME) + _tcslen(SAPWDSWITCH) + 2];	_stprintf(lpCommand, _T("%s %s%s"),INSTANCENAME,  SAPWDSWITCH, pPwd);// Specify the complete path of Setup.exe.	if (!CreateProcess(_T("setup.exe"), lpCommand, NULL, NULL, FALSE, 				0, NULL, NULL, &si, &pi))	{		dwRes = GetLastError();		DisplayError(dwRes);	}	return 0;}//Generates a Random string of length nLen - 1.  Buffer ppwd must allocate an extra character for null terminator.//Returns TRUE if successful, FALSE if fails.//Extended error information can be obtained from GetLastError().BOOL GenPwd(TCHAR* ppwd, int nLen){	BOOL bResult = FALSE;	//assume failure	HCRYPTPROV hProv = NULL;	HCRYPTHASH hHash = NULL;		//Storage for random string 4 times longer than the resulting password.	DWORD dwBufSize = nLen*4;	DWORD dwSize = Base64EncodeGetRequiredLength((int)dwBufSize);	LPSTR pEncodedString = NULL;	LPBYTE pRandomBuf = NULL;	TCHAR* pTRandomPwd = NULL;		try	{		pEncodedString = new char[dwSize];		pRandomBuf = new BYTE[dwBufSize];				// Try to acquire context to Crypto provider.		if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_SILENT))		{			if (GetLastError() == NTE_BAD_KEYSET) //Test for non-existent keyset			{				if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_SILENT | CRYPT_NEWKEYSET))					throw(GetLastError());			}			else				throw(GetLastError());		}		//Generate a random sequence.		if (!CryptGenRandom(hProv, dwBufSize, pRandomBuf))		{			throw(GetLastError());		}		//Get a handle to a hash, then hash the random stream.		if (!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash))		{			throw(GetLastError());		}		if (!CryptHashData(hHash, pRandomBuf, dwBufSize, NULL))		{			throw(GetLastError());		}			//Destroy the hash object.		CryptDestroyHash(hHash);		//Release Provider context		CryptReleaseContext(hProv, 0);				//Encode the hash value to base64.		if (!Base64Encode(pRandomBuf, dwBufSize, pEncodedString, (int*) &dwSize, 0))		{			throw(GetLastError());		}			//Determine how many tchars you need to convert string to base64.		int nTchars = (int) strlen(pEncodedString);			pTRandomPwd = new TCHAR[nTchars];	#ifdef UNICODE		if (MultiByteToWideChar(CP_UTF8, 0, pEncodedString, nTchars, pTRandomPwd, nTchars) == 0)		{			throw(GetLastError());		}#else		STRNCPY( pTRandomPwd, pEncodedString, nLen);#endif		//Copy the first x characters of random string to output buffer.		STRNCPY(ppwd, pTRandomPwd, nLen);		//Add null terminator to ppwd string.		ppwd[nLen] = _T('\0');		bResult = TRUE;	}	catch (DWORD)	{		//Set return value to false.		bResult = FALSE;	}	catch (...)	{		//Unknown error, throw. 		throw;	}	//Clean up memory.	if (pRandomBuf)	{		delete pRandomBuf;		pRandomBuf = NULL;	}	if (pEncodedString)	{		delete pEncodedString;		pEncodedString = NULL;	}	if (pTRandomPwd)	{		delete pTRandomPwd;		pTRandomPwd = NULL;	}	return bResult;}void DisplayError (DWORD dwError){	//Resolve the error code to a message string.	LPCTSTR MessageBuffer;	DWORD dwBufferLength = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM,		NULL, // module to get message from (NULL == system)		dwError,		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language.		(LPTSTR) &MessageBuffer,		0,		NULL		);	DWORD dwBytesWritten;	// Output message string on stderr.	WriteFile(		GetStdHandle(STD_ERROR_HANDLE),		MessageBuffer,		dwBufferLength,		&dwBytesWritten,		NULL		);}
  4. قم بحفظ الملف كملف StrongSA.cpp.
  5. في موجه الأوامر، اكتب الأمر التالي ترجمة التعليمات البرمجية:

    strongSA.cpp cl
  6. في موجه الأوامر، اكتب الأمر التالي لتشغيل التعليمات البرمجية:

    strongSA.exe

باستخدام Microsoft C# .NET

  1. في Visual Studio .NET ، إنشاء جديد Visual C# "تحكم" المشروع التطبيق.
  2. قم بلصق التعليمة البرمجية التالية في ملف فئة الذي يحتوي على الدالة الرئيسي.

    تحقق من أن التعليمة البرمجية يحل محل كافة التعليمات البرمجية الموجودة في file:
    using System;using System.Diagnostics;using System.IO;using System.Resources;using Microsoft.Win32;using System.Security.Cryptography;class InstMSDE{	static void Main(string[] args)	{		try		{   						// Generate random password.			RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();			byte[] encodedSeed = new byte[512];			rng.GetBytes(encodedSeed);			SHA1 sha1 = SHA1.Create();			byte[] hashval = sha1.ComputeHash(encodedSeed);			String base64HashVal = Convert.ToBase64String(hashval);			// Trim "=" off the end.			base64HashVal = base64HashVal.TrimEnd('=');							string msdeINI = "setup.ini";			// You have to set startInfo parameters values as appropriate for your installation.			ProcessStartInfo startInfo = new ProcessStartInfo();			// Setup.exe for MSDE sp3.			startInfo.FileName = "setup.exe"; 			// Pass the SA password to the setup program.			startInfo.Arguments = "/settings \"" + msdeINI + "\"" + " SAPWD=" + base64HashVal + " /qr+ "; 			startInfo.WindowStyle = ProcessWindowStyle.Normal;			// Substitute the workdir with complete path of installation folder. 			startInfo.WorkingDirectory = "c:\\Workingdir";							Process.Start(startInfo);								}		catch (Exception e)		{			Console.WriteLine("Unable to execute program due to the following error: " + e.Message);			return;		}  	}}
  3. اضغط F5 ترجمة ثم قم بتشغيل البرنامج.
مراجع
لمزيد من المعلومات حول كيفية تضمين MSDE في إعداد تطبيق مخصص قم بزيارة موقع Microsoft التالي على الويب:

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

خصائص

رقم الموضوع: 814463 - آخر مراجعة: 03/22/2007 11:28:33 - المراجعة: 1.5

Microsoft SQL Server 2000 Desktop Engine (Windows)

  • kbmt kbsetup kbsecurity kblogin kbauthentication kbsample kbguidelines kbcode kbinfo KB814463 KbMtar
تعليقات