Comment spécifier un mot de passe SA fort lorsque vous installez SQL Server 2000 Desktop Engine (MSDE 2000)

Traductions disponibles Traductions disponibles
Numéro d'article: 814463 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

Cet article explique comment spécifier un mot de passe sa fort lorsque vous installer SQL Server Desktop Engine (MSDE 2000).

Plus d'informations

Vous devez affecter un mot de passe fort dans le compte « sa » lors de l'installation de toute instance de SQL Server 2000 Desktop Engine (MSDE 2000). Vous devez le faire même si l'instance utilise le mode d'authentification Windows. Activée le compte sa ne peut pas être utilisé par n'importe quel utilisateur lorsque exécute en mode d'authentification Windows ; toutefois, l'instance peut par la suite être place en mode mixte et le compte sa est une connexion active.

Si le compte sa est un null, mot de vide, simple ou bien connu passe quand une instance de MSDE 2000 est remises en mode mixte, l'instance MSDE peut ensuite être accédé par les utilisateurs non autorisés. Le compte sa ne peut pas être supprimé, et il doit toujours être protégé par un mot de passe fort afin de limiter l'accès non autorisé. Tous les utilisateurs qui réussit à accéder à une instance de MSDE 2000 à l'aide du compte « sa » , peut prendre le contrôle total sur cette instance de MSDE et ont la possibilité d'accéder aux ressources dont le compte du service de MSDE. Par défaut, le compte de service MSDE est le compte de sécurité intégrées LocalSystem .

Pour plus d'informations sur les mots de passe forts, reportez-vous au site de Web Microsoft suivant :

Security Rules

Vous pouvez utiliser code d'application personnalisée pour installer MSDE. Le code d'application doit utiliser une des deux méthodes suivantes pour définir le mot de passe sa :
  • Si l'utilisateur est apprêtent à paramétrer MSDE en mode mixte et est à utiliser le compte sa , demander un mot de passe fort pour le compte « sa » de l'utilisateur. Utilisez ce mot de passe dans MSDE programme d'installation.
  • Si le compte sa n'est pas utilisé, générer une chaîne aléatoire et puis transmettre cette chaîne comme le mot de passe sa à l'installation MSDE.

Pour améliorer la sécurité, vous devez non codé code mot de passe sa affecté au programme d'installation sous la forme d'un paramètre dans un fichier Setup.ini ou sous la forme une invite de commande basculer dans un fichier de commandes (.cmd) ou inclure il comme une propriété dans un fichier MSI ou dans une autre manière peut exposer le mot de passe en texte brut. Le mot de passe doit dynamiquement générée par un programme d'installation application au moment de l'exécution, et il doit être transmis au processus d'installation de MSDE en une des manières suivantes :
  • Exécutez le setup.exe MSDE à partir du code de configuration de l'application et spécifiez une valeur SAPWD dans les arguments.

    Par exemple, exécutez l'installation en utilisant la classe .NET Framework, processus et spécifiez SAPWD dans la propriété ProcessStartInfo arguments , ou exécutez l'installation en utilisant la fonction Win32 CreateProcess , puis puis spécifiez SAPWD dans le paramètre lpCommandLine .


    Pour plus d'informations sur le paramètre de ligne de commande SAPWD, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
    810826 Nouveaux commutateurs dans le programme d'installation de MSDE Service Pack 2
  • Effectuer une action personnalisée à transmettre un mot de passe fort lorsque vous utilisez les modules de fusion MSDE dans une installation Windows_Installer-based personnalisée.

note Vous ne pouvez pas définir un mot de passe pour le compte sa au cours de l'installation MSDE 2000 à l'aide de Windows en mode d'authentification. Dans ce scénario, vous devez définir le mot de passe une fois l'installation terminée. Microsoft recommande fortement d'utiliser le dernier service pack pour installer MSDE 2000.

La méthode que Microsoft recommande de que vous utiliser pour générer un mot de passe aléatoire consiste à utiliser les fonctions de chiffrement API telles que :
  • CryptAcquireContext
  • CryptGenRandom
  • CryptCreateHash
  • CryptHashData
Si vous utilisez le code natif, utilisez CryptReleaseContext .

Si vous utilisez du code managé, System.Security.Cryptography.RNGCryptoServiceProvider permet d'obtenir une chaîne codée aléatoire et puis hachage la valeur qui est renvoyée à l'aide de la méthode ComputeHash de la classe System.Security.Cryptography.SHA1 . La chaîne aléatoire doit être de longueur variable entre 7 et 20 caractères.

Si vous oubliez le mot de passe sa , ou vous ne connaissez pas ce que le mot de passe sa est et l'instance est convertie en mode mixte, un membre du rôle serveur fixe sysadmin peut réinitialiser le mot de passe sa sans connaître le mot de passe précédent. Par défaut, tous les utilisateurs membres du groupe Administrateurs local sont membres du rôle sysadmin . Les membres du rôle sysadmin peuvent modifier une instance MSDE à partir de mode d'authentification Windows en mode mixte ou vice versa et peuvent modifier le mot de passe sa . Par conséquent, pour des raisons de sécurité, vous souhaiterez peut-être supprimer le groupe Administrateurs de rôle sysadmin .

Pour plus d'informations sur comment le groupe Administrateurs peut être supprimé du rôle sysadmin, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
263712 Comment faire pour réduire les administrateurs Windows NT d'administrer une instance de SQL Server en cluster


Pour plus d'informations sur modification le mot de passe pour la sa compte, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft. :
322336 Comment vérifier et modifier le mot de passe d'administrateur système dans MSDE ou SQL Server 2005 Express Edition

note Les méthodes pour changer le mot de passe sa pendant l'installation répertoriée dans cet article s'appliquent uniquement aux nouvelles installations de MSDE.

Les étapes suivantes utiliser des exemples de code source pour générer un mot de passe sa aléatoire et puis démarrez une installation MSDE.

L'aide de Microsoft Visual C++ .NET

  1. Cliquez sur Démarrer , pointez sur Tous les programmes , pointez sur Visual Studio .NET , pointez sur Outils de Visual Studio .NET et puis cliquez sur invite de commande Visual Studio .NET .
  2. Ouvrez le bloc-notes.
  3. Collez le code suivant dans le Bloc-notes: # 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. Enregistrez le fichier en tant que StrongSA.cpp .
  5. À l'invite de commandes, tapez la commande suivante pour compiler le code :

    strongSA.cpp CL
  6. À l'invite de commandes, tapez la commande suivante pour exécuter le code :

    strongSA.exe

L'aide de Microsoft C# .NET

  1. Dans Visual Studio .NET, créer une console Visual c# Visual nouveau projet d'application.
  2. Collez le code suivant dans le fichier de classe qui contient la fonction main.

    Vérifiez que le code remplace tout le code existant dans le 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;
    		}  
    	}
    }
    
    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. Appuyez sur F5 pour compiler et exécuter le programme.

Références

Pour plus savoir comment incorporer MSDE dans une configuration d'application personnalisée, reportez-vous au adresse site Web de Microsoft à l'adresse suivante :
Embedding MSDE 2000 Setup in the Setup of Custom Applications

Propriétés

Numéro d'article: 814463 - Dernière mise à jour: jeudi 22 mars 2007 - Version: 1.5
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
Mots-clés : 
kbmt kbsetup kbsecurity kblogin kbauthentication kbsample kbguidelines kbcode kbinfo KB814463 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 814463
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Envoyer des commentaires

 

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