다음을 통해 공유


클라이언트 컨텍스트에 SID 추가

애플리케이션은 AuthzAddSidsToContext 함수를 호출하여 기존 클라이언트 컨텍스트에 SID(보안 식별자)를 추가할 수 있습니다. AuthzAddSidsToContext 함수를 사용하면 애플리케이션이 SID 목록과 지정된 클라이언트 컨텍스트로 SID를 제한하는 목록을 모두 지정할 수 있습니다.

시스템은 보안 개체에 대한 토큰의 액세스를 검사할 때 SID 제한 목록을 사용합니다. 제한된 프로세스 또는 스레드가 보안 개체에 액세스하려고 하면 시스템은 두 가지 액세스 검사를 수행합니다. 하나는 토큰의 활성화된 SID를 사용하고 다른 하나는 SID 제한 목록을 사용합니다. 두 액세스 검사 모두 요청된 액세스 권한을 허용하는 경우에만 액세스 권한이 부여됩니다.

특성 변수는 논리 연산자에서 사용되는 경우 식 형식이어야 합니다. 그렇지 않으면 알 수 없음으로 평가됩니다.

예제

다음 예제에서는 클라이언트 컨텍스트 초기화의 예제에서 만든 클라이언트 컨텍스트에 SID 및 제한 SID를 추가합니다.

BOOL AddSidsToContext(AUTHZ_CLIENT_CONTEXT_HANDLE *phClientContext)
{
    AUTHZ_CLIENT_CONTEXT_HANDLE        NewContext = NULL;
    PSID                            pEveryoneSid = NULL;
    PSID                            pLocalSid = NULL;
    SID_AND_ATTRIBUTES                Sids;
    SID_AND_ATTRIBUTES                RestrictedSids;
    DWORD                            SidCount = 0;
    DWORD                            RestrictedSidCount = 0;

    //Create a PSID from the "Everyone" well-known SID.
    if(!ConvertStringSidToSid(L"S-1-1-0", &pEveryoneSid))
    {
        printf_s("ConvertStringSidToSid failed with %d\n", GetLastError());
        return FALSE;
    }

    //Create a PSID from the "Local" well-known SID.
    if(!ConvertStringSidToSid(L"S-1-2-0", &pLocalSid))
    {
        printf_s("ConvertStringSidToSid failed with %d\n", GetLastError);
        return FALSE;
    }

    //Set the members of the SID_AND_ATTRIBUTES structure to be added.
    Sids.Sid = pEveryoneSid;
    Sids.Attributes = SE_GROUP_ENABLED;

    //Set the members of the SID_AND_ATTRIBUTES structure for the restricting SID.
    RestrictedSids.Sid = pLocalSid;
    RestrictedSids.Attributes = SE_GROUP_ENABLED;

    

    //Create a new context with the new "Everyone" SID and "Local" restricting SID.
    if(!AuthzAddSidsToContext(
        *phClientContext,
        &Sids,
        1,
        &RestrictedSids,
        1,
        &NewContext))
    {
        printf_s("AuthzAddSidsToContext failed with %d\n", GetLastError());
        if(pEveryoneSid)
        {
            FreeSid(pEveryoneSid);
        }
        if(pLocalSid)
        {
            FreeSid(pLocalSid);
        }
        return FALSE;
    }

    if(pEveryoneSid)
        {
            FreeSid(pEveryoneSid);
        }
        if(pLocalSid)
        {
            FreeSid(pLocalSid);
        }
        
        AuthzFreeContext(*phClientContext);
        *phClientContext = NewContext;

    return TRUE;

}

액세스 검사 캐싱

Authz API를 사용하여 액세스 확인

클라이언트 컨텍스트 초기화

클라이언트 컨텍스트 쿼리