Как указать надежный пароль SA при установке SQL Server 2000 Desktop Engine (MSDE 2000)

Переводы статьи Переводы статьи
Код статьи: 814463
Развернуть все | Свернуть все

Аннотация

В данной статье описывается задание со строгим SA При установке SQL Server Desktop Engine (также известен пароль как MSDE 2000).

Дополнительная информация

Необходимо назначить надежный пароль для SA учетная запись во время установки экземпляра SQL Server 2000 Desktop Engine (MSDE 2000). Это необходимо сделать, даже если с помощью экземпляра Режим проверки подлинности Windows. В SA учетная запись не может использоваться любой пользователь, при работе в Windows Режим проверки подлинности; Однако экземпляр позже перехода в смешанном режиме и SA учетная запись становится активной имени входа.

Если SA учетная запись имеет значение null, пустой, простой или известный пароль при переключения экземпляра MSDE 2000 в смешанном режиме, могут затем быть экземпляр MSDE доступ неавторизованных пользователей. В SA учетная запись не может быть удален, и он всегда должен быть защищен с помощью надежный пароль для ограничения возможностей несанкционированного доступа. Любой пользователь, получивший доступ к экземпляру MSDE 2000 с помощью SA учетная запись, может получить полный контроль на этом экземпляре MSDE, и Имеется возможность доступа к любым ресурсам, имеет учетную запись службы MSDE. По по умолчанию является учетная запись службы MSDE «Локальный компьютер» встроенные учетная запись безопасности.

Дополнительные сведения о надежных паролях следующий веб-узел корпорации Майкрософт:

Безопасность Правила

Код пользовательского приложения можно использовать для установки MSDE. Код приложения необходимо использовать один из следующих способов для параметра SA пароль:
  • Если пользователь является установка MSDE в смешанном режиме и Переход на использование SA учетная запись, надежный пароль для запроса SA учетная запись пользователя. Используйте этот пароль в MSDE Программа установки.
  • Если SA учетная запись не используется, генерации случайных строк и затем передать этот Строка, как SA пароль для установки MSDE.

Для повышения безопасности необходимо не жестко SA пароль, назначенный при установке параметра в файле Setup.ini или как в командной строке перейдите в файл команд (.cmd) или включить его в качестве свойство в файле MSI или любым другим способом, который может предоставить пароль как Обычный текст. Пароль должен быть создана динамически приложением программы установки во время выполнения и должны быть переданы в процесс установки MSDE одним из следующих способов:
  • Запустите программу setup.exe MSDE из кода программы установки приложения и Укажите значение SAPWD в аргументах.

    Например запустите программу установки с помощью.NET Framework Процесс класс, а затем укажите SAPWD в Изменение панели аргументы свойство или запустить процесс установки с помощью Win32 CreateProcess функции, а затем укажите SAPWD в lpCommandLine параметр.


    Для получения дополнительных сведений о SAPWD командной строки параметр, щелкните следующий номер статьи базы знаний Майкрософт:
    810826Новые параметры при запуске установки пакета обновления 2 SP2 MSDE
  • Настраиваемых действий для передачи надежный пароль при вас с помощью модулей слияния MSDE в пользовательском установщика Windows Программа установки.

Примечание Нельзя установить пароль для SA учетная запись во время установки MSDE 2000 с помощью интерфейса Windows Режим проверки подлинности. В этом случае необходимо задать пароль после процедура установки завершается. Корпорация Майкрософт настоятельно рекомендует использовать последнюю версию службы пакет для установки MSDE 2000.

Метод, корпорация Майкрософт рекомендует используется для генерации случайного пароля является использование Шифрования Функции интерфейса API, такие как:
  • CryptAcquireContext
  • CryptGenRandom
  • CryptCreateHash
  • CryptHashData
При использовании машинного кода, с помощью CryptReleaseContext.

При использовании управляемого кода, с помощью System.Security.Cryptography.RNGCryptoServiceProvider Чтобы получить случайное закодированную строку и затем хэш-значение, возвращается с помощью ComputeHash метод System.Security.Cryptography.SHA1 класс. Случайная строка должна быть переменной длины, между 7 до 20 символов.

Если вы забыли SA пароль, или вы не знаете, какое SA пароль — экземпляр преобразуется в смешанном режиме член sysadmin можно сбросить фиксированной серверной роли SA пароль, не зная старого пароля. По умолчанию все Пользователи, являющиеся членами локальной группы администраторов являются членами sysadmin роль. Члены sysadmin роли можно изменить экземпляр MSDE в режиме проверки подлинности Windows в смешанном режиме или наоборот и могут быть изменены SA пароль. Следовательно, по соображениям безопасности рекомендуется удалить Группа администраторов sysadmin роль.

Для получения дополнительных сведений о группе «Администраторы» могут быть удалить из роли, щелкните следующий номер статьи базы знаний Майкрософт:
263712Как снизить администраторы Windows NT в администрировании кластеризованного экземпляра SQL Server


Для получения дополнительных сведений об изменении пароля для учетной записи sa учетная запись, щелкните следующий номер статьи базы знаний Майкрософт:
322336Как проверить и изменить пароль системного администратора MSDE или SQL Server 2005, экспресс-выпуск

Примечание Методы для изменения SA пароль во время установки, описанные в этой статье относятся только к новые установки MSDE.

В приведенных ниже используется образец исходного кода для генерации случайного SA пароль, а затем начать установку MSDE.

С помощью Microsoft Visual C++.NET

  1. Нажмите кнопку Начало, выберите пункт Все Программы, выберите пункт Microsoft Visual Studio.NET, Выберите пункт Visual Studio.NET инструменты, а затем нажмите кнопкуVisual Studio.NET командной строки.
  2. Откройте программу «Блокнот».
  3. Вставьте следующий код в Блокнот::
    #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. В командной строке введите следующую команду, чтобы Скомпилируйте код:

    CL: strongSA.cpp
  6. В командной строке введите следующую команду для запуска код:

    strongSA.exe

С помощью Microsoft C#.NET

  1. В Visual Studio.NET, создание новых Visual C# консоли Проект приложения.
  2. Вставьте следующий код в файл класса, который содержит функция Main.

    Убедитесь, что код заменяет все существующие код в файле:
    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 Настройка приложения, посетите следующий веб-узел корпорации Майкрософт:

Свойства

Код статьи: 814463 - Последний отзыв: 14 июня 2011 г. - Revision: 4.0
Ключевые слова: 
kbsetup kbsecurity kblogin kbauthentication kbsample kbguidelines kbcode kbinfo kbmt KB814463 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:814463
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com