C++ でのアクセス許可の定義の委任
Active Directory に格納されている承認ポリシー ストアは、管理の委任をサポートします。 管理は、ストア、アプリケーション、またはスコープ レベルでユーザーとグループに委任できます。
各レベルには、管理者と閲覧者の一覧があります。 ストア、アプリケーション、またはスコープの管理者は、委任されたレベルでポリシー ストアの読み取りと変更を行うことができます。 閲覧者は委任されたレベルでポリシー ストアを読み取ることができますが、ストアを変更することはできません。
アプリケーションの管理者または閲覧者であるユーザーまたはグループも、そのアプリケーションを含むポリシー ストアの委任されたユーザーとして追加する必要があります。 同様に、スコープの管理者または閲覧者であるユーザーまたはグループは、そのスコープを含むアプリケーションの委任されたユーザーとして追加する必要があります。
たとえば、スコープの管理を委任するには、まず 、IAzAuthorizationStore::AddDelegatedPolicyUser メソッドを呼び出して、スコープを含むストアの委任されたユーザーの一覧にユーザーまたはグループを追加します。 次に、 IAzApplication::AddDelegatedPolicyUser メソッドを呼び出して、スコープを含むアプリケーションの委任されたユーザーの一覧にユーザーまたはグループを追加します。 最後に、 IAzScope::AddPolicyAdministrator メソッドを呼び出して、スコープの管理者の一覧にユーザーまたはグループを追加します。
XML ベースのポリシー ストアは、どのレベルでも委任をサポートしていません。
Active Directory に格納されている承認ストア内のスコープに、承認規則を含むタスク定義または承認規則を含むロール定義がスコープに含まれている場合は、委任できません。
次の例は、アプリケーションの管理を委任する方法を示しています。 この例では、指定した場所に既存の Active Directory 承認ポリシー ストアがあり、このポリシー ストアに Expense という名前のアプリケーションが含まれており、このアプリケーションにビジネス ルール スクリプトを含むタスクが含まれないことを前提としています。
#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;
IAzApplication* pApp = NULL;
HRESULT hr;
void MyHandleError(char *s);
BSTR storeName = NULL;
BSTR appName = NULL;
BSTR userName = NULL;
VARIANT myVar;
// 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 null VARIANT for parameters.
myVar.vt = VT_NULL;
// 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.
hr = pStore->Initialize
(AZ_AZSTORE_FLAG_MANAGE_STORE_ONLY, storeName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize store.");
// Create an application object.
if (!(appName = SysAllocString(L"Expense")))
MyHandleError("Could not allocate application name string.");
hr = pStore->OpenApplication(appName, myVar, &pApp);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not open application.");
// Add a delegated policy user to the store.
if (!(userName = SysAllocString(L"ExampleDomain\\UserName")))
MyHandleError("Could not allocate username string.");
hr = pStore->AddDelegatedPolicyUserName(userName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError
("Could not add user to store as delegated policy user.");
// Add the user as an administrator of the application.
hr = pApp->AddPolicyAdministratorName(userName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError
("Could not add user to application as administrator.");
// Clean up resources.
pStore->Release();
pApp->Release();
SysFreeString(storeName);
SysFreeString(appName);
SysFreeString(userName);
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);
}