ΕΙΣΑΓΩΓΗ
Η Microsoft έχει κυκλοφορήσει ένα συμβουλευτικό δελτίο ασφαλείας σχετικά με μια ευπάθεια στον Microsoft SQL Server, η οποία θα μπορούσε να επιτρέψει απομακρυσμένη εκτέλεση κώδικα. Το συμβουλευτικό δελτίο ασφαλείας περιέχει πρόσθετες πληροφορίες που σχετίζονται με την ασφάλεια. Για να προβάλετε το συμβουλευτικό δελτίο ασφαλείας, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:
http://www.microsoft.com/technet/security/advisory/961040.mspxΑυτό το άρθρο περιλαμβάνει μια δέσμη ενεργειών VB την οποία μπορείτε να χρησιμοποιήσετε για να εφαρμόσετε έναν τρόπο επίλυσης σε όλες τις παρουσίες του SQL Server που εκτελούνται σε έναν τοπικό υπολογιστή.
ΠΑΡΑΔΕΙΓΜΑ ΔΕΣΜΗΣ ΕΝΕΡΓΕΙΩΝ VB ΠΟΥ ΜΠΟΡΕΙΤΕ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΣΕΤΕ ΓΙΑ ΝΑ ΕΦΑΡΜΟΣΕΤΕ ΤΟΝ ΤΡΟΠΟ ΕΠΙΛΥΣΗΣ
Μπορείτε να χρησιμοποιήσετε αυτήν τη δέσμη ενεργειών VB για να αρνηθείτε τα δικαιώματα Εκτέλεσης στο Δημόσιο ρόλο στην εκτεταμένη αποθηκευμένη διαδικασία sp_replwritetovarbin, σε όλες τις εκδόσεις του SQL Server που εκτελούνται στον τοπικό υπολογιστή και επηρεάζονται.Η Microsoft παρέχει παραδείγματα προγραμματισμού μόνο για λόγους επεξήγησης, χωρίς να παρέχει καμία εγγύηση, σιωπηρή ή ρητή. Σε αυτά περιλαμβάνονται, ενδεικτικά, οι σιωπηρές εγγυήσεις εμπορευσιμότητας ή/και καταλληλότητας για συγκεκριμένο σκοπό. Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού που παρουσιάζεται, καθώς και με τα εργαλεία που χρησιμοποιούνται για τη δημιουργία και τον εντοπισμό σφαλμάτων κώδικα διαδικασιών. Οι μηχανικοί υποστήριξης της Microsoft μπορούν να σας εξηγήσουν τη λειτουργικότητα μιας συγκεκριμένης διαδικασίας. Ωστόσο, δεν θα τροποποιήσουν αυτά τα παραδείγματα για να παράσχουν πρόσθετες λειτουργίες, ούτε θα δημιουργήσουν διαδικασίες, για να καλύψουν τις συγκεκριμένες απαιτήσεις σας. Αντιγράψτε αυτόν τον κώδικα σε ένα αρχείο κειμένου, αποθηκεύστε το αρχείο χρησιμοποιώντας την επέκταση ονόματος αρχείου .vbs και, στη συνέχεια, εκτελέστε το αρχείο της δέσμης ενεργειών χρησιμοποιώντας το CScript.exe. Η δέσμη ενεργειών επαναλαμβάνεται σε όλες τις παρουσίες του SQL Server που εκτελούνται στον τοπικό υπολογιστή και εφαρμόζει τον τρόπο επίλυσης στις εκδόσεις που επηρεάζονται. Πρέπει να είστε μέλος του ρόλου sysadmin σε κάθε παρουσία του SQL Server, για να εφαρμόσετε τον τρόπο επίλυσης. Αν δεν διαθέτετε λογαριασμό Windows που να είναι μέλος του ρόλου sysadmin σε όλους τους διακομιστές που εκτελούν SQL Server και επηρεάζονται, ίσως να πρέπει να εκτελέσετε αυτήν τη δέσμη ενεργειών από πολλαπλούς λογαριασμούς. Στον Windows Server 2008 και στα Windows Vista, αν χρησιμοποιείτε λογαριασμό διαχειριστή των Windows που είναι μέλος του ρόλου sysadmin, πρέπει να εκτελέσετε αυτήν τη δέσμη ενεργειών από μια γραμμή εντολών με αυξημένα δικαιώματα:
'*************************************************************************************'Περιγραφή: Αυτή η δέσμη ενεργειών επαναλαμβάνεται σε όλες τις παρουσίες του SQL Server που εκτελούνται' και αρνείται δικαιώματα εκτέλεσης στο sp_replwritetovarbin σε δημόσιους χρήστες, σε όλες' τις εκδόσεις που επηρεάζονται.' Ο ΚΩΔΙΚΑΣ ΑΥΤΟΣ ΠΑΡΕΧΕΤΑΙ ΩΣ ΤΡΟΠΟΣ ΕΠΙΛΥΣΗΣ ΚΑΙ ΔΕΝ ΠΡΕΠΕΙ ΝΑ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΣΕ ΠΕΡΙΠΤΩΣΗ' ΠΑΡΟΧΗΣ ΚΑΙ ΕΓΚΑΤΑΣΤΑΣΗΣ ΜΙΑΣ ΕΝΗΜΕΡΩΜΕΝΗΣ ΕΚΔΟΣΗΣ ΑΣΦΑΛΕΙΑΣ.'*************************************************************************************OPTION EXPLICITON ERROR RESUME NEXT' Constant valuesCONST EXIT_SUCCESS = 0CONST EXIT_FAILURE = 1CONST EXIT_NOINSTANCES = -1CONST DEFAULTNAMESPACE = "root\default"CONST STDREGPROV = "stdregprov"CONST HKEY_LOCAL_MACHINE = &H80000002CONST REG_MULTI_SZ = 7CONST REG_SZ = 1CONST adCmdText = 1Call VBMain()Function VBMain() Err.Clear ON ERROR RESUME NEXT Dim sInstances(), strInstance, i, TotalCount VBMain = EXIT_SUCCESS If GetInstances(sInstances, TotalCount) = FALSE Then WScript.Quit EXIT_FAILURE End If If IsEmptyNull(sInstances) Then WScript.Echo "INFO: No instances are present." VBMain = EXIT_NOINSTANCES Exit Function End If For i = 0 To TotalCount-1 strInstance = sInstances(i,0) GetFullInstance strInstance, sInstances(i,1) If ApplyFix(sInstances(i,0), strInstance) = FALSE Then WScript.Echo "ERROR: Could not apply the workaround on " + sInstances(i,0) + "." + vbCRLF VBMain = EXIT_FAILURE End If Next WScript.Echo "INFO: Completed processing all the running SQL instances."End FunctionFunction GetInstances(ByRef sInstances, ByRef TotalCount) Err.Clear ON ERROR RESUME NEXT Dim sInstances1, sInstances2, i Dim instCount1, instCount2 GetInstances = FALSE If NOT GetRegValue ("", HKEY_LOCAL_MACHINE, "Software\Microsoft\Microsoft SQL Server", "InstalledInstances", sInstances1, REG_MULTI_SZ, TRUE) Then WScript.Echo "ERROR:Failed to read SQL instances installed on the machine." Exit Function End If sInstances2 = NULL If IsOs64Bit() = TRUE Then If NOT GetRegValue ("", HKEY_LOCAL_MACHINE, "Software\Microsoft\Microsoft SQL Server", "InstalledInstances", sInstances2, REG_MULTI_SZ, FALSE) Then WScript.Echo "ERROR:Failed to read SQL instances installed on the machine." Exit Function End If End If If IsEmptyNull(sInstances1) AND IsEmptyNull(sInstances2) Then WScript.Echo "INFO: No instances present." WScript.Quit EXIT_SUCCESS End If instCount1 = 0 instCount2 = 0 TotalCount = 0 If IsEmptyNull(sInstances1) = FALSE Then instCount1 = UBound(sInstances1) + 1 TotalCount = instCount1 End If If IsEmptyNull(sInstances2) = FALSE Then instCount2 = UBound(sInstances2) + 1 TotalCount = TotalCount + instCount2 End If ReDim PRESERVE sInstances(TotalCount,1) if instCount1 > 0 Then For i = 0 To UBound(sInstances1) sInstances(i,0) = sInstances1(i) sInstances(i,1) = True Next End If If instCount2 >0 Then For i = 0 To UBound(sInstances2) sInstances(i+instCount1,0) = sInstances2(i) sInstances(i+instCount1,1) = FALSE Next End If GetInstances = TRUEEnd FunctionFunction ApplyFix(ByVal strInstance, ByVal strServerName) Err.Clear ON ERROR RESUME NEXT Dim objConn, objCmd, objCmd1, objRS, objRS1 Dim strCommand, strConn Dim strBuildVersion, strProductLevel, bApplyFix ' Initialize return value ApplyFix = FALSE strConn = "Provider=sqloledb;Initial Catalog=master;Integrated Security=SSPI;Data Source=" + strServerName + ";" ' Error checking is intentionally left to keep the code short Set objConn = CreateObject("ADODB.Connection") Set objCmd = CreateObject("ADODB.Command") Set objCmd1 = CreateObject("ADODB.Command") ' Open a Connection to the master Database objConn.Open strConn If ErrorOccurred("Error: Could not connect to " + strInstance) Then Set objConn = Nothing Exit Function End If ' Validate the version before applying the fix strCommand = "select SERVERPROPERTY('ProductVersion') as version, SERVERPROPERTY('productlevel') as productlevel" objCmd.ActiveConnection = objConn objCmd.CommandType = adCmdText objCmd.CommandText = strCommand Set objRS = objCmd.Execute() If ErrorOccurred("ERROR: Could not execute """ + strCommand + """ on " + strInstance) = TRUE Then objConn.Close() Set objConn = Nothing ApplyFix = FALSE Exit Function End If strBuildVersion = objRS("version") strProductLevel = UCase(objRS("productlevel")) bApplyFix = FALSE ' Apply the workaround only for SQL 2000 and SQL 2005 (RTM, SP1 and SP2) versions If (CInt(Mid(strBuildVersion,1,1)) = 8) Then bApplyFix = TRUE ElseIf CInt(Mid(strBuildVersion,1,1)) = 9 AND (StrComp(strProductLevel,"RTM") = 0 OR StrComp(strProductLevel,"SP1") = 0 OR StrComp(strProductLevel,"SP2") = 0) Then bApplyFix = TRUE End If If bApplyFix = TRUE Then strCommand = "deny execute on sp_replwritetovarbin to public" objCmd1.ActiveConnection = objConn objCmd1.CommandType = adCmdText objCmd1.CommandText = strCommand Set objRS1 = objCmd1.Execute() If ErrorOccurred("ERROR: Could not execute """ + strCommand + """ on " + strInstance) = FALSE Then WScript.Echo "INFO: Successfully applied the workaround on " + strInstance + " (" + strBuildVersion + ")." + vbCRLF ApplyFix = TRUE End If Else WScript.Echo "INFO: Skipping collecting information for " + strInstance + " (" + strBuildVersion + ") as this instance is not vulnerable." + vbCRLF ApplyFix = TRUE End If objConn.Close() Set objConn = Nothing Set objCmd = Nothing Set objCmd1 = Nothing Set objRS = Nothing Set objRS1 = NothingEnd FunctionPrivate Function GetRegValue (ByVal strMachineName, ByVal hMainKey, ByVal strPath, ByVal strValueName, ByRef strValue, ByVal iValueType, ByVal b32bit) Err.Clear ON ERROR RESUME NEXT Dim objLocator, objServices, objRegistry, objCtx Dim sMultiStrings, lRc GetRegValue = TRUE 'Connect to WMI and get an object to STDREGPROV class. Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet") If b32bit = TRUE Then objCtx.Add "__ProviderArchitecture", 32 Else objCtx.Add "__ProviderArchitecture", 64 End If objCtx.Add "__RequiredArchitecture", TRUE set objLocator = createobject("wbemscripting.swbemlocator") set objServices = objLocator.connectserver(strMachineName,DEFAULTNAMESPACE, "", "",,,,objCtx) set objRegistry = objServices.get(STDREGPROV) If ErrorOccurred ("ERROR: Could not connect to WMI namespace " + DEFAULTNAMESPACE) Then GetRegValue = FALSE Exit Function End If lRc = 0 Select Case iValueType ' We only care about REG_MULTI_SZ Case REG_MULTI_SZ strValue = "" lRC = objRegistry.GetMultiStringValue(hMainKey, strPath, strValueName, sMultiStrings) strValue = sMultiStrings Case REG_SZ strValue = "" lRC = objRegistry.GetStringValue(hMainKey, strPath, strValueName, strValue) Case Else GetRegValue = FALSE End Select If lRc = 2 Or lRc = 3 Then GetRegValue = TRUE strValue = "" ElseIf Err.Number OR lRc <> 0 Then GetRegValue = FALSE End If Set objLocator = Nothing Set objServices = Nothing Set objRegistry = NothingEnd FunctionFunction IsEmptyNull(sCheck) IsEmptyNull = FALSE If IsObject(sCheck) Then Exit Function If IsArray(sCheck) Then Exit Function If VarType(sCheck) = vbEmpty Then IsEmptyNull = TRUE : Exit Function If VarType(sCheck) = vbNull Then IsEmptyNull = TRUE : Exit Function If sCheck = "" Then IsEmptyNull = TRUEEnd FunctionPrivate Function ErrorOccurred (ByVal strIn) If Err.Number <> 0 Then WScript.Echo strIn WScript.Echo "ERROR: 0x" & Err.Number & " - " & Err.Description Err.Clear ErrorOccurred = TRUE Else ErrorOccurred = FALSE End IfEnd FunctionFunction IsOs64Bit() Err.Clear ON ERROR RESUME NEXT Dim objProc Set objProc = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'") If objProc.Architecture = 0 Then IsOs64Bit = FALSE Else IsOs64Bit = TRUE End IfEnd FunctionFunction GetFullInstance (ByRef strInstanceName, ByVal b32bit) Err.Clear ON ERROR RESUME NEXT Dim objServices, objClusters, objCluster Dim strMacName, isEmpty Dim strKey, strInstID GetFullInstance = TRUE If strComp(UCase(strInstanceName), "MICROSOFT##SSEE", 1) = 0 Then strInstanceName = "np:\\.\pipe\mssql$microsoft##ssee\sql\query" Exit Function End if strMacName = "" Set objServices = GetObject("winmgmts:root\cimv2") ' Query Cluster service Set objClusters = objServices.ExecQuery ("select * from win32_service where Name='ClusSvc' AND Started = TRUE") isEmpty = TRUE If Err.Number = 0 Then For each objCluster in objClusters isEmpty = FALSE Next End If Set objServices = Nothing Set objClusters = Nothing If isEmpty = TRUE Then strInstanceName = BuildInstanceName (".", strInstanceName) Exit Function End If ' If we reach here that means the machine is a clustered node. ' So lets query registry to determine whether the SQL instance is clustered or not. ' For SQL 2000 query the following value ' HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Cluster ' ClusterName strKey = "SOFTWARE\Microsoft\Microsoft SQL Server\" + strInstanceName + "\Cluster" GetRegValue "", HKEY_LOCAL_MACHINE, strKey, "ClusterName", strMacName, REG_SZ, b32bit If StrComp(strMacName, "") <> 0 Then strInstanceName = BuildInstanceName (strMacName, strInstanceName) Exit Function End If strKey = "SOFTWARE\Microsoft\" + strInstanceName + "\Cluster" GetRegValue "", HKEY_LOCAL_MACHINE, strKey, "ClusterName", strMacName, REG_SZ, b32bit If StrComp(strMacName, "") <> 0 Then strInstanceName = BuildInstanceName (strMacName, strInstanceName) Exit Function End If ' Lets try querying the registry value for 2005/2008 instances 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL ' RegValue = InstanceName strInstID = "" strKey = "SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" GetRegValue "", HKEY_LOCAL_MACHINE, strKey, strInstanceName, strInstID, REG_SZ, b32bit If StrComp(strInstID, "") = 0 Then ' If this key doesnt exist, then return back as a SQL 2000 local instance strInstanceName = BuildInstanceName (".", strInstanceName) Exit Function End If strKey = "SOFTWARE\Microsoft\Microsoft SQL Server\" + strInstID + "\Cluster" GetRegValue "", HKEY_LOCAL_MACHINE, strKey, "ClusterName", strMacName, REG_SZ, b32bit If StrComp(strMacName, "") = 0 Then strMacName = "." End If strInstanceName = BuildInstanceName (strMacName, strInstanceName)End FunctionFunction BuildInstanceName (ByVal strMachineName, ByVal strInstanceName) Dim strPrefix strPrefix = "" If StrComp(strMachineName, ".") = 0 Then strPrefix = "lpc:" End If If strComp(UCase(strInstanceName), "MSSQLSERVER", 1) = 0 Then BuildInstanceName = strPrefix + strMachineName Else BuildInstanceName = strPrefix + strMachineName + "\" + strInstanceName End ifEnd Function
Για περισσότερες πληροφορίες σχετικά με το CScript.exe, επισκεφτείτε την ακόλουθη τοποθεσία Web της Microsoft:
http://technet.microsoft.com/en-us/library/bb490887.aspxΣημείωση Συνιστούμε να μην χρησιμοποιήσετε αυτήν τη δέσμη ενεργειών αν έχει παρασχεθεί μια ενημερωμένη έκδοση ασφαλείας και την έχετε εγκαταστήσει.
ΓΝΩΣΤΑ ΘΕΜΑΤΑ ΠΟΥ ΕΝΔΕΧΕΤΑΙ ΝΑ ΠΡΟΚΥΨΟΥΝ ΟΤΑΝ ΕΚΤΕΛΕΙΤΕ ΑΥΤΗΝ ΤΗ ΔΕΣΜΗ ΕΝΕΡΓΕΙΩΝ
Θέμα 1
Κατά την εκτέλεση της δέσμης ενεργειών, λαμβάνετε το ακόλουθο μήνυμα σφάλματος:
ΣΦΑΛΜΑ: Δεν ήταν δυνατή η εκτέλεση "άρνησης εκτέλεσης στο sp_replwritetovarbin σε δημόσιους χρήστες" στο <όνομα_παρουσίας> ΣΦΑΛΜΑ: 0x-2147217900 - Δεν είναι δυνατή η εύρεση του αντικειμένου 'sp_replwritetovarbin', επειδή δεν υπάρχει ή επειδή δεν έχετε δικαίωμα. ΣΦΑΛΜΑ: Δεν ήταν δυνατή η εφαρμογή του τρόπου επίλυσης στο <όνομα_παρουσίας>.
Αιτία 1
Αυτό το μήνυμα σφάλματος εμφανίζεται αν δεν διαθέτετε τα δικαιώματα που απαιτούνται για να εφαρμόσετε την αλλαγή. Αυτό το μήνυμα σφάλματος υποδεικνύει ότι καταφέρατε να συνδεθείτε με επιτυχία στην παρουσία "<όνομα_παρουσίας>".Το μήνυμα σφάλματος αυτό εμφανίζεται συνήθως στον SQL Server Express, στον οποίο η ομάδα "Built-In\Users" συνδέεται από προεπιλογή στη βάση δεδομένων. Ωστόσο, η ομάδα αυτή δεν είναι μέλος του ρόλου sysadmin. Αυτό το μήνυμα σφάλματος μπορεί να εμφανιστεί επίσης αν διακόψατε τη διαδικασία sp_replwritetovarbin. Αυτή ήταν η σύσταση της αναφοράς ενός άλλου κατασκευαστή. Δεν συνιστούμε τη διακοπή της αποθηκευμένης διαδικασίας. Αντίθετα, συνιστούμε την εφαρμογή της εξής προτεινόμενης αντιμετώπισης.
Προτεινόμενη αντιμετώπιση 1
Βεβαιωθείτε ότι ο λογαριασμός στον οποίο συνδέεστε είναι μέλος του ρόλου sysadmin σε αυτήν την παρουσία της βάσης δεδομένων. Αν ο λογαριασμός δεν είναι μέλος, είτε προσθέστε τον χρήστη με το λογαριασμό του οποίου συνδέεστε στο ρόλο sysadmin είτε χρησιμοποιήστε το λογαριασμό άλλου χρήστη. Στον SQL Server 2005 και τις παλιότερες εκδόσεις, η ομάδα "Built-in\Administrators" είναι από προεπιλογή μέλος του ρόλου sysadmin. Όταν εκτελείτε αυτήν τη δέσμη ενεργειών στα Windows Vista ή στον Windows Server 2008, βεβαιωθείτε ότι η εκτέλεση γίνεται από μια γραμμή εντολών με αυξημένα δικαιώματα.
Θέμα 2
Αν εκτελείτε αυτήν τη δέσμη ενεργειών στον SQL Server 2005, λαμβάνετε το ακόλουθο μήνυμα σφάλματος:
Σφάλμα: Δεν ήταν δυνατή η σύνδεση στο <όνομα_παρουσίας> ΣΦΑΛΜΑ: 0x-2147217843 - Η σύνδεση του χρήστη '<χρήστης>' απέτυχε. ΣΦΑΛΜΑ: Δεν ήταν δυνατή η εφαρμογή του τρόπου επίλυσης στο <όνομα_παρουσίας>.
Αιτία 2
Αυτό το μήνυμα σφάλματος εμφανίζεται αν δεν καταφέρατε να συνδεθείτε στην παρουσία "<όνομα_παρουσίας>" παρόλο που η συγκεκριμένη παρουσία υπάρχει.Το μήνυμα σφάλματος αυτό εμφανίζεται συνήθως όταν συνδέεστε σε παρουσίες του Windows Internal Database ή του Microsoft SQL Server 2000 Desktop Edition (Windows). Συνήθως, κανένας λογαριασμός χρήστη δεν συνδέεται με αυτές τις βάσεις δεδομένων.
Προτεινόμενη αντιμετώπιση 2
Βεβαιωθείτε ότι ο λογαριασμός που χρησιμοποιείτε για την εκτέλεση της δέσμης ενεργειών μπορεί να συνδεθεί στη βάση δεδομένων και ότι είναι μέλος του ρόλου sysadmin. Δεν συνιστούμε την προσθήκη μεμονωμένων χρηστών στις βάσεις δεδομένων του Windows Internal Database και του Microsoft SQL Server 2000 Desktop Edition (Windows). Αν το κάνετε, οι χρήστες που προσθέτετε ενδέχεται να παρέμβουν στην κανονική λειτουργία αυτών των βάσεων δεδομένων. Σε αυτήν την περίπτωση, βεβαιωθείτε ότι συνδέεστε από ένα λογαριασμό που είναι μέλος του ρόλου sysadmin. Η ομάδα "Built-in\Administrators" στα Windows είναι συνήθως μέλος του ρόλου sysadmin από προεπιλογή στον SQL Server 2005 και τις προηγούμενες εκδόσεις. Όταν εκτελείτε αυτήν τη δέσμη ενεργειών στα Windows Vista ή στον Windows Server 2008, βεβαιωθείτε ότι την εκτελείτε από μια γραμμή εντολών με αυξημένα δικαιώματα.
Θέμα 3
Ίσως να παρατηρήσετε την παρουσία μιας βάσης δεδομένων με το όνομα MICROSOFT##SSEE. Όμως, αυτήν τη βάση δεδομένων δεν την έχετε εγκαταστήσει εσείς.
Αιτία 3
Αυτή η βάση δεδομένων είναι η Windows Internal Database, γνωστή επίσης και ως "SQL Server Embedded Edition" ή, άλλες φορές, ως "Windows Internal Database" ή "Microsoft SQL Server 2000 Desktop Edition (Windows)". Εγκαθίσταται μαζί με ορισμένα προϊόντα της Microsoft, συμπεριλαμβανομένων των υπηρεσιών SharePoint Services.
Προτεινόμενη αντιμετώπιση 3
Η δέσμη ενεργειών του τρόπου επίλυσης έχει σχεδιαστεί για να λειτουργεί μαζί με το Windows Internal Database. Εσείς δεν χρειάζεται να κάνετε καμία ενέργεια. Ορισμένες εφαρμογές δεν καταργούν το Windows Internal Database κατά την κατάργηση της εγκατάστασής τους. Για περισσότερες πληροφορίες σχετικά με τον τρόπο κατάργησης του Windows Internal Database, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
920277 Το Windows Internal Database δεν παρουσιάζεται στο εργαλείο "Προσθαφαίρεση προγραμμάτων" και δεν καταργείται κατά την κατάργηση των Windows SharePoint Services 3.0 από τον υπολογιστή. (US)
Θέμα 4
Κατά την εκτέλεση της δέσμης ενεργειών, λαμβάνετε το ακόλουθο μήνυμα σφάλματος:
Σφάλμα: Δεν ήταν δυνατή η σύνδεση στο .\<όνομα_παρουσίας>ΣΦΑΛΜΑ: 0x-2147467259 - [DBNETLIB][ConnectionOpen (Connect()).]Ο SQL Server δεν υπάρχει ή δεν επιτρέπεται η πρόσβαση
Αιτία 4
Αυτό το μήνυμα σφάλματος εμφανίζεται αν ισχύουν οι ακόλουθες συνθήκες:
-
Έχετε εγκαταστήσει μια έκδοση SQL Server 2000 32-bit σε ένα λειτουργικό σύστημα x64-bit.
-
Έχετε εγκαταστήσει στον υπολογιστή μια έκδοση SQL Server 2005 ή SQL Server 2008 64-bit.
Αυτό το μήνυμα σφάλματος προκύπτει όταν η δέσμη ενεργειών χρησιμοποιεί την έκδοση 64-bit του αρχείου dbmslpcn.dll. Αυτή η έκδοση δεν μπορεί να επικοινωνήσει με τις παρουσίες WoW του SQL Server 2000.
Προτεινόμενη αντιμετώπιση 4
Χρησιμοποιήστε την έκδοση 32-bit του αρχείου cscript.exe από το φάκελο %WINDOWS%\SysWOW64 για να ξεκινήσετε τη δέσμη ενεργειών. Με αυτόν τον τρόπο, φορτώνεται η έκδοση 32-bit του αρχείου dbmslpcn.dll, η οποία μπορεί να εντοπίσει παρουσίες WoW.
Αναφορές
Για περισσότερες πληροφορίες σχετικά με τον προσδιορισμό της έκδοσης του SQL Server, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
321185Προσδιορισμός της έκδοσης του SQL Server
Περισσότερες πληροφορίες
Ο ακόλουθος πίνακας παραθέτει σημαντικές τεχνικές αναθεωρήσεις για αυτό το άρθρο. Ο αριθμός αναθεώρησης και η τελευταία ημερομηνία αναθεώρησης αυτού του άρθρου μπορεί να υποδεικνύουν συντακτικές ή δομικές αναθεωρήσεις δευτερεύουσας σημασίας σε αυτό το άρθρο, οι οποίες δεν περιλαμβάνονται στον πίνακα.
|
Ημερομηνία |
Αναθεωρήσεις |
|---|---|
|
31 Δεκεμβρίου 2008 |
Περιλαμβάνει μια ενημερωμένη δέσμη ενεργειών που εντοπίζει παρουσίες συμπλέγματος ανακατεύθυνσης στον SQL Server. |
|
30 Δεκεμβρίου 2008 |
Περιλαμβάνει μια ενημερωμένη δέσμη ενεργειών που εντοπίζει εκδόσεις 32-bit του SQL Server, οι οποίες εκτελούνται σε εκδόσεις 64-bit των Windows. |