Erstellen eines Autorisierungsrichtlinienspeicherobjekts in C++
Ein Autorisierungsrichtlinienspeicher enthält Informationen zur Sicherheitsrichtlinie einer Anwendung oder Gruppe von Anwendungen. Die Informationen umfassen die Anwendungen, Vorgänge, Aufgaben, Benutzer und Benutzergruppen, die dem Speicher zugeordnet sind. Wenn eine Anwendung, die Autorisierungs-Manager verwendet, initialisiert, lädt sie diese Informationen aus dem Speicher. Der Autorisierungsrichtlinienspeicher muss sich auf einem vertrauenswürdigen System befinden, da Administratoren auf diesem System über einen hohen Grad an Zugriff auf den Speicher verfügen.
Der Autorisierungs-Manager unterstützt das Speichern von Autorisierungsrichtlinien entweder im Active Directory-Verzeichnisdienst oder in einer XML-Datei, wie in den folgenden Beispielen gezeigt. In der Autorisierungs-Manager-API wird ein Autorisierungsrichtlinienspeicher durch ein AzAuthorizationStore-Objekt dargestellt. Die Beispiele zeigen, wie Sie ein AzAuthorizationStore-Objekt für einen Active Directory-Speicher und einen XML-Speicher erstellen.
- Erstellen eines Active Directory-Speichers
- Erstellen eines SQL Server Store
- Erstellen eines XML-Speichers
Erstellen eines Active Directory-Speichers
Um Active Directory zum Speichern der Autorisierungsrichtlinie zu verwenden, muss sich die Domäne auf der Windows Server 2003-Domänenfunktionsebene befinden. Der Autorisierungsrichtlinienspeicher kann sich nicht in einem Nicht-Domänennamenskontext (auch als Anwendungspartition bezeichnet) befinden. Es wird empfohlen, den Speicher im Container Programmdaten unter einer neuen Organisationseinheit zu befinden, die speziell für den Autorisierungsrichtlinienspeicher erstellt wurde. Es wird auch empfohlen, sich im selben lokalen Netzwerk wie Anwendungsserver zu befinden, auf denen Anwendungen ausgeführt werden, die den Speicher verwenden.
Das folgende Beispiel zeigt, wie Sie ein AzAuthorizationStore-Objekt erstellen, das einen Autorisierungsrichtlinienspeicher in Active Directory darstellt. Im Beispiel wird davon ausgegangen, dass eine Active Directory-Organisationseinheit mit dem Namen Programmdaten in einer Domäne mit dem Namen authmanager.com vorhanden ist.
#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);
}
Erstellen eines SQL Server Store
Der Autorisierungs-Manager unterstützt das Erstellen eines Microsoft SQL Server-basierten Autorisierungsrichtlinienspeichers. Um einen SQL Server-basierten Autorisierungsspeicher zu erstellen, verwenden Sie eine URL, die mit dem Präfix MSSQL:// beginnt. Die URL muss eine gültige SQL-Verbindungszeichenfolge, einen Datenbanknamen und den Namen des Autorisierungsrichtlinienspeichers enthalten: **MSSQL:// ConnectionString/DatabaseName/**PolicyStoreName.
Wenn der instance von SQL Server nicht die angegebene Autorisierungs-Manager-Datenbank enthält, erstellt der Autorisierungs-Manager eine neue Datenbank mit diesem Namen.
Hinweis
Verbindungen mit einem SQL Server Speicher werden nur verschlüsselt, wenn Sie die SQL-Verschlüsselung für die Verbindung explizit eingerichtet oder die Verschlüsselung des Netzwerkdatenverkehrs eingerichtet haben, der internetprotokollsicherheit (Internet Protocol Security, IPsec) verwendet.
Das folgende Beispiel zeigt, wie Sie ein AzAuthorizationStore-Objekt erstellen, das einen Autorisierungsrichtlinienspeicher in einer SQL Server-Datenbank darstellt.
#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);
}
Erstellen eines XML-Speichers
Autorisierungs-Manager unterstützt das Erstellen eines Autorisierungsrichtlinienspeichers im XML-Format. Der XML-Speicher kann sich auf demselben Computer befinden, auf dem die Anwendung ausgeführt wird, oder er kann remote gespeichert werden. Das direkte Bearbeiten der XML-Datei wird nicht unterstützt. Verwenden Sie das MMC-Snap-In Autorisierungs-Manager oder die Autorisierungs-Manager-API, um den Richtlinienspeicher zu bearbeiten.
Der Autorisierungs-Manager unterstützt nicht das Delegieren der Verwaltung eines XML-Richtlinienspeichers. Informationen zur Delegierung finden Sie unter Delegating the Defining of Permissions in C++ (Delegating the Defining of Permissions in C++).
Das folgende Beispiel zeigt, wie Sie ein AzAuthorizationStore-Objekt erstellen, das einen Autorisierungsrichtlinienspeicher in einer XML-Datei darstellt.
#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);
}