Core Model Reference¶
Generated page
Generated from ontology/core.ttl by npm run ontology:generate in app/api.
Do not edit it by hand: CI fails when it differs from the ontology. How to change the model:
Maintaining the Core Ontology.
Ontology https://identityatlas.io/ontology, version 2.4.0. Namespace https://identityatlas.io/ontology# (prefix ia:).
Download the Turtle file for Protégé, a triple store or any RDF/OWL tool: core.ttl.
A column is identified by the property of the same name: Principals.accountEnabled is
ia:accountEnabled (https://identityatlas.io/ontology#accountEnabled). One property serves every core table
that has a column of that name; its rdfs:domain lists them. Why the model looks like this, and what is not
in it: Core Ontology.
Type hierarchy and relationship types¶
classDiagram
direction LR
class AIAgent
class AccessPermission
class ActivityContext
class AdministrativeUnitContext
class Agent
class AppRegistration
class AppRole
class Application
class ApplicationOwnership
class ApplicationPermission
class AzureManagementGroup
class AzureResource
class AzureResourceGroup
class AzureRoleAssignment
class AzureScope
class AzureSubscription
class BusinessRole
class CRMRole
class Context
class ContextRecipeContext
class ControlPermission
class CostCenterContext
class DelegatedPermission
class DepartmentContext
class DutyContext
class Entitlement
class EntraDirectoryRole
class EntraGroupCategoryContext
class ExpertiseContext
class ExternalUser
class Group
class GroupOwnership
class Identity
class LocationContext
class LogicalApplicationContext
class ManagedIdentity
class ManagerHierarchyContext
class OrgUnitContext
class OrganisationalUnitContext
class OrganizationalUnit
class OrphanedAccountsContext
class Other
class Permission
class Person
class Principal
class PrincipalTypeContext
class Resource
class ResourceClusterContext
class ResourceOwnership
class ResourcePlaneContext
class ResourceRoleContext
class ResourceTypeContext
class RiskyAppConsentContext
class RiskyConsentContext
class SAPRole
class Scope
class ScopeContext
class Segment
class Service
class ServicePrincipal
class ServicePrincipalOwnership
class SharedMailbox
class Software
class System
class SystemMembershipContext
class TagContext
class TeamContext
class TechnicalRole
class UntypedResource
class User
class WorkloadIdentity
Agent <|-- AIAgent
Permission <|-- AccessPermission
TagContext <|-- ActivityContext
OrganizationalUnit <|-- AdministrativeUnitContext
Principal <|-- Agent
Application <|-- AppRegistration
TechnicalRole <|-- AppRole
Resource <|-- Application
ControlPermission <|-- ApplicationOwnership
AccessPermission <|-- ApplicationPermission
Scope <|-- AzureManagementGroup
Scope <|-- AzureResource
Scope <|-- AzureResourceGroup
TechnicalRole <|-- AzureRoleAssignment
Scope <|-- AzureScope
Scope <|-- AzureSubscription
Resource <|-- BusinessRole
TechnicalRole <|-- CRMRole
LogicalApplicationContext <|-- ContextRecipeContext
Permission <|-- ControlPermission
OrganizationalUnit <|-- CostCenterContext
AccessPermission <|-- DelegatedPermission
OrganizationalUnit <|-- DepartmentContext
TagContext <|-- DutyContext
AccessPermission <|-- Entitlement
TechnicalRole <|-- EntraDirectoryRole
Segment <|-- EntraGroupCategoryContext
TagContext <|-- ExpertiseContext
Person <|-- ExternalUser
Resource <|-- Group
ControlPermission <|-- GroupOwnership
Segment <|-- LocationContext
Context <|-- LogicalApplicationContext
Software <|-- ManagedIdentity
OrganizationalUnit <|-- ManagerHierarchyContext
OrganizationalUnit <|-- OrgUnitContext
OrganizationalUnit <|-- OrganisationalUnitContext
Context <|-- OrganizationalUnit
Segment <|-- OrphanedAccountsContext
Resource <|-- Other
Resource <|-- Permission
Principal <|-- Person
Segment <|-- PrincipalTypeContext
Segment <|-- ResourceClusterContext
ControlPermission <|-- ResourceOwnership
Segment <|-- ResourcePlaneContext
Segment <|-- ResourceRoleContext
Segment <|-- ResourceTypeContext
Segment <|-- RiskyAppConsentContext
Segment <|-- RiskyConsentContext
TechnicalRole <|-- SAPRole
Resource <|-- Scope
Segment <|-- ScopeContext
Context <|-- Segment
Application <|-- Service
Software <|-- ServicePrincipal
ControlPermission <|-- ServicePrincipalOwnership
Person <|-- SharedMailbox
Principal <|-- Software
Segment <|-- SystemMembershipContext
Context <|-- TagContext
OrganizationalUnit <|-- TeamContext
Resource <|-- TechnicalRole
AccessPermission <|-- UntypedResource
Person <|-- User
Software <|-- WorkloadIdentity
Resource --> Resource : Contains
Application --> DelegatedPermission : DelegatesScope
Resource --> Resource : GrantsAccessTo
Application --> ServicePrincipalOwnership : HasAppOwnership
Application --> ApplicationOwnership : HasAppOwnership
Application --> AppRole : HasAppRole
Application --> ApplicationPermission : HasApplicationPermission
Resource --> GroupOwnership : HasOwnership
Resource --> ResourceOwnership : HasOwnership
Principal --> Principal : Owner
Context --> Context : SameUnitAs
Principal --> Principal : Sponsor
Node tables¶
Contexts¶
ia:Context · Node table · A grouping of one kind of entity — a department, an OU, a tag, a cluster, a logical application. Synced, generated by a plugin, or manual. contextType is an open vocabulary; the values the application itself knows are its subclasses. A child context has the same targetType as its parent (the routes and plugins keep this, the database does not enforce it), and the tree is acyclic (enforced at commit by trg_Contexts_reject_cycle).
Written by the ingest API as contexts.
Identifier: id (uuid) — the instance IRI, not a property.
contextType is an open vocabulary — any value is accepted. These are the values Identity Atlas itself relies on:
| Value | Class | Template | Groups | Made by | Meaning |
|---|---|---|---|---|---|
Activity |
ia:ActivityContext |
Tag | Identity | application code | A business activity people perform (performsActivity), the object of an activity claim. Manual, under one root Activities (extendedAttributes.knowledgeRoot); created when a claim naming it is confirmed (Authorization workbench). |
AdministrativeUnit |
ia:AdministrativeUnitContext |
Organizational unit | Principal | crawler demo |
An Entra administrative unit. Only the demo dataset emits it; the Entra crawler does not sync administrative units. |
ContextRecipe |
ia:ContextRecipeContext |
Logical application | Resource | plugin context-recipe |
Resources matched by a recipe built in the context assistant, plus the ones pinned by hand. The type says how the context was built; its template (contextCategory) is chosen at save time, an application being the common case. |
CostCenter |
ia:CostCenterContext |
Organizational unit | Identity | crawler omada |
A cost center synced from Omada, grouping persons: an org dimension a manager recognises, so an organizational unit. |
Department |
ia:DepartmentContext |
Organizational unit | Identity, Principal | plugin department-from-principal; crawlers demo, omada |
One flat context per distinct Principals.department value (externalId 'dept: |
Duty |
ia:DutyContext |
Tag | Identity | application code | A duty people hold beside their daily work (holdsResponsibility: works council, fire warden, a project role), the object of a duty claim. Manual, under one root Duties. |
EntraGroupCategory |
ia:EntraGroupCategoryContext |
Segment | Resource | plugin entra-group-category-tree |
The Entra groups of one category (security, Microsoft 365, dynamic …). |
Expertise |
ia:ExpertiseContext |
Tag | Identity | application code | A domain people know (hasExpertise), the object of an expertise claim. Manual, under one root Expertise. |
Location |
ia:LocationContext |
Segment | Identity | crawler omada |
A work location synced from Omada, grouping persons. |
LogicalApplication |
ia:LogicalApplicationContext |
Logical application | Resource | crawlers demo, mssql |
An application as the business knows it, grouping the technical resources (entitlements, roles, groups) that belong to it. The SQL connector's IdentityIQ preset loads these from the application list. |
ManagerHierarchy |
ia:ManagerHierarchyContext |
Organizational unit | Principal | plugin manager-hierarchy |
One generated context per manager of one system's accounts, plus a synthetic root (externalId 'root'). The manager is recorded only in externalId, which holds the manager's Principal id — there is no manager column or member role. Members are the manager's direct reports (Principals.managerId, overridden per account by ManagerHierarchyOverrides); the manager is a member of their own manager's node, not of their own. parentContextId is the node of the manager's own manager, else the root. Accounts with no manager that manage nobody are members of the root; a top-level manager is a member of no node. A managerId that points at no account of the system still becomes a node, named 'Unknown'. A reporting cycle, a self-reference included, leaves a node without a parent: the runner refuses the link that would close the cycle. |
OrgUnit |
ia:OrgUnitContext |
Organizational unit | Identity | crawlers csv, midpoint, omada |
An organisational unit synced from an IGA or HR source, grouping persons; nested like the source's org tree. The default context type of the Omada, CSV and midPoint crawlers. Not the same value as the OrganisationalUnit the ad-ou-from-dn plugin derives from accounts. |
OrganisationalUnit |
ia:OrganisationalUnitContext |
Organizational unit | Principal | plugin ad-ou-from-dn |
An Active Directory OU derived from the accounts' distinguished names, nested like the directory. Crawlers that sync org units (Omada, CSV, midPoint) store 'OrgUnit' instead — a different value the ontology does not define. |
OrphanedAccounts |
ia:OrphanedAccountsContext |
Segment | Principal | plugin orphaned-accounts |
Accounts that are not linked to any identity. |
PrincipalType |
ia:PrincipalTypeContext |
Segment | Principal | plugin principal-type-tree |
The accounts of one principalType. |
ResourceCluster |
ia:ResourceClusterContext |
Segment | Resource | plugin resource-cluster |
Resources whose names cluster together. |
ResourcePlane |
ia:ResourcePlaneContext |
Segment | Resource | plugin resource-type-tree |
Control or data plane below a resource type group. |
ResourceRole |
ia:ResourceRoleContext |
Segment | Resource | plugin resource-type-tree |
One role name below a resource plane. |
ResourceType |
ia:ResourceTypeContext |
Segment | Resource | plugin resource-type-tree |
The resources of one resourceType. |
RiskyAppConsent |
ia:RiskyAppConsentContext |
Segment | Resource | plugin risky-consent |
Applications flagged as malicious (threat feed) or suspicious (heuristics). |
RiskyConsent |
ia:RiskyConsentContext |
Segment | Resource | plugin risky-consent |
Granted permissions of one risk tier (High, Medium, Low). |
Scope |
ia:ScopeContext |
Segment | Resource | plugin scope-hierarchy |
A node of the scope-hierarchy tree, the root included: one Azure scope (management group, subscription, resource group). The resource's own type is in extendedAttributes.resourceType. |
SystemMembership |
ia:SystemMembershipContext |
Segment | Principal, Resource | plugin system-membership-principals, system-membership-resources |
The accounts, or the resources, loaded from one system. |
Tag |
ia:TagContext |
Tag | Identity, Principal, Resource | application code | A manual label (variant 'manual') that the tags API reads and writes. One root per targetType holds them, itself a Tag marked extendedAttributes.tagRoot = true, which the tags API and the GraphTags view leave out. |
Team |
ia:TeamContext |
Organizational unit | Principal, Resource | crawler demo |
A team below a department, as its people or as the resources it administers (the two linked by sameUnitAs). Only the demo dataset emits it. |
Other values arrive from the source data or configuration of: csv, custom-connector, midpoint, mssql, omada.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
contextCategory |
ia:contextCategory |
text | OrganizationalUnit, LogicalApplication, Tag, Segment |
The template this context falls under. NULL for a synced value nobody has placed yet. |
contextType |
ia:contextType |
text | open vocabulary | What kind of grouping this is (Department, OrgUnit, Tag, Cluster, LogicalApplication, …). An open vocabulary. |
createdAt |
ia:createdAt |
timestamp with time zone | When the context row was created. | |
createdByUser |
ia:createdByUser |
text | The analyst who created a manual context. | |
description |
ia:description |
text | Free-text description. | |
directAssignmentCount |
ia:directAssignmentCount |
integer | Stored count of Direct (resource, holder) pairs over the resources in this context. | |
directMemberCount |
ia:directMemberCount |
integer | Stored count of direct members. | |
displayName |
ia:displayName |
text | Human-readable name. On IdentityMembers a copy of the account name. | |
eligibleAssignmentCount |
ia:eligibleAssignmentCount |
integer | Stored count of Eligible (resource, holder) pairs over the resources in this context. | |
extendedAttributes |
ia:extendedAttributes |
jsonb | Source-specific attributes that have no column of their own. | |
externalId |
ia:externalId |
text | The object's id in its source system. | |
holderCount |
ia:holderCount |
integer | Stored count of distinct holders over the resources in this context. | |
indirectAssignmentCount |
ia:indirectAssignmentCount |
integer | Stored count of Indirect (resource, holder) pairs over the resources in this context. | |
lastCalculatedAt |
ia:lastCalculatedAt |
timestamp with time zone | When the stored counts were last recalculated. | |
ownerUserId |
ia:ownerUserId |
text | Whatever the source calls the owner of the grouping (free text, resolved to a principal for display). | |
parentContextId |
ia:parentContextId |
uuid | → Contexts | The parent context in the tree. Ingest alias: parentExternalId. |
resourceCount |
ia:resourceCount |
integer | Stored count of resources in this context. | |
scopeSystemId |
ia:scopeSystemId |
integer | → Systems | The system a synced or generated context is scoped to. |
sourceAlgorithmId |
ia:sourceAlgorithmId |
uuid | The context-algorithm (ContextAlgorithms.id) that generated the context. ContextAlgorithms is outside the core model. | |
sourceInstanceKey |
ia:sourceInstanceKey |
text | Distinguishes several trees generated by one plugin on one system. | |
sourceRunId |
ia:sourceRunId |
uuid | The plugin run that generated the context. | |
targetType |
ia:targetType |
text | Identity, Resource, Principal, System |
Which kind of node the context groups. |
totalMemberCount |
ia:totalMemberCount |
integer | Stored count of members including sub-contexts. | |
updatedAt |
ia:updatedAt |
timestamp with time zone | When the row was last written by the ingest (full-sync reconcile cutoff). | |
userRenamed |
ia:userRenamed |
boolean | An analyst renamed this generated context; re-runs keep the name. | |
userReparented |
ia:userReparented |
boolean | An analyst moved this generated context; re-runs keep the placement. | |
variant |
ia:variant |
text | synced, generated, manual |
How the context came to exist. |
Identities¶
ia:Identity · Node table · A real person, aggregated from one or more accounts (principals) through IdentityMembers.
Written by the ingest API as identities.
Identifier: id (uuid) — the instance IRI, not a property.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
accountCount |
ia:accountCount |
integer | Number of accounts linked to this person. | |
accountTypes |
ia:accountTypes |
jsonb | The account categories this person holds. | |
analystNotes |
ia:analystNotes |
text | Free-text analyst notes on the person. | |
analystVerified |
ia:analystVerified |
boolean | An analyst has verified this person. | |
city |
ia:city |
text | The person's city. | |
companyName |
ia:companyName |
text | Company name. | |
country |
ia:country |
text | The person's country. | |
department |
ia:department |
text | Department name as a plain attribute (organisational placement itself is a Context). | |
displayName |
ia:displayName |
text | Human-readable name. On IdentityMembers a copy of the account name. | |
email |
ia:email |
text | E-mail address. | |
employeeId |
ia:employeeId |
text | Employee number. | |
extendedAttributes |
ia:extendedAttributes |
jsonb | Source-specific attributes that have no column of their own. | |
givenName |
ia:givenName |
text | Given name. | |
hrAccountId |
ia:hrAccountId |
text | The HR record id the person is anchored on. | |
isHrAnchored |
ia:isHrAnchored |
boolean | The person is anchored on an HR record. | |
jobTitle |
ia:jobTitle |
text | Job title. | |
linkConfidence |
ia:linkConfidence |
integer | Account Linking confidence score; NULL for crawler-sourced links. | |
linkSignals |
ia:linkSignals |
jsonb | The signals Account Linking matched on. | |
linkedAt |
ia:linkedAt |
timestamp with time zone | When Account Linking last linked the person. | |
managerIdentityId |
ia:managerIdentityId |
uuid | → Identities | The manager as a PERSON. Ingest alias: managerIdentityExternalId. |
officeLocation |
ia:officeLocation |
text | The person's office. | |
orphanStatus |
ia:orphanStatus |
text | Retired. Orphan-ness is the generated Orphaned Accounts context now; the column is kept in the schema for compatibility. | |
primaryPrincipalId |
ia:primaryPrincipalId |
uuid | → Principals | The person's primary account. |
surname |
ia:surname |
text | Surname. |
Principals¶
ia:Principal · Node table · An account in a source system: a user, service principal, managed identity, AI agent, guest, shared mailbox …
Written by the ingest API as principals.
Identifier: id (uuid) — the instance IRI, not a property.
principalType accepts exactly these values:
| Value | Class | Template | Made by | Meaning |
|---|---|---|---|---|
AIAgent |
ia:AIAgent |
Agent | crawlers demo, entra-id |
An AI agent (Copilot Studio, Azure OpenAI, a custom bot) that holds access as its own account. |
ExternalUser |
ia:ExternalUser |
Person | crawlers demo, omada |
A guest / B2B account from another organisation. |
ManagedIdentity |
ia:ManagedIdentity |
Software | crawlers demo, entra-id |
A system- or user-assigned identity attached to a cloud resource. |
ServicePrincipal |
ia:ServicePrincipal |
Software | crawlers demo, entra-id, omada |
The service principal of an application registration. |
SharedMailbox |
ia:SharedMailbox |
Person | crawler demo |
A shared, room or equipment mailbox account. Accepted from CSV, SQL, SCIM and midPoint sources; of the built-in sources only the demo dataset writes it. |
User |
ia:User |
Person | crawlers azure-rm, csv, demo, entra-id, midpoint, mssql, omada, scim |
An interactive human user account. |
WorkloadIdentity |
ia:WorkloadIdentity |
Software | no built-in source | A federated-credential identity used by a workload (a pipeline, a Kubernetes service account). Accepted from CSV, SQL, SCIM and midPoint sources; the Entra crawler deliberately does not classify accounts this way. |
Mapped onto this list from the source data or configuration by: csv, custom-connector, midpoint, mssql, omada, scim.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
accountEnabled |
ia:accountEnabled |
boolean | Whether the account can sign in. On IdentityMembers a copy taken when the link was made. | |
companyName |
ia:companyName |
text | Company name. | |
createdDateTime |
ia:createdDateTime |
timestamp with time zone | When the object was created in the source (PrincipalRelationships: when the row was created). | |
deletedAt |
ia:deletedAt |
timestamp with time zone | Soft-delete tombstone: set when the source stopped reporting the row; NULL while live. | |
department |
ia:department |
text | Department name as a plain attribute (organisational placement itself is a Context). | |
displayName |
ia:displayName |
text | Human-readable name. On IdentityMembers a copy of the account name. | |
email |
ia:email |
text | E-mail address. | |
employeeId |
ia:employeeId |
text | Employee number. | |
extendedAttributes |
ia:extendedAttributes |
jsonb | Source-specific attributes that have no column of their own. | |
externalId |
ia:externalId |
text | The object's id in its source system. | |
givenName |
ia:givenName |
text | Given name. | |
jobTitle |
ia:jobTitle |
text | Job title. | |
managerId |
ia:managerId |
uuid | → Principals | The manager's ACCOUNT. Ingest alias: managerExternalId. |
photo |
ia:photo |
bytea | Profile photo (sent base64 to the ingest). | |
photoContentType |
ia:photoContentType |
text | MIME type of the photo. | |
photoFetchedAt |
ia:photoFetchedAt |
timestamp with time zone | When the photo was last fetched; set with a NULL photo means "has none". | |
principalType |
ia:principalType |
text | User, ServicePrincipal, ManagedIdentity, WorkloadIdentity, AIAgent, ExternalUser, SharedMailbox |
The kind of account. On Principals it selects the subclass; on ResourceAssignments it is a denormalised copy of the holder's type. |
riskScore |
ia:riskScore |
integer | Latest risk score, denormalised from RiskScores. | |
riskTier |
ia:riskTier |
text | Latest risk tier, denormalised from RiskScores. | |
surname |
ia:surname |
text | Surname. | |
systemId |
ia:systemId |
integer | → Systems | The system that sourced the row. |
updatedAt |
ia:updatedAt |
timestamp with time zone | When the row was last written by the ingest (full-sync reconcile cutoff). |
Resources¶
ia:Resource · Node table · Anything that grants access — a group, a directory role, an app role, a permission — and also a business role (governance construct).
Written by the ingest API as resources.
Identifier: id (uuid) — the instance IRI, not a property.
resourceType is an open vocabulary — any value is accepted. These are the values Identity Atlas itself relies on:
| Value | Class | Template | Made by | Meaning |
|---|---|---|---|---|
AppRegistration |
ia:AppRegistration |
Application | crawler entra-id |
An app registration (id = application object id; appId joins it to its service principal). Grants nothing and has no assignments; carries the app's security set-up (credential metadata, redirect URIs, required resource access, federated credentials). |
AppRole |
ia:AppRole |
Technical role | crawlers demo, entra-id |
One app role of an application (one resource per application + appRoleId). |
Application |
ia:Application |
Application | crawlers demo, entra-id |
An enterprise application (service principal) as a resource. Grants nothing by itself; parent of its app roles and permissions. |
ApplicationOwnership |
ia:ApplicationOwnership |
Permission | crawlers demo, entra-id |
The owners of an app registration — they can add a credential and act as the app. |
ApplicationPermission |
ia:ApplicationPermission |
Permission | crawler entra-id |
One app-only (admin-consented) permission a service principal holds on another API. |
AzureManagementGroup |
ia:AzureManagementGroup |
Scope | crawler azure-rm |
An Azure management group; Contains the management groups and subscriptions below it. |
AzureResource |
ia:AzureResource |
Scope | crawlers azure-rm, demo |
One Azure resource. Its ARM type (Microsoft.Compute/virtualMachines …) is in extendedAttributes.azureResourceType, not in resourceType. |
AzureResourceGroup |
ia:AzureResourceGroup |
Scope | crawlers azure-rm, demo |
An Azure resource group; Contains its resources. |
AzureRoleAssignment |
ia:AzureRoleAssignment |
Technical role | crawlers azure-rm, demo |
One Azure RBAC role at one scope (role definition + scope); holders have it Direct, or Indirect through a group or an inherited scope. |
AzureScope |
ia:AzureScope |
Scope | crawlers azure-rm, demo |
The tenant root scope ('/') of Azure Resource Manager, above every management group. |
AzureSubscription |
ia:AzureSubscription |
Scope | crawler azure-rm |
An Azure subscription; Contains its resource groups. |
BusinessRole |
ia:BusinessRole |
Business role | crawlers csv, demo, entra-id, midpoint, mssql, omada |
A governance construct (Entra access package, Omada / midPoint business role). Contains the resources it grants; hidden from the matrix by default. |
CRMRole |
ia:CRMRole |
Technical role | crawler demo |
A role in a CRM system. Only the demo dataset emits it. |
DelegatedPermission |
ia:DelegatedPermission |
Permission | crawlers demo, entra-id |
One OAuth2 delegated scope granted to a client application on an API (one resource per client, API and scope). |
Entitlement |
ia:Entitlement |
Permission | crawlers midpoint, mssql |
A permission in a target application, as an IGA system records it (a midPoint entitlement shadow, an IdentityIQ entitlement). |
EntraDirectoryRole |
ia:EntraDirectoryRole |
Technical role | crawlers demo, entra-id |
One Entra directory role (id = roleDefinitionId); extendedAttributes holds its allowedResourceActions. |
Group |
ia:Group |
Group | crawlers demo, entra-id, scim |
A security or Microsoft 365 group. The effective-access engine expands membership through it. |
GroupOwnership |
ia:GroupOwnership |
Permission | crawlers demo, entra-id |
The owners of an Entra group. |
Resource |
ia:UntypedResource |
Permission | crawler omada |
A resource the source does not classify further. Omada's default for permissions; the source's own type is in extendedAttributes.resourceType. |
ResourceOwnership |
ia:ResourceOwnership |
Permission | crawler mssql |
The owners of a resource loaded by the SQL connector; the owned resource's own type is in extendedAttributes.ownedResourceType. |
SAPRole |
ia:SAPRole |
Technical role | crawler demo |
An SAP role. Only the demo dataset emits it; a real SAP source would arrive through CSV or SQL with a value of its own choosing. |
Service |
ia:Service |
Application | crawler midpoint |
A service (an application or system) as midPoint models it. |
ServicePrincipalOwnership |
ia:ServicePrincipalOwnership |
Permission | crawlers demo, entra-id |
The owners of an enterprise application's service principal. |
Other values arrive from the source data or configuration of: csv, custom-connector, midpoint, mssql, omada.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
capabilityId |
ia:capabilityId |
text | Generated from extendedAttributes.capabilityId for the effective-access engine. | |
catalogId |
ia:catalogId |
uuid | The governance catalog (GovernanceCatalogs.id) a business role belongs to. GovernanceCatalogs is outside the core model. | |
createdDateTime |
ia:createdDateTime |
timestamp with time zone | When the object was created in the source (PrincipalRelationships: when the row was created). | |
deletedAt |
ia:deletedAt |
timestamp with time zone | Soft-delete tombstone: set when the source stopped reporting the row; NULL while live. | |
description |
ia:description |
text | Free-text description. | |
displayName |
ia:displayName |
text | Human-readable name. On IdentityMembers a copy of the account name. | |
enabled |
ia:enabled |
boolean | Whether the system or resource is enabled. | |
extendedAttributes |
ia:extendedAttributes |
jsonb | Source-specific attributes that have no column of their own. | |
externalId |
ia:externalId |
text | The object's id in its source system. | |
governanceResource |
ia:governanceResource |
boolean | The resource is a governance construct that governs other access (business roles). | |
isHidden |
ia:isHidden |
boolean | Hidden from the default views. | |
mail |
ia:mail |
text | Mail address of a mail-enabled resource. | |
modifiedDateTime |
ia:modifiedDateTime |
timestamp with time zone | When the object was last modified in the source (PrincipalRelationships: when the row was last modified). | |
resourceType |
ia:resourceType |
text | open vocabulary | The kind of resource (open vocabulary). On Resources it selects the subclass; on ResourceAssignments it is a denormalised copy used to partition reconciles. |
riskScore |
ia:riskScore |
integer | Latest risk score, denormalised from RiskScores. | |
riskTier |
ia:riskTier |
text | Latest risk tier, denormalised from RiskScores. | |
systemId |
ia:systemId |
integer | → Systems | The system that sourced the row. |
targetNodeId |
ia:targetNodeId |
text | Generated from extendedAttributes.targetNodeId: the node a capability resource applies to. | |
updatedAt |
ia:updatedAt |
timestamp with time zone | When the row was last written by the ingest (full-sync reconcile cutoff). | |
visibility |
ia:visibility |
text | Visibility as the source reports it (Public / Private for groups). |
Systems¶
ia:System · Node table · A connected authorization source (Entra ID, Omada, a SQL database, a CSV feed …). Principals, resources and synced contexts belong to one system.
Written by the ingest API as systems.
Identifier: id (integer) — the instance IRI, not a property.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
assignmentTypes |
ia:assignmentTypes |
jsonb | Unused. Meant to list the assignment types a system emits. Nothing reads or writes it. | |
description |
ia:description |
text | Free-text description. | |
directorySystemId |
ia:directorySystemId |
integer | → Systems | The directory system whose principals this system references but does not own (Azure RM -> Entra ID). |
displayName |
ia:displayName |
text | Human-readable name. On IdentityMembers a copy of the account name. | |
enabled |
ia:enabled |
boolean | Whether the system or resource is enabled. | |
extendedAttributes |
ia:extendedAttributes |
jsonb | Source-specific attributes that have no column of their own. | |
lastSyncDateTime |
ia:lastSyncDateTime |
timestamp with time zone | When the system was last synced. | |
resourceTypes |
ia:resourceTypes |
jsonb | Unused. Meant to list the resource types a system emits. Nothing reads or writes it. | |
syncEnabled |
ia:syncEnabled |
boolean | Whether the system is synced. | |
systemType |
ia:systemType |
text | The connector kind (EntraID, Omada, CSV, …). Together with tenantId the system key. | |
tenantId |
ia:tenantId |
text | The tenant / instance the system connects to. |
Edge tables¶
ContextMembers¶
ia:ContextMember · Edge table · Membership of an identity, principal, resource or system in a context. memberType says which table memberId points at.
Written by the ingest API as context-members.
Edge: contextId → memberId.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
addedAt |
ia:addedAt |
timestamp with time zone | When the member was added. | |
addedBy |
ia:addedBy |
text | sync, algorithm, analyst, sourceOwner |
Who added the member. |
contextId |
ia:contextId |
uuid | → Contexts | The context. Ingest alias: contextExternalId. |
memberId |
ia:memberId |
uuid | → Identities / Resources / Principals / Systems | The member; memberType names its table. Ingest alias: memberExternalId. |
memberType |
ia:memberType |
text | Identity, Resource, Principal, System |
Which kind of node memberId is. |
ContextRelationships¶
ia:ContextRelationship · Edge table · A typed link between two contexts: two variants of one unit (its people, its accounts, its resources).
Identifier: id (uuid) — the instance IRI, not a property.
Edge: contextId → relatedContextId.
relationshipType accepts exactly these relationship types:
| Value | Property | From → to | Meaning |
|---|---|---|---|
SameUnitAs |
ia:sameUnitAs |
ia:Context → ia:Context | The two contexts are one unit seen through a different kind of member: Contoso as its people, its accounts, its resources. Symmetric; stored once per pair. Each side still holds one kind of member, and the two hold different kinds. |
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
addedBy |
ia:addedBy |
text | sync, algorithm, analyst, sourceOwner |
Who added the member. |
contextId |
ia:contextId |
uuid | → Contexts | The context. Ingest alias: contextExternalId. |
createdAt |
ia:createdAt |
timestamp with time zone | When the context row was created. | |
relatedContextId |
ia:relatedContextId |
uuid | → Contexts | The other context of the link. |
relationshipType |
ia:relationshipType |
text | SameUnitAs |
The relationship type: one of the ia:typeValue of the properties stored in this edge table. |
ContextRoles¶
ia:ContextRole · Edge table · Who answers for a context: one account (principalId) or one person (identityId) — exactly one — is Accountable (at most one per context) or Responsible for it. A context→person link, never access: it is not an assignment and grants nothing.
Identifier: id (uuid) — the instance IRI, not a property.
Edge: contextId → principalId or identityId.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
addedBy |
ia:addedBy |
text | sync, algorithm, analyst, sourceOwner |
Who added the member. |
contextId |
ia:contextId |
uuid | → Contexts | The context. Ingest alias: contextExternalId. |
createdAt |
ia:createdAt |
timestamp with time zone | When the context row was created. | |
identityId |
ia:identityId |
uuid | → Identities | The person. On ResourceAssignments set instead of principalId for person-level assignments; on ContextInterviews the interviewee, on ContextClaims the person the claim is about, when that is a person. Ingest alias: identityExternalId. |
principalId |
ia:principalId |
uuid | → Principals | The account. On ResourceAssignments NULL when identityId is set; on PrincipalRelationships the subject that HAS the owner / sponsor; on ContextInterviews the interviewee, on ContextClaims the account the claim is about. Ingest alias: principalExternalId, userExternalId. |
role |
ia:role |
text | Accountable, Responsible |
Accountable or Responsible. |
sourceClaimId |
ia:sourceClaimId |
uuid | → ContextClaims | The interview claim this role was confirmed from. NULL for every other role, and once the interview is deleted. |
updatedAt |
ia:updatedAt |
timestamp with time zone | When the row was last written by the ingest (full-sync reconcile cutoff). |
IdentityMembers¶
ia:IdentityMember · Edge table · Links a person (identity) to one of their accounts (principal), from a crawler or from Account Linking.
Written by the ingest API as identity-members.
Edge: identityId → principalId.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
accountEnabled |
ia:accountEnabled |
boolean | Whether the account can sign in. On IdentityMembers a copy taken when the link was made. | |
accountType |
ia:accountType |
text | Account category detected by Account Linking (Admin, Guest, Service, Shared, Secondary, …). | |
accountTypePattern |
ia:accountTypePattern |
text | The naming pattern that classified accountType. | |
analystOverride |
ia:analystOverride |
text | An analyst's verdict on a link (confirmed / rejected / moved); Account Linking honours it on every run. | |
displayName |
ia:displayName |
text | Human-readable name. On IdentityMembers a copy of the account name. | |
hrIndicators |
ia:hrIndicators |
jsonb | Signals that made this account look HR-authoritative. | |
hrScore |
ia:hrScore |
integer | How strongly this account looks like the HR record. | |
identityId |
ia:identityId |
uuid | → Identities | The person. On ResourceAssignments set instead of principalId for person-level assignments; on ContextInterviews the interviewee, on ContextClaims the person the claim is about, when that is a person. Ingest alias: identityExternalId. |
isHrAuthoritative |
ia:isHrAuthoritative |
boolean | This account is the HR-authoritative one. | |
isPrimary |
ia:isPrimary |
boolean | This is the person's primary account. | |
linkConfidence |
ia:linkConfidence |
integer | Account Linking confidence score; NULL for crawler-sourced links. | |
linkSignals |
ia:linkSignals |
jsonb | The signals Account Linking matched on. | |
principalId |
ia:principalId |
uuid | → Principals | The account. On ResourceAssignments NULL when identityId is set; on PrincipalRelationships the subject that HAS the owner / sponsor; on ContextInterviews the interviewee, on ContextClaims the account the claim is about. Ingest alias: principalExternalId, userExternalId. |
PrincipalRelationships¶
ia:PrincipalRelationship · Edge table · A responsibility link between two accounts: relatedPrincipalId is the Owner / Sponsor OF principalId.
Written by the ingest API as principal-relationships.
Edge: principalId → relatedPrincipalId.
relationshipType accepts exactly these relationship types:
| Value | Property | From → to | Meaning |
|---|---|---|---|
Owner |
ia:owner |
ia:Principal → ia:Principal | The object is an owner of the subject (typically of an AI agent or service principal). |
Sponsor |
ia:sponsor |
ia:Principal → ia:Principal | The object is a sponsor of the subject (typically of a guest account). |
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
createdDateTime |
ia:createdDateTime |
timestamp with time zone | When the object was created in the source (PrincipalRelationships: when the row was created). | |
extendedAttributes |
ia:extendedAttributes |
jsonb | Source-specific attributes that have no column of their own. | |
externalId |
ia:externalId |
text | The object's id in its source system. | |
modifiedDateTime |
ia:modifiedDateTime |
timestamp with time zone | When the object was last modified in the source (PrincipalRelationships: when the row was last modified). | |
principalId |
ia:principalId |
uuid | → Principals | The account. On ResourceAssignments NULL when identityId is set; on PrincipalRelationships the subject that HAS the owner / sponsor; on ContextInterviews the interviewee, on ContextClaims the account the claim is about. Ingest alias: principalExternalId, userExternalId. |
relatedPrincipalId |
ia:relatedPrincipalId |
uuid | → Principals | The owner / sponsor. Ingest alias: relatedPrincipalExternalId. |
relationshipType |
ia:relationshipType |
text | Owner, Sponsor |
The relationship type: one of the ia:typeValue of the properties stored in this edge table. |
systemId |
ia:systemId |
integer | → Systems | The system that sourced the row. |
updatedAt |
ia:updatedAt |
timestamp with time zone | When the row was last written by the ingest (full-sync reconcile cutoff). |
ResourceAssignments¶
ia:ResourceAssignment · Edge table · Who holds what: one account (principalId) or one person (identityId) — exactly one of the two — holds one resource, Direct / Indirect / Eligible, optionally governed.
Written by the ingest API as resource-assignments, resource-assignments-identity.
Edge: principalId or identityId → resourceId.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
assignmentStatus |
ia:assignmentStatus |
text | The source system's own status word for the assignment. | |
assignmentType |
ia:assignmentType |
text | Direct, Indirect, Eligible |
How the access is held. |
complianceState |
ia:complianceState |
text | The source system's compliance verdict for the assignment. | |
deletedAt |
ia:deletedAt |
timestamp with time zone | Soft-delete tombstone: set when the source stopped reporting the row; NULL while live. | |
effect |
ia:effect |
text | allow, deny, eligible, notset |
What the assignment does to effective access. |
expirationDateTime |
ia:expirationDateTime |
timestamp with time zone | When the assignment expires. | |
extendedAttributes |
ia:extendedAttributes |
jsonb | Source-specific attributes that have no column of their own. | |
governed |
ia:governed |
boolean | The row is governance intent (a business-role / access-package assignment) rather than observed access. Part of the key. | |
identityId |
ia:identityId |
uuid | → Identities | The person. On ResourceAssignments set instead of principalId for person-level assignments; on ContextInterviews the interviewee, on ContextClaims the person the claim is about, when that is a person. Ingest alias: identityExternalId. |
origin |
ia:origin |
text | Automatic, Requested, Discovered |
Where the assignment came from, as the source records it. Optional. |
originDetail |
ia:originDetail |
text | The source's own word for the origin. | |
policyId |
ia:policyId |
uuid | The assignment policy (AssignmentPolicies.id) behind a governed assignment. AssignmentPolicies is outside the core model. | |
principalId |
ia:principalId |
uuid | → Principals | The account. On ResourceAssignments NULL when identityId is set; on PrincipalRelationships the subject that HAS the owner / sponsor; on ContextInterviews the interviewee, on ContextClaims the account the claim is about. Ingest alias: principalExternalId, userExternalId. |
principalType |
ia:principalType |
text | The kind of account. On Principals it selects the subclass; on ResourceAssignments it is a denormalised copy of the holder's type. | |
propagationScope |
ia:propagationScope |
text | self, descendants, selfAndDescendants |
Where along a containment hierarchy the assignment applies. |
resourceId |
ia:resourceId |
uuid | → Resources | The resource that is held. Ingest alias: resourceExternalId. |
resourceType |
ia:resourceType |
text | The kind of resource (open vocabulary). On Resources it selects the subclass; on ResourceAssignments it is a denormalised copy used to partition reconciles. | |
state |
ia:state |
text | The source system's state word for the assignment (for example Delivered). | |
systemId |
ia:systemId |
integer | → Systems | The system that sourced the row. |
updatedAt |
ia:updatedAt |
timestamp with time zone | When the row was last written by the ingest (full-sync reconcile cutoff). |
ResourceRelationships¶
ia:ResourceRelationship · Edge table · A typed link from a parent resource to a child resource.
Written by the ingest API as resource-relationships.
Edge: parentResourceId → childResourceId.
relationshipType accepts exactly these relationship types:
| Value | Property | From → to | Meaning |
|---|---|---|---|
Contains |
ia:contains |
ia:Resource → ia:Resource | The child is part of the parent: a business role's granted resources, a scope inside a scope. Holding the parent reaches the child. |
DelegatesScope |
ia:delegatesScope |
ia:Application → ia:DelegatedPermission | A client application and a delegated permission it was granted. |
GrantsAccessTo |
ia:grantsAccessTo |
ia:Resource → ia:Resource | Holding the parent implies access to the child. Emitted by the CSV and SQL connectors and the demo dataset; no built-in crawler uses it. |
HasAppOwnership |
ia:hasAppOwnership |
ia:Application → ia:ServicePrincipalOwnership / ia:ApplicationOwnership | Same meaning as hasOwnership, for applications. A separate value only so the group-owner full sync cannot reconcile app-owner links away. |
HasAppRole |
ia:hasAppRole |
ia:Application → ia:AppRole | An application and one of its app roles. |
HasApplicationPermission |
ia:hasApplicationPermission |
ia:Application → ia:ApplicationPermission | A client application and an app-only permission it holds. |
HasOwnership |
ia:hasOwnership |
ia:Resource → ia:GroupOwnership / ia:ResourceOwnership | An owned resource and the ownership resource whose holders are its owners (Entra groups, SQL-connector resources). |
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
childResourceId |
ia:childResourceId |
uuid | → Resources | The child (target) resource. Ingest alias: childExternalId. |
extendedAttributes |
ia:extendedAttributes |
jsonb | Source-specific attributes that have no column of their own. | |
parentResourceId |
ia:parentResourceId |
uuid | → Resources | The parent (source) resource. Ingest alias: parentExternalId. |
relationshipType |
ia:relationshipType |
text | Contains, GrantsAccessTo, HasAppRole, DelegatesScope, HasApplicationPermission, HasOwnership, HasAppOwnership |
The relationship type: one of the ia:typeValue of the properties stored in this edge table. |
roleName |
ia:roleName |
text | The role the child plays inside the parent (for example the access-package resource role). | |
roleOriginSystem |
ia:roleOriginSystem |
text | Where that role is defined. | |
systemId |
ia:systemId |
integer | → Systems | The system that sourced the row. |
updatedAt |
ia:updatedAt |
timestamp with time zone | When the row was last written by the ingest (full-sync reconcile cutoff). |
Knowledge tables¶
What a source said about the graph, with provenance — not part of the graph, and never a way of holding access.
ChangeRequests¶
ia:ChangeRequest · Knowledge table · What should change in a source that an analyst's decision overrides: which source (targetSystemId, its name when raised), which kind of change (changeKind), about what (a context, a member, an attribute, with their names when raised), resting on which claim and override. The override acts in Identity Atlas at once; the request records the correction still owed to the source, because the source's next sync or re-import would bring the old fact back. Raised only where a source can be corrected (a context synced from a system or an uploaded list), never for a context Identity Atlas owns. Nobody closes it by hand: it is resolved when the data shows the change, and withdrawn when the decision is undone. At most one open request per change.
Identifier: id (uuid) — the instance IRI, not a property.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
attribute |
ia:attribute |
text | A property claim's attribute name; a role claim's relation as said (owner, notOwner, dayToDay, delegate, member, other); a membership claim's status (current, former, joined, left, rejoined). On a change request (AttributeUpdate): the attribute to change in the source. | |
basisClaimId |
ia:basisClaimId |
uuid | → ContextClaims | The claim whose decision raised it. Cleared when its interview is deleted; the request stays. |
changeKind |
ia:changeKind |
text | EntityCreate, EntityDelete, RelationshipAdd, RelationshipRemove, AttributeUpdate |
What kind of change the source should make. |
closedAt |
ia:closedAt |
timestamp with time zone | When it was resolved or withdrawn; empty exactly while it is open. | |
closedReason |
ia:closedReason |
text | Why it was closed, in one sentence. | |
contextId |
ia:contextId |
uuid | → Contexts | The context. Ingest alias: contextExternalId. |
contextName |
ia:contextName |
text | The context's name when the request was raised. | |
currentValue |
ia:currentValue |
text | For an AttributeUpdate: what the source says now. | |
expectedValue |
ia:expectedValue |
text | For an AttributeUpdate: what the source should say. | |
memberId |
ia:memberId |
uuid | → Identities / Resources / Principals / Systems | The member; memberType names its table. Ingest alias: memberExternalId. |
memberName |
ia:memberName |
text | The member's name when the request was raised. | |
overrideId |
ia:overrideId |
uuid | → ContextMemberOverrides | The override that acts in Identity Atlas until the source is corrected. |
raisedAt |
ia:raisedAt |
timestamp with time zone | When it was raised, or last raised again. | |
raisedBy |
ia:raisedBy |
text | Who made the decision that raised it. | |
requestStatus |
ia:requestStatus |
text | open, resolved, withdrawn |
Where the request stands. |
summary |
ia:summary |
text | One line a person can act on, such as: Remove Led from Klanten. | |
targetName |
ia:targetName |
text | The source's name when the request was raised. | |
targetSystemId |
ia:targetSystemId |
integer | → Systems | The source to correct: the system or uploaded list the context is synced from. Cleared when the system is removed. |
ContextClaims¶
ia:Claim · Knowledge table · A statement an interview makes about a subject — the context itself (subjectKind Context) or a person (Person: the account or person it was matched to, and always the name as spoken) — of one claimKind (description, property, role, roleHistory, membership, alias, activity, expertise, duty), with its value, the period it is about (from / to, or vague text), the verbatim quote it rests on and a confidence. Proposed until someone decides it (claimStatus confirmed, edited or rejected). A confirmed role claim with a roleSuggestion becomes an ia:ContextRole whose sourceClaimId is the claim; a confirmed description or property claim is written to the context. A claim never creates access.
Identifier: id (uuid) — the instance IRI, not a property.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
attribute |
ia:attribute |
text | A property claim's attribute name; a role claim's relation as said (owner, notOwner, dayToDay, delegate, member, other); a membership claim's status (current, former, joined, left, rejoined). On a change request (AttributeUpdate): the attribute to change in the source. | |
claimKind |
ia:claimKind |
text | description, property, role, roleHistory, membership, alias, activity, expertise, duty |
What the claim states. |
claimStatus |
ia:claimStatus |
text | proposed, confirmed, edited, rejected |
Where the claim stands in review. |
confidence |
ia:confidence |
numeric | How clearly the transcript states it, 0 to 1. Not a decision. | |
contextId |
ia:contextId |
uuid | → Contexts | The context. Ingest alias: contextExternalId. |
createdAt |
ia:createdAt |
timestamp with time zone | When the context row was created. | |
decidedAt |
ia:decidedAt |
timestamp with time zone | When it was decided. | |
decidedBy |
ia:decidedBy |
text | Who decided it. | |
identityId |
ia:identityId |
uuid | → Identities | The person. On ResourceAssignments set instead of principalId for person-level assignments; on ContextInterviews the interviewee, on ContextClaims the person the claim is about, when that is a person. Ingest alias: identityExternalId. |
interviewId |
ia:interviewId |
uuid | → ContextInterviews | The interview that makes the claim. |
objectContextId |
ia:objectContextId |
uuid | → Contexts | What an activity, expertise or duty claim is about: an Activity, Expertise or Duty context. Set when the claim is confirmed (found by name, or created); NULL for every other claim and when the object is deleted. |
periodFrom |
ia:periodFrom |
date | The start of the period the claim is about, when the interview gives one. | |
periodText |
ia:periodText |
text | The period as said (early years, now). | |
periodTo |
ia:periodTo |
date | The end of the period the claim is about, when the interview gives one. | |
principalId |
ia:principalId |
uuid | → Principals | The account. On ResourceAssignments NULL when identityId is set; on PrincipalRelationships the subject that HAS the owner / sponsor; on ContextInterviews the interviewee, on ContextClaims the account the claim is about. Ingest alias: principalExternalId, userExternalId. |
proposedBy |
ia:proposedBy |
text | model, analyst |
Who proposed the claim. |
quote |
ia:quote |
text | The words of the transcript the claim rests on, verbatim. | |
quoteEnd |
ia:quoteEnd |
integer | Where the quote ends in the stored transcript (exclusive). | |
quoteStart |
ia:quoteStart |
integer | Where the quote starts in the stored transcript (a string offset), for the transcript view. NULL when not found. | |
relevance |
ia:relevance |
text | high, low |
How much the claim matters for identity and access governance, by fixed rules and the model's own tier. NULL (before tiers) reads as high. |
roleSuggestion |
ia:roleSuggestion |
text | Accountable, Responsible |
The ContextRole a confirmed role claim becomes, by fixed rules on its relation. |
subjectKind |
ia:subjectKind |
text | Context, Person |
Whether the claim is about the context or a person. |
subjectMatch |
ia:subjectMatch |
text | interviewee, key, name, fuzzy, firstName |
How the person was matched; NULL when they were not. |
subjectName |
ia:subjectName |
text | The person as named in the interview, matched or not. | |
value |
ia:value |
text | What the claim says. |
ContextInterviews¶
ia:Interview · Knowledge table · A conversation with one person (the interviewee: an account or a person) about one context — an organizational unit or a logical application — on one date, kept as its transcript. What it says becomes claims.
Identifier: id (uuid) — the instance IRI, not a property.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
contextId |
ia:contextId |
uuid | → Contexts | The context. Ingest alias: contextExternalId. |
createdAt |
ia:createdAt |
timestamp with time zone | When the context row was created. | |
createdBy |
ia:createdBy |
text | Who uploaded it. | |
extractionMessage |
ia:extractionMessage |
text | Why a run failed, or what a finished run left out. | |
extractionStartedAt |
ia:extractionStartedAt |
timestamp with time zone | When the last run started. | |
extractionStatus |
ia:extractionStatus |
text | pending, running, done, failed, notConfigured |
How far reading it with the local model got. |
fileName |
ia:fileName |
text | The transcript file as uploaded. | |
identityId |
ia:identityId |
uuid | → Identities | The person. On ResourceAssignments set instead of principalId for person-level assignments; on ContextInterviews the interviewee, on ContextClaims the person the claim is about, when that is a person. Ingest alias: identityExternalId. |
interviewedAt |
ia:interviewedAt |
date | When the interview took place. | |
intervieweeName |
ia:intervieweeName |
text | The interviewee's name when the transcript was uploaded; the source keeps it after a crawl removes the account. | |
language |
ia:language |
text | The language of the transcript (en, nl). | |
model |
ia:model |
text | The model that read it. | |
principalId |
ia:principalId |
uuid | → Principals | The account. On ResourceAssignments NULL when identityId is set; on PrincipalRelationships the subject that HAS the owner / sponsor; on ContextInterviews the interviewee, on ContextClaims the account the claim is about. Ingest alias: principalExternalId, userExternalId. |
transcript |
ia:transcript |
text | The transcript as plain text, one line per turn; every quote is a verbatim part of it. |
ContextMemberOverrides¶
ia:MemberOverride · Knowledge table · An analyst's decision that a person the member list (its source) still lists is a former member of the context: a contradiction 'left, but still listed' decided 'the interview is right'. It sits on top of ia:ContextMember and never changes it (the source would add the row back): the members list leaves the person out of the current members, the People overview shows them as left (decided) with the decision. One per context and member, with the claim it rests on, the source it overrides, who and when. Undone, it is deleted. It never removes access.
Identifier: id (uuid) — the instance IRI, not a property.
| Column | Property | SQL type | Values / references | Description |
|---|---|---|---|---|
claimId |
ia:claimId |
uuid | → ContextClaims | The claim the decision was made on; deleting its interview deletes the override with it. |
contextId |
ia:contextId |
uuid | → Contexts | The context. Ingest alias: contextExternalId. |
decidedAt |
ia:decidedAt |
timestamp with time zone | When it was decided. | |
decidedBy |
ia:decidedBy |
text | Who decided it. | |
memberId |
ia:memberId |
uuid | → Identities / Resources / Principals / Systems | The member; memberType names its table. Ingest alias: memberExternalId. |
overrides |
ia:overrides |
text | The source whose member list the decision overrides, by its name when decided (an upload, a system, the rule that derives it, the member list kept by hand). |
Value lists¶
Assignment effect¶
ia:AssignmentEffect — What an assignment does to effective access (read by the effective-access engine). Used by ResourceAssignments.effect.
| Value | Individual | Meaning |
|---|---|---|
allow |
ia:AssignmentEffect_allow |
A concrete grant. |
deny |
ia:AssignmentEffect_deny |
An explicit deny. |
eligible |
ia:AssignmentEffect_eligible |
Potential access only; excluded from effective answers. |
notset |
ia:AssignmentEffect_notset |
Neither grants nor denies. |
Assignment origin¶
ia:AssignmentOrigin — Where an assignment came from, as the source records it. Optional. Used by ResourceAssignments.origin.
| Value | Individual | Meaning |
|---|---|---|
Automatic |
ia:AssignmentOrigin_Automatic |
Assigned by a rule or birthright policy. |
Requested |
ia:AssignmentOrigin_Requested |
Assigned through an access request. |
Discovered |
ia:AssignmentOrigin_Discovered |
Found on the target system without a recorded reason. |
Assignment type¶
ia:AssignmentType — How an assignment is held. Only these three values exist; ownership, governance and source detail are modelled elsewhere. Used by ResourceAssignments.assignmentType.
| Value | Individual | Meaning |
|---|---|---|
Direct |
ia:AssignmentType_Direct |
Held directly: a membership, a directly assigned app role, an OAuth2 grant, an ownership. |
Indirect |
ia:AssignmentType_Indirect |
Inherited through another resource (an app role held via a group, a nested group). Stored, not inferred. |
Eligible |
ia:AssignmentType_Eligible |
Granted but not active (PIM-eligible): can be activated. |
Change kind¶
ia:ChangeKind — The kind of change a change request asks of its source: an entity, a relationship or an attribute. Used by ChangeRequests.changeKind.
| Value | Individual | Meaning |
|---|---|---|
EntityCreate |
ia:ChangeKind_EntityCreate |
The source misses something that exists. |
EntityDelete |
ia:ChangeKind_EntityDelete |
The source lists something that no longer exists. |
RelationshipAdd |
ia:ChangeKind_RelationshipAdd |
The source should link the member to the context. |
RelationshipRemove |
ia:ChangeKind_RelationshipRemove |
The source should no longer link the member to the context: a person marked former by a decision. |
AttributeUpdate |
ia:ChangeKind_AttributeUpdate |
An attribute in the source should read expectedValue instead of currentValue. |
Change request status¶
ia:ChangeRequestStatus — Where a change request stands. Set by the data and the decisions, not by hand. Used by ChangeRequests.requestStatus.
| Value | Individual | Meaning |
|---|---|---|
open |
ia:ChangeRequestStatus_open |
The source does not show the change yet. |
resolved |
ia:ChangeRequestStatus_resolved |
The source shows the change: the member is no longer listed, or the context is gone. |
withdrawn |
ia:ChangeRequestStatus_withdrawn |
The decision it rested on was undone, or a later decision contradicts it. |
Claim kind¶
ia:ClaimKind — What a claim states. Used by ContextClaims.claimKind.
| Value | Individual | Meaning |
|---|---|---|
description |
ia:ClaimKind_description |
What the context is, in words. Confirmed, it is added to the description. |
property |
ia:ClaimKind_property |
One fact about the context, under an attribute name. Confirmed, it sets that extended attribute. |
role |
ia:ClaimKind_role |
What a person is to the context (the relation as said: owner, notOwner, dayToDay, delegate, member, other). With a roleSuggestion, confirmed, it becomes a ContextRole. |
roleHistory |
ia:ClaimKind_roleHistory |
A role a person held at the context over a period. Knowledge only. |
membership |
ia:ClaimKind_membership |
Whether a person is in the context: the status (current, former, joined, left, rejoined) in attribute, with the period. Knowledge only: confirming it never changes the context's members, which come from their source. |
alias |
ia:ClaimKind_alias |
Another name the context goes by. Confirmed, it is added to the context's extendedAttributes.aliases. |
activity |
ia:ClaimKind_activity |
performsActivity: a person performs a business activity (value: its name). Confirmed, the claim names its object, an ia:ActivityContext (objectContextId). Knowledge only: it informs role engineering and never grants access. |
expertise |
ia:ClaimKind_expertise |
hasExpertise: a person has knowledge of a domain (value: its name). Confirmed, the claim names its object, an ia:ExpertiseContext. Knowledge only. |
duty |
ia:ClaimKind_duty |
holdsResponsibility: a person holds a duty outside or across their daily work — works council, fire warden, a project role (value: its name). Called duty so it is never read as the ContextRole Responsible. Confirmed, the claim names its object, an ia:DutyContext. Knowledge only. |
Claim proposer¶
ia:ClaimProposer — Who proposed a claim. Used by ContextClaims.proposedBy.
| Value | Individual | Meaning |
|---|---|---|
model |
ia:ClaimProposer_model |
The local model, reading the transcript. |
analyst |
ia:ClaimProposer_analyst |
An analyst, by hand. |
Claim relevance¶
ia:ClaimRelevance — How much a claim matters for identity and access governance. Used by ContextClaims.relevance.
| Value | Individual | Meaning |
|---|---|---|
high |
ia:ClaimRelevance_high |
Matters for who should have access to what: people, roles, membership, aliases, facts that affect access. |
low |
ia:ClaimRelevance_low |
True, but changes nothing about access. Folded away in review. |
Claim status¶
ia:ClaimStatus — Where a claim stands in review. Used by ContextClaims.claimStatus.
| Value | Individual | Meaning |
|---|---|---|
proposed |
ia:ClaimStatus_proposed |
Not decided yet. |
confirmed |
ia:ClaimStatus_confirmed |
Confirmed as said. |
edited |
ia:ClaimStatus_edited |
Confirmed with a changed value or period. |
rejected |
ia:ClaimStatus_rejected |
Rejected. |
Claim subject¶
ia:ClaimSubjectKind — What a claim is about. Used by ContextClaims.subjectKind.
| Value | Individual | Meaning |
|---|---|---|
Context |
ia:ClaimSubjectKind_Context |
The context the interview is about. |
Person |
ia:ClaimSubjectKind_Person |
A person named in the interview. |
Context category¶
ia:ContextCategory — The template a context falls under, stored per row (Contexts.contextCategory). Each value denotes the ia:template class of that name. Used by Contexts.contextCategory.
| Value | Individual | Meaning |
|---|---|---|
OrganizationalUnit |
ia:ContextCategory_OrganizationalUnit |
Organisation structure. |
LogicalApplication |
ia:ContextCategory_LogicalApplication |
An application as the business knows it. |
Tag |
ia:ContextCategory_Tag |
A manual label. |
Segment |
ia:ContextCategory_Segment |
A grouping by an attribute or an analysis. |
Context role¶
ia:ContextRoleType — What a person is to a context. Only an OrganizationalUnit or a LogicalApplication carries roles. Used by ContextClaims.roleSuggestion, ContextRoles.role.
| Value | Individual | Meaning |
|---|---|---|
Accountable |
ia:ContextRoleType_Accountable |
Answers for the unit or application: its manager or owner. At most one per context. |
Responsible |
ia:ContextRoleType_Responsible |
Does the work the accountable person delegated. Any number per context. |
Context variant¶
ia:ContextVariant — How a context came to exist. Used by Contexts.variant.
| Value | Individual | Meaning |
|---|---|---|
synced |
ia:ContextVariant_synced |
Ingested from a source system. |
generated |
ia:ContextVariant_generated |
Emitted by a context-algorithm plugin. |
manual |
ia:ContextVariant_manual |
Curated by an analyst (tags included). |
Entity kind¶
ia:EntityKind — The kind of node a context groups (targetType) or a context member is (memberType). Used by ContextMembers.memberType, Contexts.targetType.
| Value | Individual | Meaning |
|---|---|---|
Identity |
ia:EntityKind_Identity |
Members are identities. |
Resource |
ia:EntityKind_Resource |
Members are resources. |
Principal |
ia:EntityKind_Principal |
Members are principals. |
System |
ia:EntityKind_System |
Members are systems. Note: memberId is a uuid and Systems.id an integer, so a System member row cannot reference a system by id. |
Extraction status¶
ia:ExtractionStatus — How far reading an interview with the local model got. Used by ContextInterviews.extractionStatus.
| Value | Individual | Meaning |
|---|---|---|
pending |
ia:ExtractionStatus_pending |
Waiting to be read. |
running |
ia:ExtractionStatus_running |
Being read. |
done |
ia:ExtractionStatus_done |
Read; its claims wait for review. |
failed |
ia:ExtractionStatus_failed |
Reading failed; the message says why. It can be retried. |
notConfigured |
ia:ExtractionStatus_notConfigured |
No local model is configured; claims are added by hand. |
Membership source¶
ia:MembershipSource — Who put a member into a context. Used by ContextMembers.addedBy, ContextRelationships.addedBy, ContextRoles.addedBy.
| Value | Individual | Meaning |
|---|---|---|
sync |
ia:MembershipSource_sync |
A crawler. |
algorithm |
ia:MembershipSource_algorithm |
A context-algorithm plugin. |
analyst |
ia:MembershipSource_analyst |
An analyst, by hand. |
sourceOwner |
ia:MembershipSource_sourceOwner |
The owner a synced context's source names (ownerUserId), stated as its Accountable by the contexts ingest and kept in step on every sync. Only the ingest writes it, and it replaces or removes only these rows. |
Propagation scope¶
ia:PropagationScope — Where along a containment hierarchy an assignment applies. Used by ResourceAssignments.propagationScope.
| Value | Individual | Meaning |
|---|---|---|
self |
ia:PropagationScope_self |
Only at the assigned resource. |
descendants |
ia:PropagationScope_descendants |
Only below the assigned resource. |
selfAndDescendants |
ia:PropagationScope_selfAndDescendants |
At the assigned resource and everything below it (the default). |
Subject match¶
ia:SubjectMatch — How the person a claim names was matched to an account or a person. Used by ContextClaims.subjectMatch.
| Value | Individual | Meaning |
|---|---|---|
interviewee |
ia:SubjectMatch_interviewee |
The interviewee, speaking about themselves. |
key |
ia:SubjectMatch_key |
By an identifier (e-mail, employee id, external id), or chosen by an analyst. |
name |
ia:SubjectMatch_name |
By the normalised name, the one candidate with it. |
fuzzy |
ia:SubjectMatch_fuzzy |
By a near miss of the name. To be checked. |
firstName |
ia:SubjectMatch_firstName |
By a first name alone, the one person the context knows with it. To be checked. |