Nasıl yapılır: SQL Server 2000 Desktop Engine (MSDE 2000) yüklediğinizde, sağlam bir SA parolası belirtin.

Makale çevirileri Makale çevirileri
Makale numarası: 814463 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Bu makalede, nasıl yapılır: SQL Server Desktop Engine (MSDE 2000 olarak da bilinir) yüklediğinizde, sağlam bir sa parolası belirtin.

Daha fazla bilgi

Herhangi bir örneğini SQL Server 2000 Desktop Engine (MSDE 2000) yüklenmesi sırasında bir güçlü parola sa hesabı atamanız gerekir. Örnek, Windows kimlik doğrulaması modu kullanıyor olsalar bile bunu yapmanız gerekir. Sa hesabı herhangi bir kullanıcı tarafından Windows kimlik doğrulaması modunda çalıştırırken kullanılamaz; ancak karma mod için örnek daha sonra değiştirilebilir ve etkin bir oturum açma sa hesabı olur.

MSDE örneğini MSDE 2000 örneğini karma moda geçti, sa hesabını boş, basit veya tanınmış bir null, parola, yetkisiz kullanıcılar tarafından sonra erişilebilir. Sa hesabı bıraktı ve her zaman yetkisiz erişimi kısıtlamak amacıyla güçlü bir parola ile korunmalıdır. Sa hesabını kullanarak MSDE 2000'in örneğine erişim kazançları herhangi bir kullanıcı, MSDE örneği üzerinde tam denetime sahip ve MSDE hizmet hesabı olan herhangi bir kaynağa yeteneğine sahip. Varsayılan olarak, MSDE LocalSystem hesabını yerleşik güvenlik hizmeti hesaptır.

Güçlü parolalar hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:

Security Rules

Özel bir uygulama kodu, MSDE yüklemek için kullanabilirsiniz. Sa parolasını ayarlamak için uygulama kodu aşağıdaki iki yöntemden birini kullanmalısınız:
  • Sağlam bir sa hesabının parolası, kullanıcı MSDE karma modda ayarlamak için giden sa hesabı kullanacağınız olan ise, kullanıcıdan iste. MSDE parola kullanmak Kurulum.
  • Sa hesabı kullanılmazsa, rasgele bir dize oluşturun ve sonra bu dize <a2>sa</a2> parolası MSDE ayarına geçirmek.

Güvenliğini artırmanıza yardımcı olmak için <a0></a0>, size gereken olmayan koda Setup.ini dosyasında parametre olarak veya bir komut istemi Kur sırasında atanan <a1>sa</a1> parolası bir (.cmd) komut dosyasında geçin veya bu özelliği, bir MSI dosyası veya parola düz metin olarak göstermek başka bir yolu olarak ekleyin. Parolayı dinamik olarak bir uygulama Kur programının çalışma zamanında oluşturulması ve bu MSDE Kur işlemi için aşağıdaki yollardan birinde iletilmesi gereken:
  • Uygulama kurulum koddan MSDE Kur.exe programını çalıştırın ve fonksiyonundaki bağımsız değişkenlerin SAPWD değeri belirtin.

    Örneğin, .NET Framework işlemi sınıfı,'ı kullanarak Kurulumu çalıştırmak ve sonra SAPWD ProcessStartInfo bağımsız değişkenleri özelliği belirtin veya Win32 CreateProcess</a1> işlevini kullanarak Kurulumu çalıştırmak ve sonra SAPWD lpCommandLine parametresinde belirtin.


    SAPWD komut satırı parametresi hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    810826MSDE Service Pack 2 Kur, yeni anahtarlar
  • Özel bir Windows ınstaller tabanlı kurulumunda MSDE birleştirme modülleri kullandığınızda, güçlü bir parola geçirmek için özel bir eylem gerçekleştirin.

Not Windows kullanarak MSDE 2000 Kurulum sırasında bir sa hesabının parolası ayarlanamaz kimlik doğrulama modu. Bu senaryoda, Kurulum tamamlandıktan sonra parola ayarlamalısınız. Microsoft, MSDE 2000'i yüklemek için en son hizmet paketini kullanmanızı önerir.

Microsoft, rasgele bir parola oluşturmak için kullandığınız önerir yöntemi şifreleme API işlevleri gibi kullanmaktır:
  • CryptAcquireContext
  • CryptGenRandom
  • CryptCreateHash
  • CryptHashData
Yerel kod kullanıyorsanız, CryptReleaseContext kullanın.

Yönetilen kod kullanıyorsanız, rasgele, kodlanmış bir dize edinme System.Security.Cryptography.RNGCryptoServiceProvider kullanın ve sonra System.Security.Cryptography.SHA1 sınıfının ComputeHash yöntemini kullanarak döndürülen değer karma. Rasgele dize değişken uzunluklu, 7 ile 20 karakter arasında olmalıdır.

Sysadmin sabit sunucu rolü üyesi sa Parolayı unutur veya nedir, sa parolasının tanımadığınız ve örnek için karma mod dönüştürülür, sa parolasının önceki parolayı bilmeden sıfırlayabilirsiniz. Varsayılan olarak, yerel Administrators grubunun bir üyesi olan tüm kullanıcıların sysadmin rolünün bir üyesidir. Sysadmin rolünün üyesi bir MSDE örneği, Windows kimlik doğrulaması modu karma mod veya tam tersi şekilde değiştirebilirsiniz ve sa parolasını değiştirebilirsiniz. Bu yüzden, güvenlik nedenleriyle, Administrators grubunun sysadmin rolünün ' kaldırmak isteyebilirsiniz.

Administrators grubunun sysadmin rolünün kaldırılması hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
263712Nasıl yapılır: Windows NT yöneticilerin, bir Kümelendirilmiş SQL Server örneği yönetme engelleyebilir.


Sa için parolayı değiştirme hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
322336Nasıl doğrulayın ve SQL Server 2005 Express Edition ya da MSDE Sistem Yöneticisi parolasını değiştirme

Not Bu makalede listelenen bir yükleme sırasında sa parolasının değiştirilmesi yöntemleri, yalnızca MSDE yeni yüklemeleri için geçerlidir.

Aşağıdaki adımlar örnek kaynak kodu, rasgele bir sa parolası oluşturmak için kullanın ve sonra bir MSDE yüklemesini başlatın.

Microsoft Visual C++ .NET kullanma

  1. Başlat ' ı tıklatın, Programlar ' ın üzerine gelin, Visual Studio.NET ' i işaretleyin, Visual Studio .NET araçları ' nın üzerine gelin ve Visual Studio .NET komut istemi ' ni tıklatın.
  2. Not Defteri'nde açın.
  3. Not Defteri'nde aşağıdaki kodu yapıştırın: # define sonra WIN32_LEAN_AND_MEAN
    #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. Dosyayı StrongSA.cpp kaydedin.
  5. Kodu derlemek için aşağıdaki komut komut istemine şunu yazın:

    CL strongSA.cpp
  6. Komut isteminde, kod çalıştırmak için aşağıdaki komutu yazın:

    strongSA.exe

Microsoft C#. NET'i kullanarak

  1. Visual Studio. NET'te bir yeni Visual C# konsolu oluşturma uygulama proje.
  2. Aşağıdaki kodu, ana işlevi içeren sınıf dosyasına yapıştırın.

    Kod, sistem 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. Derleme ve sonra da programı çalıştırmak için F5 tuşuna basın.

Referanslar

Bir özel uygulama kurulumunda MSDE katıştırma hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
Embedding MSDE 2000 Setup in the Setup of Custom Applications

Özellikler

Makale numarası: 814463 - Last Review: 22 Mart 2007 Perşembe - Gözden geçirme: 1.5
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
Anahtar Kelimeler: 
kbmt kbsetup kbsecurity kblogin kbauthentication kbsample kbguidelines kbcode kbinfo KB814463 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:814463
Kullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.

Geri Bildirim Ver

 

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