Accesso a database protetti da password con OLE DB
Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) supporta un meccanismo di controllo dell'accesso a livello di file che richiede di specificare una password per accedere a un database di SQL Server Compact 3.5 protetto da password. Questa password deve essere passata ogni volta che viene aperto il database.
Accesso a un database protetto
Utilizzare la proprietà DBPROP_SSCE_DBPASSWORD nell'insieme di proprietà specifiche del provider DBPROPSET_SSCE_DBINIT per specificare questa proprietà. Quando si crea un database, è possibile utilizzare questa proprietà per specificare una password per il database. I database crittografati sono sempre protetti da password.
Quando si compatta un database, è possibile utilizzare questa proprietà per modificare la password del database con un nuovo valore.
Nell'esempio di codice seguente viene illustrata l'apertura di un database di SQL Server Compact 3.5 protetto da password. La password viene richiesta all'utente mediante la visualizzazione di una finestra di dialogo, il cui codice non è incluso nell'esempio.
Esempi
// 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;