Come specificare una password SA complessa quando si installa SQL Server 2000 Desktop Engine (MSDE 2000)

Traduzione articoli Traduzione articoli
Identificativo articolo: 814463 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

In questo articolo viene descritto come specificare una password sa complessa quando si installa SQL Server Desktop Engine (MSDE 2000).

Informazioni

╚ necessario assegnare una password complessa all'account dell'amministratore di sistema durante l'installazione di qualsiasi istanza di SQL Server 2000 Desktop Engine (MSDE 2000). ╚ necessario farlo anche se l'istanza utilizza l'autenticazione di Windows. L'account sa non pu˛ essere utilizzato da qualsiasi utente durante l'esecuzione in modalitÓ autenticazione di Windows; tuttavia, l'istanza in un secondo momento Ŕ possibile passare a modalitÓ mista e l'account sa diventa un account di accesso attivo.

Se l'account dell'amministratore di sistema dispone di una password vuota, semplice o note di null, quando viene attivata un'istanza di MSDE 2000 a modalitÓ mista, l'istanza di MSDE Ŕ quindi possibile accedere da utenti non autorizzati. Impossibile eliminare l'account sa ed deve essere protetto sempre con una password complessa consente di limitare l'accesso non autorizzato. Qualsiasi utente che ottiene l'accesso a un'istanza di MSDE 2000 utilizzando l'account dell'amministratore di sistema , potrebbe assumere il pieno controllo su tale istanza di MSDE e hanno la possibilitÓ di accedere alle risorse con l'account del servizio MSDE. Per impostazione predefinita, l'account del servizio MSDE Ŕ l'account di protezione incorporate del sistema locale .

Per ulteriori informazioni sulle password complesse, visitare il sito di Web di Microsoft:

Security Rules

╚ possibile utilizzare codice di applicazione personalizzata per installare MSDE. Il codice dell'applicazione deve utilizzare uno dei due metodi descritti di seguito per impostare la password sa :
  • Se l'utente Ŕ intenzione di impostare MSDE in modalitÓ mista ed Ŕ prevede di utilizzare l'account sa , Ŕ possibile richiedere una password complessa per l'account sa da parte dell'utente. Utilizzare la password in MSDE il programma di installazione.
  • Se non viene utilizzato l'account sa , generare una stringa casuale e quindi passare tale stringa come la password dell'amministratore di sistema all'installazione di MSDE.

Per migliorare la protezione, Ŕ necessario non livello di codice la password dell'amministratore di sistema assegnata al programma di installazione come un parametro in un file Setup.ini o come un prompt dei comandi passare in un file di comando (cmd) oppure includerlo come una proprietÓ in un file MSI o in altro modo possibile esporre la password come testo normale. La password dovrÓ essere generata in modo dinamico da un programma di installazione programma in fase di esecuzione e deve essere passato al processo di installazione MSDE in uno dei seguenti modi:
  • Eseguire il file setup.exe MSDE da codice di programma di installazione dell'applicazione e specificare un valore SAPWD negli argomenti.

    Ad esempio, eseguire l'installazione utilizzando la classe .NET Framework di processo e quindi specificare SAPWD nella proprietÓ Argomenti ProcessStartInfo o eseguire l'installazione utilizzando la funzione Win32 CreateProcess e specificare quindi SAPWD nel parametro lpCommandLine .


    Per ulteriori informazioni sul parametro SAPWD riga di comando, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
    810826Nuove opzioni di installazione di MSDE Service Pack 2
  • Eseguire un azione personalizzata per passare una password complessa quando si utilizzano i moduli unione MSDE in un'installazione Windows_Installer-based personalizzata.

Nota Non Ŕ possibile impostare una password per l'account sa durante l'installazione di MSDE 2000 utilizzando autenticazione. In questo scenario, Ŕ necessario impostare la password dopo l'installazione. Si consiglia di utilizzare la versione pi¨ recente del service pack per installare MSDE 2000.

Il metodo che Microsoft consiglia di che utilizzare per generare una password casuale si consiste nell'utilizzare le funzioni di crittografia API, ad esempio:
  • CryptAcquireContext
  • CryptGenRandom
  • CryptCreateHash
  • CryptHashData
Se si utilizza codice nativo, Ŕ possibile utilizzare CryptReleaseContext .

Se si utilizza codice gestito, utilizzare System.Security.Cryptography.RNGCryptoServiceProvider per ottenere una stringa codificata casuale e hash quindi il valore che viene restituito utilizzando il metodo ComputeHash della classe System.Security.Cryptography.SHA1 . La stringa casuale deve essere di lunghezza variabile, tra 7 e 20 caratteri.

Se si dimentica la password dell'amministratore di sistema o non si conosce la password sa e l'istanza viene convertito in modalitÓ mista, Ŕ possibile che un membro del ruolo server fisso sysadmin reimpostare la password di sa senza conoscere la password precedente. Per impostazione predefinita, tutti gli utenti che appartengono al gruppo Administrators locale sono membri del ruolo sysadmin . I membri del ruolo sysadmin possono modificare un'istanza di MSDE da autenticazione di Windows a modalitÓ mista o viceversa e possono modificare la password dell'amministratore di sistema . Di conseguenza, per motivi di protezione, potrebbe essere da rimuovere il gruppo Administrators dal ruolo sysadmin .

Per ulteriori informazioni sui come al gruppo Administrators pu˛ essere rimossi dal ruolo sysadmin, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
263712Come impedire agli amministratori di Windows NT di amministrare un'istanza cluster di SQL Server


Per ulteriori informazioni sulla modifica della password per la sa account, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
322336Come verificare e modificare la password di amministratore di sistema in MSDE o SQL Server 2005 Express Edition

Nota I metodi per modificare la password dell'amministratore di sistema durante l'installazione elencati in questo articolo si applicano solo a nuove installazioni di MSDE.

Alla seguente procedura utilizza esempi di codice sorgente per generare una password sa casuale e quindi avviarla un'installazione di MSDE.

Utilizzo di Microsoft Visual c ++ .NET

  1. Fare clic su Start , scegliere tutti i programmi , scegliere Microsoft Visual Studio. NET , Visual Studio .NET Tools , quindi prompt dei comandi di Visual Studio. NET .
  2. Aprire il blocco note.
  3. Incollare il codice seguente nel blocco note:: # 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. Salvare il file come StrongSA.cpp .
  5. Al prompt dei comandi, digitare il seguente comando per compilare il codice:

    strongSA.cpp CL
  6. Al prompt dei comandi, digitare il seguente comando per eseguire il codice:

    strongSA.exe

Utilizzo di Microsoft C# .NET

  1. In Visual Studio. NET, creare una nuovo Visual C# Console di progetto di applicazione.
  2. Incollare il codice seguente nel file di classe che contiene la funzione Main.

    Verificare che il codice sostituisce tutto il codice esistente il sistema 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. Premere F5 per compilare ed eseguire il programma.

Riferimenti

Per ulteriori informazioni su come incorporare MSDE in un'installazione personalizzata dell'applicazione, visitare il sito di Web di Microsoft:
Embedding MSDE 2000 Setup in the Setup of Custom Applications

ProprietÓ

Identificativo articolo: 814463 - Ultima modifica: giovedý 22 marzo 2007 - Revisione: 1.5
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
Chiavi:á
kbmt kbsetup kbsecurity kblogin kbauthentication kbsample kbguidelines kbcode kbinfo KB814463 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 814463
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

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