次の方法で共有


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);
}