Creazione di un oggetto archivio criteri di autorizzazione in C++
Un archivio criteri di autorizzazione contiene informazioni sui criteri di sicurezza di un'applicazione o di un gruppo di applicazioni. Le informazioni includono le applicazioni, le operazioni, le attività, gli utenti e i gruppi di utenti associati all'archivio. Quando un'applicazione che usa Gestione autorizzazioni inizializza, carica queste informazioni dall'archivio. L'archivio criteri di autorizzazione deve trovarsi in un sistema attendibile perché gli amministratori di tale sistema hanno un livello elevato di accesso all'archivio.
Gestione autorizzazioni supporta l'archiviazione dei criteri di autorizzazione nel servizio directory Active Directory o in un file XML, come illustrato negli esempi seguenti. Nell'API di Gestione autorizzazioni un archivio criteri di autorizzazione è rappresentato da un oggetto AzAuthorizationStore . Gli esempi illustrano come creare un oggetto AzAuthorizationStore per un archivio Active Directory e un archivio XML.
- Creazione di un archivio Active Directory
- Creazione di un archivio SQL Server
- Creazione di un archivio XML
Creazione di un archivio Active Directory
Per usare Active Directory per archiviare i criteri di autorizzazione, il dominio deve trovarsi nel livello di funzionalità del dominio di Windows Server 2003 . L'archivio dei criteri di autorizzazione non può trovarsi in un contesto di denominazione non di dominio ,detto anche partizione dell'applicazione. È consigliabile che l'archivio si trovi nel contenitore Program Data in una nuova unità organizzativa creata in modo specifico per l'archivio criteri di autorizzazione. È inoltre consigliabile che l'archivio si trovi nella stessa rete locale dei server applicazioni che eseguono applicazioni che usano l'archivio.
L'esempio seguente illustra come creare un oggetto AzAuthorizationStore che rappresenta un archivio criteri di autorizzazione in Active Directory. Nell'esempio si presuppone che sia presente un'unità organizzativa di Active Directory denominata Program Data in un dominio denominato authmanager.com.
#pragma comment(lib, "duser.lib")
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif
#include <windows.h>
#include <stdio.h>
#include <azroles.h>
#include <objbase.h>
void main(void){
IAzAuthorizationStore* pStore = NULL;
HRESULT hr;
void MyHandleError(char *s);
BSTR storeName = NULL;
// Initialize COM.
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize COM.");
// Create the AzAuthorizationStore object.
hr = CoCreateInstance(
/*"b2bcff59-a757-4b0b-a1bc-ea69981da69e"*/
__uuidof(AzAuthorizationStore),
NULL,
CLSCTX_ALL,
/*"edbd9ca9-9b82-4f6a-9e8b-98301e450f14"*/
__uuidof(IAzAuthorizationStore),
(void**)&pStore);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create AzAuthorizationStore object.");
// Create a null VARIANT for function parameters.
VARIANT myVar;
VariantInit(&myVar);
// Allocate a string for the distinguished name of the
// Active Directory store.
if(!(storeName = SysAllocString
(L"msldap://CN=MyAzStore,CN=Program Data,DC=authmanager,DC=com")))
MyHandleError("Could not allocate string.");
// Initialize the store in Active Directory. Use the
// AZ_AZSTORE_FLAG_CREATE flag.
hr = pStore->Initialize(AZ_AZSTORE_FLAG_CREATE, storeName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize store.");
// Call the submit method to save changes to the new store.
hr = pStore->Submit(0, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not save data to the store.");
// Clean up resources.
pStore->Release();
VariantClear(&myVar);
SysFreeString(storeName);
CoUninitialize();
}
void MyHandleError(char *s)
{
printf("An error occurred in running the program.\n");
printf("%s\n",s);
printf("Error number %x\n.",GetLastError());
printf("Program terminating.\n");
exit(1);
}
Creazione di un archivio SQL Server
Gestione autorizzazioni supporta la creazione di un archivio criteri di autorizzazione basato su microsoft SQL Server. Per creare un archivio di autorizzazioni basato su SQL Server, usare un URL che inizia con il prefisso MSSQL://. L'URL deve contenere una stringa di connessione SQL valida, un nome di database e il nome dell'archivio criteri di autorizzazione: **MSSQL:// ConnectionString/DatabaseName/**PolicyStoreName.
Se l'istanza di SQL Server non contiene il database di Gestione autorizzazioni specificato, Gestione autorizzazioni crea un nuovo database con tale nome.
Nota
Le connessioni a un archivio SQL Server non vengono crittografate a meno che non si configuri in modo esplicito la crittografia SQL per la connessione o non configuri la crittografia del traffico di rete che usa Internet Protocol Security (IPsec).
Nell'esempio seguente viene illustrato come creare un oggetto AzAuthorizationStore che rappresenta un archivio criteri di autorizzazione in un database di SQL Server.
#pragma comment(lib, "duser.lib")
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif
#include <windows.h>
#include <stdio.h>
#include <azroles.h>
#include <objbase.h>
void main(void){
IAzAuthorizationStore* pStore = NULL;
HRESULT hr;
void MyHandleError(char *s);
BSTR storeName = NULL;
// Initialize COM.
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize COM.");
// Create the AzAuthorizationStore object.
hr = CoCreateInstance(
/*"b2bcff59-a757-4b0b-a1bc-ea69981da69e"*/
__uuidof(AzAuthorizationStore),
NULL,
CLSCTX_ALL,
/*"edbd9ca9-9b82-4f6a-9e8b-98301e450f14"*/
__uuidof(IAzAuthorizationStore),
(void**)&pStore);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create AzAuthorizationStore object.");
VARIANT myVar;
myVar.vt = VT_NULL;
// Allocate a string for the SQL Server store.
if(!(storeName = SysAllocString
(L"MSSQL://Driver={SQL Server};Server={AzServer};/AzDB/MyStore")))
MyHandleError("Could not allocate string.");
// Initialize the store. Use the
// AZ_AZSTORE_FLAG_CREATE flag.
hr = pStore->Initialize(AZ_AZSTORE_FLAG_CREATE, storeName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize store.");
// Call the submit method to save changes to the new store.
hr = pStore->Submit(0, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not save data to the store.");
// Clean up resources.
pStore->Release();
SysFreeString(storeName);
CoUninitialize();
}
void MyHandleError(char *s)
{
printf("An error occurred in running the program.\n");
printf("%s\n",s);
printf("Error number %x\n.",GetLastError());
printf("Program terminating.\n");
exit(1);
}
Creazione di un archivio XML
Gestione autorizzazioni supporta la creazione di un archivio criteri di autorizzazione in formato XML. L'archivio XML può trovarsi nello stesso computer in cui viene eseguita l'applicazione oppure può essere archiviato in remoto. La modifica diretta del file XML non è supportata. Usare lo snap-in MMC gestione autorizzazioni o l'API gestione autorizzazioni per modificare l'archivio criteri.
Gestione autorizzazioni non supporta la delega dell'amministrazione di un archivio criteri XML. Per informazioni sulla delega, vedere Delega della definizione delle autorizzazioni in C++.
Nell'esempio seguente viene illustrato come creare un oggetto AzAuthorizationStore che rappresenta un archivio criteri di autorizzazione in un file XML.
#pragma comment(lib, "duser.lib")
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif
#include <windows.h>
#include <stdio.h>
#include <azroles.h>
#include <objbase.h>
void main(void){
IAzAuthorizationStore* pStore = NULL;
HRESULT hr;
void MyHandleError(char *s);
BSTR storeName = NULL;
// Initialize COM.
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize COM.");
// Create the AzAuthorizationStore object.
hr = CoCreateInstance(
/*"b2bcff59-a757-4b0b-a1bc-ea69981da69e"*/
__uuidof(AzAuthorizationStore),
NULL,
CLSCTX_ALL,
/*"edbd9ca9-9b82-4f6a-9e8b-98301e450f14"*/
__uuidof(IAzAuthorizationStore),
(void**)&pStore);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create AzAuthorizationStore object.");
VARIANT myVar;
myVar.vt = VT_NULL;
// Allocate a string for the distinguished name of the XML store.
if(!(storeName = SysAllocString(L"msxml://C:\\MyStore.xml")))
MyHandleError("Could not allocate string.");
// Initialize the store in an XML file. Use the
// AZ_AZSTORE_FLAG_CREATE flag.
hr = pStore->Initialize(AZ_AZSTORE_FLAG_CREATE, storeName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize store.");
// Call the submit method to save changes to the new store.
hr = pStore->Submit(0, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not save data to the store.");
// Clean up resources.
pStore->Release();
SysFreeString(storeName);
CoUninitialize();
}
void MyHandleError(char *s)
{
printf("An error occurred in running the program.\n");
printf("%s\n",s);
printf("Error number %x\n.",GetLastError());
printf("Program terminating.\n");
exit(1);
}