Freigeben über


Zugreifen auf kennwortgeschützte Datenbanken mit OLE DB

Microsoft SQL Server Compact 4.0 unterstützt einen Zugriffssteuerungsmechanismus auf Dateiebene. In diesem Fall muss für den Zugriff auf eine kennwortgeschützte SQL Server Compact 4.0-Datenbank ein Kennwort angegeben werden. Dieses Kennwort muss jedes Mal übergeben werden, wenn die Datenbank geöffnet wird.

Zugreifen auf eine geschützte Datenbank

Verwenden Sie die DBPROP_SSCE_DBPASSWORD-Eigenschaft in dem für den Anbieter spezifischen Eigenschaftensatz DBPROPSET_SSCE_DBINIT, um diese Eigenschaft anzugeben. Wenn Sie eine Datenbank erstellen, können Sie mit dieser Eigenschaft ein Kennwort für die Datenbank angeben. Eine verschlüsselte Datenbank ist immer kennwortgeschützt.

Wenn Sie eine Datenbank komprimieren, können Sie mit dieser Eigenschaft ein neues Datenbankkennwort angeben.

Das folgende Codebeispiel zeigt, wie eine kennwortgeschützte SQL Server Compact 4.0-Datenbank geöffnet wird. Der Benutzer wird zur Eingabe des Kennworts aufgefordert, indem ein Dialogfeld angezeigt wird. Der Code für das Dialogfeld ist nicht im Beispiel enthalten.

Beispiele

// Object declarations
HRESULT          hr              = NOERROR; 
DBPROPSET        dbpropset[2]; 
DBPROP           dbprop[1]; 
DBPROP           sscedbprop[1]; 
BSTR             pwdPassword; // user input password

// Declare the provider interfaces.
IDBInitialize *  pIDBInitialize  = NULL;
IDBProperties *  pIDBProperties  = NULL;

// Initialize the data source.
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_SQLSERVERCE, 0, CLSCTX_INPROC_SERVER,
    IID_IDBInitialize, (void**) &pIDBInitialize);
if (FAILED(hr))
{
    // Send an error-specific message and do error handling.
    goto Exit;
}

// Initialize property structures.
VariantInit(&dbprop[0].vValue);
VariantInit(&sscedbprop[0].vValue);

// Initialize Property with name of database.
dbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt = VT_BSTR;
dbprop[0].vValue.bstrVal = SysAllocString(L"ProtectedData.sdf");
if(NULL == dbprop[0].vValue.bstrVal)
{
    hr = E_OUTOFMEMORY;
    goto Exit;
}

// Second property set has one property containing the 
// provider-specific database password in the pwdPassword variable 
// that was obtained from a dialog box (not shown).
sscedbprop[0].dwPropertyID = DBPROP_SSCE_DBPASSWORD;
sscedbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
sscedbprop[0].vValue.vt = VT_BSTR;
sscedbprop[0].vValue.bstrVal = SysAllocString(<pwdPassword>);
if(NULL == sscedbprop[0].vValue.bstrVal)
{
    hr = E_OUTOFMEMORY;
    goto Exit;
}

// Initialize property set.
dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
dbpropset[0].rgProperties = dbprop;
dbpropset[0].cProperties = sizeof(dbprop)/sizeof(dbprop[0]);

// Initialize the provider-specific property set.
dbpropset[1].guidPropertySet = DBPROPSET_SSCE_DBINIT;
dbpropset[1].rgProperties = sscedbprop;
dbpropset[1].cProperties = sizeof(sscedbprop)/sizeof(sscedbprop[0]);

// Set the properties into the provider's data source object.
pIDBInitialize->QueryInterface(IID_IDBProperties,(void**)&pIDBProperties);

hr = pIDBProperties->SetProperties(sizeof(dbpropset)/sizeof(dbpropset[0]), 
    dbpropset);
if(FAILED(hr))
{
    goto Exit;
}

// Initialize the data source.
hr = pIDBInitialize->Initialize();
if(FAILED(hr))
{
   goto Exit;
}

Exit:
// Clean up resources here.

return;