Partager via


Accès aux bases de données protégées par mot de passe à l'aide d'OLE DB

Microsoft SQL Server Compact 3.5 prend en charge un mécanisme de contrôle d'accès au niveau fichier qui requiert la fourniture d'un mot de passe pour accéder à une base de données SQL Server Compact 3.5 protégée par mot de passe. Ce mot de passe doit être communiqué à chaque ouverture de la base de données.

Accès à une base de données protégée

Utilisez la propriété DBPROP_SSCE_DBPASSWORD dans la propriété DBPROPSET_SSCE_DBINIT spécifique au fournisseur et définie pour spécifier cette propriété. Lorsque vous créez une base de données, cette propriété permet d'y associer un mot de passe de base de données. Les bases de données chiffrées sont systématiquement protégées par mot de passe.

Lorsque vous compactez une base de données, cette propriété permet d'attribuer une nouvelle valeur au mot de passe de base de données.

L'exemple de code ci-dessous montre comment ouvrir une base de données SQL Server Compact 3.5 protégée par mot de passe. Le mot de passe est demandé à l'utilisateur par le biais d'une boîte de dialogue, dont le code ne figure pas dans l'exemple.

Exemples

// 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;