Πώς μπορείτε να καθορίσετε έναν ισχυρό κωδικό πρόσβασης 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 είναι τοΤοπικού συστήματοςενσωματωμένη ασφάλεια λογαριασμού.

Για περισσότερες πληροφορίες σχετικά με ισχυρούς κωδικούς πρόσβασης, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:

Ασφάλεια κανόνων

Μπορείτε να χρησιμοποιήσετε την εφαρμογή προσαρμοσμένου κώδικα για να εγκαταστήσετε το MSDE. Ο κώδικας της εφαρμογής πρέπει να χρησιμοποιήσετε μία από τις ακόλουθες δύο μεθόδους για τη ρύθμιση τουSAPASSWORD:
  • Εάν ο χρήστης είναι πρόκειται να εγκαταστήσετε τον MSDE σε μεικτή λειτουργία, και είναι πρόκειται να χρησιμοποιήσετε τοSAλογαριασμός, ζητήστε έναν ισχυρό κωδικό πρόσβασης για τοSAο λογαριασμός του χρήστη. Χρησιμοποιήστε αυτόν τον κωδικό πρόσβασης με τον MSDE εγκατάστασης.
  • Αν υπάρχει ήδη ο φάκελοςSAο λογαριασμός δεν χρησιμοποιείται, δημιουργούν μια τυχαία συμβολοσειρά και στη συνέχεια να περάσει αυτή η συμβολοσειρά ως τοSAο κωδικός πρόσβασης για την εγκατάσταση του MSDE.

Για να βελτιώσετε την ασφάλεια, θα πρέπει να μην σκληρό κώδικα τουSAμεταβείτε σε ένα αρχείο εντολών (.cmd) τον κωδικό πρόσβασης που έχει αντιστοιχιστεί στο πρόγραμμα εγκατάστασης μια παράμετρο στο αρχείο Setup.ini, ή μια γραμμή εντολών ή περιλαμβάνουν ως ιδιότητα σε ένα αρχείο MSI ή με οποιονδήποτε άλλο τρόπο μπορεί να εκθέσει τον κωδικό πρόσβασης ως απλού κειμένου. Ο κωδικός πρόσβασης πρέπει να είναι δυναμικά δημιουργούνται από ένα πρόγραμμα εγκατάστασης της εφαρμογής κατά το χρόνο εκτέλεσης και πρέπει να διαβιβαστούν στη διαδικασία εγκατάστασης του MSDE με έναν από τους παρακάτω τρόπους:
  • Εκτελέστε το αρχείο setup.exe του MSDE από τον κωδικό ρύθμισης εφαρμογής και καθορίστε μια τιμή SAPWD στα ορίσματα.

    Για παράδειγμα, εκτελέστε το πρόγραμμα Εγκατάστασης χρησιμοποιώντας το .NET FrameworkΔιαδικασίακλάσης και στη συνέχεια καθορίστε SAPWD στο στοΟρίσματα ProcessStartInfoη ιδιότητα ή εκτελέστε το πρόγραμμα Εγκατάστασης χρησιμοποιώντας το Win32CreateProcessλειτουργία και κατόπιν καθορίστε SAPWD στο στοlpCommandLineΠαράμετρος.


    Για περισσότερες πληροφορίες σχετικά με την παράμετρο γραμμής εντολών SAPWD, κάντε κλικ στον αριθμό του άρθρου παρακάτω για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
    810826Νέους διακόπτες στο MSDE Service Pack 2 εγκατάστασης
  • Εκτέλεση για να μεταβιβάσετε έναν ισχυρό κωδικό πρόσβασης, όταν χρησιμοποιείτε τις λειτουργικές μονάδες της συγχώνευσης MSDE σε μια προσαρμοσμένη εγκατάσταση του Windows Installer που βασίζεται σε μια προσαρμοσμένη ενέργεια.

ΣΗΜΕΙΩΣΗΔεν μπορείτε να ορίσετε έναν κωδικό πρόσβασης για τοSAλογαριασμού κατά την εγκατάσταση του MSDE 2000 χρησιμοποιώντας το Windows λειτουργία ελέγχου ταυτότητας. Σε αυτό το σενάριο, πρέπει να ορίσετε τον κωδικό πρόσβασης μετά την ολοκλήρωση της εγκατάστασης. Η Microsoft συνιστά να χρησιμοποιείτε το πιο πρόσφατο service pack για την εγκατάσταση του MSDE 2000.

Η μέθοδος ότι η Microsoft συνιστά να χρησιμοποιείτε για τη δημιουργία τυχαίου κωδικού πρόσβασης είναι η χρήση τουΚρυπτογράφησηΣυναρτήσεις API, όπως:
  • CryptAcquireContext
  • CryptGenRandom
  • CryptCreateHash
  • CryptHashData
If you are using native code, useCryptReleaseContext.

If you are using managed code, useSystem.Security.Cryptography.RNGCryptoServiceProviderto obtain a random encoded string, and then hash the value that is returned by using theComputeHashη μέθοδος τουSystem.Security.Cryptography.SHA1CLASS. The random string must be of variable length, between 7 and 20 characters.

If you forget theSApassword, or you do not know what theSApassword is, and the instance is converted to Mixed Mode, a member of thesysadminfixed server role can reset theSApassword without knowing the previous password. By default, all users who are members of the local Administrators group are members of thesysadminrole. The members of thesysadminrole can change an MSDE instance from Windows Authentication Mode to Mixed Mode or vice versa, and can change theSAPASSWORD. Hence, for security reasons, you may want to remove the Administrators group fromsysadminrole.

For more information about how the Administrators group can be removed from the sysadmin role, click the following article number to view the article in the Microsoft Knowledge Base:
263712How to impede Windows NT administrators from administering a clustered instance of SQL Server


For more information about changing the password for the sa account, click the following article number to view the article in the Microsoft Knowledge Base:
322336How to verify and change the system administrator password in MSDE or SQL Server 2005 Express Edition

ΣΗΜΕΙΩΣΗThe methods for changing theSApassword during installation listed in this article only apply to new installations of MSDE.

The following steps use sample source code to generate a randomSApassword, and then start an MSDE installation.

Using Microsoft Visual C++ .NET

  1. Κάντε κλικStart, τοποθετήστε το δείκτηΌλα τα προγράμματα, τοποθετήστε το δείκτηMicrosoft Visual Studio .NET, τοποθετήστε το δείκτηVisual Studio .NET Tools, και στη συνέχεια κάντε κλικ στο κουμπίVisual Studio .NET Command Prompt.
  2. Ανοίξτε το Σημειωματάριο (Notepad).
  3. Paste the following code in Notepad::
    #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. At the command prompt, type the following command to compile the code:

    cl strongSA.cpp
  6. At the command prompt, type the following command to run the code:

    strongSA.exe

Using Microsoft C#.NET

  1. In Visual Studio .NET, create a new Visual C# Console Application project.
  2. Paste the following code in the class file that contains the Main function.

    Verify that the code replaces all the existing code in the 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. Press F5 to compile, and then run the program.

Αναφορές

For more information about how to embed MSDE in a custom application setup, visit the following Microsoft Web site:
Embedding MSDE 2000 Setup in the Setup of Custom Applications

Ιδιότητες

Αναγν. άρθρου: 814463 - Τελευταία αναθεώρηση: Τετάρτη, 22 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Λέξεις-κλειδιά: 
kbsetup kbsecurity kblogin kbauthentication kbsample kbguidelines kbcode kbinfo kbmt KB814463 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:814463
Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Αποστολή σχολίων

 

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