Jak určit silné heslo správce systému při instalaci aktualizace SQL Server 2000 Desktop Engine (MSDE 2000)

Překlady článku Překlady článku
ID článku: 814463
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Tento článek popisuje, jak určit silná přidružení zabezpečení heslo při instalaci aplikace SQL Server Desktop Engine (také známé jako MSDE 2000).

Další informace

Silná hesla musíte přiřadit přidružení zabezpečení účet během instalace libovolné instance serveru SQL Server 2000 Desktop Engine (MSDE 2000). Je to nutné i v případě, že je pomocí instance Režim ověřování systému Windows. Na přidružení zabezpečení účet nelze použít každý uživatel při spuštění v systému Windows Režim ověřování; později však přepnul instanci na kombinovaný režim a přidružení zabezpečení účet se stane aktivní přihlášení.

Pokud přidružení zabezpečení účet má hodnotu null, prázdné, jednoduché nebo známé heslo při instance služby MSDE 2000 se přepne na kombinovaném režimu, může být pak instanci služby MSDE přístup neoprávnění uživatelé. Na přidružení zabezpečení účet nelze vynechat a musí vždy chráněni s silné heslo můžete omezit před neoprávněným přístupem. Každý uživatel, který získá přístup k instanci MSDE 2000 pomocí přidružení zabezpečení účet, může získat úplné řízení pro danou instanci služby MSDE, a mají možnost přístup k prostředkům, které má účet služby MSDE. Podle výchozí účet služby MSDE je LocalSystem vestavěné účet zabezpečení.

Další informace o silných heslech naleznete na Následující Web společnosti Microsoft:

Zabezpečení Pravidla

Kód vlastní aplikace můžete nainstalovat MSDE. Kód aplikace musí používat jeden z následujících dvou metod pro nastavení přidružení zabezpečení heslo:
  • Pokud uživatel nastavovat MSDE v kombinovaném režimu a je Přechod na použití přidružení zabezpečení obchodní vztah, požadovat silné heslo přidružení zabezpečení účet uživatele. Použít toto heslo v MSDE Instalační program.
  • Pokud přidružení zabezpečení není-li použit účet, vygenerovat náhodný řetězec a průchod řetězec jako přidružení zabezpečení heslo, které instalační program služby MSDE.

Chcete-li zvýšit zabezpečení, měli není pevný kód přidružení zabezpečení heslo přiřazené při instalaci jako parametr v souboru Setup.ini, nebo jako příkazový řádek v souboru příkazu (CMD) nebo vložit jako Vlastnost v souboru MSI nebo jakýmkoli jiným způsobem, který může vystavit jako heslo prostý text. Heslo by mělo být dynamicky generované aplikací Instalační program při běhu a je proto předány proces instalace služby MSDE jedním z následujících způsobů:
  • Spusťte soubor setup.exe MSDE z instalační kód aplikace, a Určete hodnotu SAPWD argumentů.

    Například spustit instalaci pomocí pomocí.NET Framework Proces třídy a určete SAPWD v Argumenty ProcessStartInfo Vlastnost nebo spustit instalační program pomocí Win32 CreateProcess funkce a potom určete SAPWD v lpCommandLine parametr.


    Další informace o příkazovém řádku SAPWD parametr, klepněte na následující číslo článku databáze Microsoft Knowledge Base:
    810826Nové přepínače v instalační program aktualizace MSDE Service Pack 2
  • Provést vlastní akci předat silného hesla Pokud jste používat moduly MSDE korespondence ve vlastní založené na Instalační služba Windows Installer Instalační program.

Poznámka: Nelze nastavit heslo pro přidružení zabezpečení účet během instalace služby MSDE 2000 pomocí systému Windows Režim ověřování. V tomto případě je nutné nastavit heslo po dokončení instalace. Společnost Microsoft důrazně doporučuje používat nejnovější Pack nainstalovat MSDE 2000.

Způsob, který vám doporučuje společnost Microsoft Generovat náhodnou pomocí hesla je použít Crypto Rozhraní API funkce jako například:
  • Příkaz CryptAcquireContext
  • CryptGenRandom
  • CryptCreateHash
  • CryptHashData
Pokud používáte nativní kód, použijte CryptReleaseContext.

Používáte-li spravovaný kód, použití System.Security.Cryptography.RNGCryptoServiceProvider získání náhodný řetězec kódování a potom hodnoty hash, pomocí vrácena ComputeHash Metoda System.Security.Cryptography.SHA1 Třída. Musí být náhodný řetězec proměnné délky, mezi 7 a 20 znaků.

Pokud zapomenete přidružení zabezpečení heslo, nebo nebude vědět, co přidružení zabezpečení heslo je a instance je převeden na kombinovaný režim člen sysadmin pevné role serveru můžete obnovit přidružení zabezpečení heslo bez znalosti předchozí heslo. Ve výchozím nastavení všechny Uživatelé, kteří jsou členy místní skupiny Administrators jsou členy sysadmin role. Členové sysadmin role můžete změnit instanci služby MSDE z režim ověřování systému Windows Kombinovaný režim nebo naopak a můžete změnit přidružení zabezpečení heslo. Proto z bezpečnostních důvodů můžete chtít odebrat Skupina Administrators z sysadmin role.

Další informace o skupině Administrators lze odebrán z sysadmin role, klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
263712Jak bránit správci systému Windows NT ze správy clusteru instance serveru SQL Server


Další informace o změně hesla pro přidružení zabezpečení účet, klepněte na následující číslo článku databáze Microsoft Knowledge Base:
322336Jak ověřit a změnit hesla správce systému na MSDE nebo SQL Server 2005 Express Edition

Poznámka: Metody pro změnu přidružení zabezpečení heslo během instalace, které jsou uvedeny v tomto článku platí pouze pro nové instalace služby MSDE.

Následující postup použijte ukázkový zdrojový kód Generovat náhodnou přidružení zabezpečení heslo a poté spusťte instalaci MSDE.

Pomocí aplikace Microsoft Visual C++.NET

  1. Klepněte na tlačítko Spustit, přejděte na příkaz Všechny Programy, přejděte na příkaz Microsoft Visual Studio.NET, přejděte na Visual Studio.SÍŤOVÉ nástrojea klepněte na tlačítkoVisual Studio.NET příkazového řádku.
  2. Spusťte program Poznámkový blok.
  3. V programu Poznámkový blok zkopírujte následující kód::
    #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. Uložit soubor jako StrongSA.cpp.
  5. Na příkazovém řádku zadejte následující příkaz kompilace kódu:

    cl strongSA.cpp
  6. Na příkazovém řádku zadejte následující příkaz ke spuštění kód:

    strongSA.exe

Pomocí aplikace Microsoft C#.NET

  1. V aplikaci Visual Studio.NETTO, vytvoření nové Visual C# konzoly Aplikace project.
  2. Vložte následující kód do souboru třídy, která obsahuje Hlavní funkce.

    Ověřte, že kód nahradí všechny existující kód v souboru:
    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. Stisknutím klávesy F5 kompilovat a potom spusťte program.

Odkazy

Další informace o tom, jak vložit vlastní MSDE nastavení aplikace, navštivte následující Web společnosti Microsoft:
Vkládání Instalace služby MSDE 2000 v nastavení vlastních aplikací

Vlastnosti

ID článku: 814463 - Poslední aktualizace: 20. května 2011 - Revize: 3.0
Klíčová slova: 
kbsetup kbsecurity kblogin kbauthentication kbsample kbguidelines kbcode kbinfo kbmt KB814463 KbMtcs
Strojově přeložený článek
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:814463
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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