C++에서 사용 권한 정의 위임
관리의 Active Directory 지원 위임에 저장된 권한 부여 정책 저장소입니다. 저장소, 애플리케이션 또는 scope 수준의 사용자 및 그룹에 관리를 위임할 수 있습니다.
각 수준에는 관리자 및 읽기 권한자 목록이 있습니다. 저장소, 애플리케이션 또는 scope 관리자는 위임된 수준에서 정책 저장소를 읽고 수정할 수 있습니다. 읽기 권한자는 위임된 수준에서 정책 저장소를 읽을 수 있지만 저장소를 수정할 수는 없습니다.
관리자 또는 애플리케이션의 판독기인 사용자 또는 그룹도 해당 애플리케이션을 포함하는 정책 저장소의 위임된 사용자로 추가되어야 합니다. 마찬가지로 관리자 또는 scope 읽기 권한자인 사용자 또는 그룹은 해당 scope 포함하는 애플리케이션의 위임된 사용자로 추가되어야 합니다.
예를 들어 scope 관리를 위임하려면 먼저 IAzAuthorizationStore::AddDelegatedPolicyUser 메서드를 호출하여 scope 포함하는 저장소의 위임된 사용자 목록에 사용자 또는 그룹을 추가합니다. 그런 다음, IAzApplication::AddDelegatedPolicyUser 메서드를 호출하여 scope 포함하는 애플리케이션의 위임된 사용자 목록에 사용자 또는 그룹을 추가합니다. 마지막으로 IAzScope::AddPolicyAdministrator 메서드를 호출하여 scope 관리자 목록에 사용자 또는 그룹을 추가합니다.
XML 기반 정책 저장소는 어떤 수준에서도 위임을 지원하지 않습니다.
scope 권한 부여 규칙 또는 권한 부여 규칙을 포함하는 역할 정의를 포함하는 작업 정의가 포함된 경우 Active Directory에 저장된 권한 부여 저장소 내의 scope 위임할 수 없습니다.
다음 예제에서는 애플리케이션의 관리를 위임하는 방법을 보여줍니다. 이 예제에서는 지정된 위치에 기존 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);
}