Làm th? nào đ? ch? đ?nh m?t m?t kh?u m?nh SA khi b?n cài đ?t SQL Server 2000 công c? máy tính đ? bàn (MSDE 2000)

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 814463
Bung t?t c? | Thu g?n t?t c?

TÓM T?T

Bài vi?t này mô t? cách đ? ch? đ?nh m?t m?nh m? sa m?t kh?u khi b?n cài đ?t SQL Server Desktop công c? (c?ng đư?c bi?t đ?n như MSDE 2000).

THÔNG TIN THÊM

B?n ph?i gán m?t m?t kh?u m?nh đ? các sa tài kho?n trong khi cài đ?t b?t k? trư?ng h?p c?a SQL Server Năm 2000 đ? bàn công c? (MSDE 2000). B?n ph?i làm đi?u này, ngay c? khi trư?ng h?p b?ng cách s? d?ng Ch? đ? xác th?c c?a Windows. Các sa trương m?c không th? đư?c s? d?ng b?i b?t k? ngư?i dùng khi ch?y trong Windows Ch? đ? xác th?c; Tuy nhiên, các ví d? có th? sau này đư?c chuy?n sang ch? đ? h?n h?p, và các sa tài kho?n s? tr? thành m?t đăng nh?p đang ho?t đ?ng.

Nếu sa tài kho?n có m?t kh?u tr?ng, tr?ng, đơn gi?n, ho?c n?i ti?ng khi m?t th? hi?n c?a MSDE 2000 chuy?n sang ch? đ? h?n h?p, ví d? MSDE có th? truy c?p c?a ngư?i dùng không đư?c phép. Các sa trương m?c không th? đư?c gi?m xu?ng, và nó luôn luôn ph?i đư?c b?o v? v?i m?t m?t kh?u m?nh đ? giúp h?n ch? truy c?p trái phép. B?t k? ngư?i dùng nào ngư?i thu truy c?p đ? m?t th? hi?n c?a MSDE 2000 b?ng cách s? d?ng các sa tài kho?n, có th? chi?m quy?n ki?m soát đ?y đ? ngày mà d? MSDE, và có kh? năng truy c?p vào b?t k? tài nguyên nào tài kho?n d?ch v? MSDE có. B?i m?c đ?nh, tài kho?n d?ch v? MSDE là các LocalSystem Built-in b?o m?t tài kho?n.

Đ? bi?t thêm thông tin v? m?t kh?u m?nh, truy c?p Microsoft Web site sau:

Bảo mật Quy t?c

B?n có th? s? d?ng ?ng d?ng tùy ch?nh m? đ? cài đ?t MSDE. ?ng d?ng m? ph?i s? d?ng m?t trong hai phương pháp sau đây đ? thi?t l?p các sa m?t kh?u:
  • N?u ngư?i dùng là s? thi?t l?p MSDE trong ch? đ? h?n h?p, và là s? s? d?ng các sa tài kho?n, yêu c?u m?t m?t kh?u m?nh m? cho các sa tài kho?n c?a ngư?i dùng. S? d?ng m?t kh?u trong MSDE thi?t l?p.
  • Nếu sa tài kho?n không đư?c s? d?ng, t?o ra m?t chu?i ng?u nhiên và sau đó vư?t qua mà String như là các sa m?t kh?u đ? thi?t l?p MSDE.

Đ? giúp c?i thi?n an ninh, b?n nên không c?ng m? các sa m?t kh?u đư?c gán lúc thi?t l?p như m?t tham s? trong m?t t?p tin Setup.ini, ho?c như m?t d?u nh?c l?nh chuy?n trong m?t t?p tin l?nh (.cmd), ho?c bao g?m nó như là m?t b?t đ?ng s?n trong m?t file MSI, ho?c trong b?t c? cách nào khác mà có th? l? m?t kh?u như văn b?n thu?n. M?t kh?u nên đư?c t? đ?ng t?o ra b?i m?t ?ng d?ng chương tr?nh thi?t l?p t?i th?i gian ch?y, và nó nên đư?c thông qua v?i quá tr?nh thi?t l?p MSDE trong m?t trong nh?ng cách sau đây:
  • Ch?y MSDE setup.exe t? ?ng d?ng cài đ?t m?, và ch? đ?nh m?t giá tr? SAPWD trong các đ?i s?.

    Ví d?, ch?y thi?t l?p b?i b?ng cách s? d?ng các.NET Framework Quá tr?nh l?p, và sau đó ch? ra SAPWD trong các Đ?i s? ProcessStartInfo b?t đ?ng s?n, ho?c ch?y các thi?t l?p b?ng cách s? d?ng Win32 CreateProcess ch?c năng, và sau đó ch? ra SAPWD trong các lpCommandLine tham s?.


    Đ? bi?t thêm thông tin v? d?ng l?nh SAPWD tham s?, b?m s? bài vi?t sau đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
    810826Thi?t b? chuy?n m?ch m?i trong MSDE Service Pack 2 Setup
  • Th?c hi?n m?t hành đ?ng tùy ch?nh đ? vư?t qua m?t m?t kh?u m?nh khi b?n s? d?ng mô-đun merge MSDE trong m?t tu? ch?nh Windows Installer d?a trên thi?t l?p.

Chú ý B?n không th? đ?t m?t kh?u cho các sa tài kho?n trong lúc thi?t l?p MSDE 2000 b?ng cách s? d?ng Windows Ch? đ? xác th?c. Trong trư?ng h?p này, b?n ph?i đ?t m?t kh?u sau khi các thi?t l?p đ? hoàn t?t. Microsoft m?nh m? khuy?n cáo b?n s? d?ng các d?ch v? m?i nh?t gói cài đ?t MSDE 2000.

Các phương pháp mà Microsoft khuy?n cáo b?n s? d?ng đ? t?o ra m?t ng?u nhiên m?t kh?u là s? d?ng các Crypto API ch?c năng như:
  • CryptAcquireContext
  • CryptGenRandom
  • CryptCreateHash
  • CryptHashData
N?u b?n đang s? d?ng b?n x? m?, s? d?ng CryptReleaseContext.

N?u b?n đang s? d?ng qu?n l? m?, s? d?ng System.Security.cryptography.RNGCryptoServiceProvider đ? có đư?c m?t chu?i m? hóa ng?u nhiên, và sau đó băm giá tr? mà đư?c tr? l?i b?ng cách s? d?ng các ComputeHash phương pháp c?a các System.Security.cryptography.SHA1 l?p h?c. Chu?i ng?u nhiên ph?i bi?n đ?i chi?u dài, gi?a 7 và 20 k? t?.

N?u b?n quên các sa m?t kh?u, ho?c b?n không bi?t nh?ng g? các sa m?t kh?u là, và ví d? đư?c chuy?n đ?i sang ch? đ? h?n h?p, m?t thành viên c?a các Ilos vai tr? máy ch? c? đ?nh có th? đ?t l?i các sa m?t kh?u mà không bi?t m?t kh?u trư?c. Theo m?c đ?nh, t?t c? các ngư?i s? d?ng là thành viên c?a nhóm qu?n tr? viên đ?a phương là thành viên c?a các Ilos vai tr?. Các thành viên c?a các Ilos vai tr? có th? thay đ?i m?t th? hi?n MSDE t? ch? đ? xác th?c c?a Windows ch? đ? h?n h?p ho?c ngư?c l?i, và có th? thay đ?i các sa m?t kh?u. Do đó, l? do an ninh, b?n có th? mu?n lo?i b? các Nhóm ngư?i qu?n tr? t? Ilos vai tr?.

Đ? bi?t thêm thông tin v? làm th? nào nhóm ngư?i qu?n tr? có th? lo?i b? kh?i vai tr? General, nh?p vào s? bài vi?t sau đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
263712Làm th? nào đ? c?n tr? qu?n tr? viên Windows NT t? qu?n l? m?t trư?ng h?p c?m c?a SQL Server


Đ? bi?t thêm v? vi?c thay đ?i m?t kh?u cho sa tài kho?n, nh?p vào s? bài vi?t sau đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
322336Làm th? nào đ? xác minh và thay đ?i m?t kh?u ngư?i qu?n tr? h? th?ng trong MSDE ho?c SQL Server 2005 Express Edition

Chú ý Nh?ng phương pháp cho vi?c thay đ?i các sa m?t kh?u trong khi cài đ?t đư?c li?t kê trong bài vi?t này ch? áp d?ng cho m?i cài đ?t c?a MSDE.

Các bư?c sau s? d?ng m? ngu?n m?u đ? t?o ra m?t ng?u nhiên sa m?t kh?u và sau đó b?t đ?u ti?n tr?nh cài đ?t MSDE.

B?ng cách s? d?ng Microsoft Visual C++.NET

  1. Nh?p vào B?t đ?u, đi?m đ?n T?t c? các Chương tr?nh, đi?m đ?n Microsoft Visual Studio.NET, đi?m đ?n Visual Studio.NET Tools, sau đó b?mVisual Studio.NET Command Prompt.
  2. Mở Notepad.
  3. Dán m? sau đây trong 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. Lưu các t?p tin như StrongSA.cpp.
  5. T?i d?u nh?c l?nh, g? l?nh sau đ? biên d?ch m?:

    CL strongSA.cpp
  6. T?i d?u nh?c l?nh, g? l?nh sau đây đ? ch?y M?:

    strongSA.exe

B?ng cách s? d?ng Microsoft C#.NET

  1. Trong ph?ng thu tr?c quan.NET, t?o ra m?t m?i Visual C# Console D? án ?ng d?ng.
  2. Dán đo?n m? sau vào t?p tin l?p h?c có ch?a ch?c năng chính.

    Xác minh r?ng m? thay th? t?t c? các hi?n có M? trong t?p tin:
    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. Nh?n F5 đ? biên d?ch, và sau đó ch?y chương tr?nh.

THAM KH?O

Đ? bi?t thêm v? cách nhúng MSDE trong m?t tu? ch?nh thi?t l?p ?ng d?ng, ghé thăm Web site sau c?a Microsoft:
Nhúng MSDE 2000 thi?t l?p trong các thi?t l?p tu? ch?nh các ?ng d?ng

Thu?c tính

ID c?a bài: 814463 - L?n xem xét sau cùng: 28 Tháng Tám 2011 - Xem xét l?i: 2.0
T? khóa: 
kbsetup kbsecurity kblogin kbauthentication kbsample kbguidelines kbcode kbinfo kbmt KB814463 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:814463
Khước từ Nội dung trong Cơ sở Kiến thức Không còn được hỗ trợ
Bài vi?t này nói v? các s?n ph?m mà Microsoft không c?n h? tr? n?a. Do đó, bài vi?t này đư?c cung c?p "nguyên b?n" và s? không đư?c c?p nh?t.

Cung cấp Phản hồi

 

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