Συμβουλευτικό δελτίο ασφαλείας της Microsoft: Μια ευπάθεια στον SQL Server θα μπορούσε να επιτρέψει απομακρυσμένη εκτέλεση κώδικα

ΕΙΣΑΓΩΓΗ

Η Microsoft έχει κυκλοφορήσει ένα συμβουλευτικό δελτίο ασφαλείας σχετικά με μια ευπάθεια στον Microsoft SQL Server, η οποία θα μπορούσε να επιτρέψει απομακρυσμένη εκτέλεση κώδικα. Το συμβουλευτικό δελτίο ασφαλείας περιέχει πρόσθετες πληροφορίες που σχετίζονται με την ασφάλεια. Για να προβάλετε το συμβουλευτικό δελτίο ασφαλείας, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web: Αυτό το άρθρο περιλαμβάνει μια δέσμη ενεργειών 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 EXPLICIT
ON ERROR RESUME NEXT

' Constant values
CONST EXIT_SUCCESS = 0
CONST EXIT_FAILURE = 1
CONST EXIT_NOINSTANCES = -1
CONST DEFAULTNAMESPACE = "root\default"
CONST STDREGPROV = "stdregprov"
CONST HKEY_LOCAL_MACHINE = &H80000002
CONST REG_MULTI_SZ = 7
CONST REG_SZ = 1
CONST adCmdText = 1


Call 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 Function

Function 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 = TRUE
End Function


Function 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 = Nothing
End Function

Private 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 = Nothing
End Function

Function 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 = TRUE
End Function

Private 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 If
End Function

Function 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 If
End Function

Function 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 Function

Function 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 if
End Function
Για περισσότερες πληροφορίες σχετικά με το CScript.exe, επισκεφτείτε την ακόλουθη τοποθεσία Web της Microsoft: Σημείωση Συνιστούμε να μην χρησιμοποιήσετε αυτήν τη δέσμη ενεργειών αν έχει παρασχεθεί μια ενημερωμένη έκδοση ασφαλείας και την έχετε εγκαταστήσει.

ΓΝΩΣΤΑ ΘΕΜΑΤΑ ΠΟΥ ΕΝΔΕΧΕΤΑΙ ΝΑ ΠΡΟΚΥΨΟΥΝ ΟΤΑΝ ΕΚΤΕΛΕΙΤΕ ΑΥΤΗΝ ΤΗ ΔΕΣΜΗ ΕΝΕΡΓΕΙΩΝ

Θέμα 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.
Ιδιότητες

Αναγνωριστικό άρθρου: 961040 - Τελευταία αναθεώρηση: 6 Ιαν 2009 - Αναθεώρηση: 1

Σχόλια