Skip to main content

Core Data Collection Tables

All SA_FSAA_* tables are partitioned by HOST INT (FK → SA_FSAA_Hosts.ID) with ON DELETE CASCADE so that removing a host purges its data set. Within a host, identifiers (ID, RightsProxyID, etc.) are assigned by the FSAA bulk-import pipeline.


FSAA Tables

SA_FSAA_SchemaVer

Description: Single-row table holding the FSAA schema version string. The CREATE-Schema job clears and re-inserts the version on every run. Used by upgrades to decide whether to apply migrations.

Column NameData TypeSizeNullablePKFKDefaultDescription
SchemaVervarchar64NoSchema version (current value 8.0.11)

No primary key, foreign keys, or indexes.


SA_FSAA_Hosts

Description: Registry of every host scanned by FSAA. One row per host. The integer ID is the FK target for every other FSAA table's HOST column. USN/AccessUSN/ActivityUSN/DLPUSN are per-scan-type Update Sequence Numbers used by the C# importer to detect deltas; the matching *GUID columns identify the SQLite cache that produced the last upload.

Column NameData TypeSizeNullablePKFKDefaultDescription
IDintNoPKIDENTITY(1,1)Surrogate host ID — referenced by every FSAA table
HOSTnvarchar64NoHost name (NetBIOS / FQDN). Has unique constraint
SAConsolenvarchar64NoConsole host that initiated the scan
ScanTimedatetimeNoTime of most recent scan
GUIDvarchar38No''Top-level scan correlation GUID
USNintNo-1Top-level Update Sequence Number for the structural scan
AccessUSNintNo-1USN tracking the latest Access (FSAA) data import
AccessGUIDvarchar38No''Correlation GUID for the latest Access scan
ActivityUSNintNo-1USN tracking the latest Activity (FSAC) data import
ActivityGUIDvarchar38No''Correlation GUID for the latest Activity scan
DLPUSNintNo-1USN tracking the latest DLP scan
DLPGUIDvarchar38No''Correlation GUID for the latest DLP scan
LastScanHostnvarchar64YesHostname of machine that performed the last scan

Primary Key: PK_SA_FSAA_Hosts — clustered on (ID)

Unique Constraints: UQ_SA_FSAA_Hosts_HOST — unique on (HOST)


SA_FSAA_ImportHistory

Description: Append-only history of every successful data import for each host. One row per host per import per scan type.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost that the import covered
GUIDvarchar38NoCorrelation GUID for the imported scan
USNintNoUSN observed at import time
ScanTypevarchar32NoOne of Access, Activity, DLP
ImportTimedatetimeNoPKCURRENT_TIMESTAMPWhen the import ran

Primary Key: PK_SA_FSAA_ImportHistory — clustered on (HOST, ImportTime)

Foreign Keys:

  • FK_SA_FSAA_ImportHistory_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE

SA_FSAA_Trustees

Description: Every distinct security principal observed in ACLs on a host, identified by (HOST, ID). This table holds only the SID and the TrusteeType enumeration; human-readable name fields live in SA_FSAA_LocalTrustees (for local accounts) or are looked up from the AD inventory at view time.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
IDintNoPKPer-host trustee ID
SIDvarchar184NoSecurity identifier (string form, e.g. S-1-5-21-...)
TrusteeTypesmallintNoSee TrusteeType enumeration

Primary Key: PK_SA_FSAA_Trustees — clustered on (HOST, ID)

Foreign Keys:

  • FK_SA_FSAA_Trustees_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE

SA_FSAA_LocalTrustees

Description: Subset of SA_FSAA_Trustees: the local accounts and groups that exist on the scanned host (NT-style domain/name plus display name). (HOST, ID) is a foreign key into SA_FSAA_Trustees. IsDisabled is stored as 'Y'/'N'.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Trustees.HOSTHost partition
IDintNoPKFK → SA_FSAA_Trustees.IDTrustee ID, must exist in SA_FSAA_Trustees
NTDomainnvarchar128YesDomain portion of NT-style name
NTNamenvarchar256YesSAM account name
DisplayNamenvarchar256YesDisplay name
SIDvarchar184NoSID (denormalized copy from SA_FSAA_Trustees)
TrusteeTypesmallintNoSee TrusteeType enumeration
IsDisabledvarchar2No'Y' / 'N'
USNintNo-1USN at last sighting
DeletedUSNintYesUSN when the principal was removed (NULL = still present)

Primary Key: PK_SA_FSAA_LocalTrustees — clustered on (HOST, ID)

Foreign Keys:

  • FK_SA_FSAA_LocalTrustees_ID(HOST, ID) → SA_FSAA_Trustees(HOST, ID) ON DELETE CASCADE

SA_FSAA_TrusteeEquivalence

Description: Group-membership edges between local trustees on the host. Each row is a (group → member) pair, where EquivalentTrusteeID is the group and TrusteeID is the member. Used to expand local-group memberships during effective-access calculations and by SA_FSAA_LocalGroupMembersView.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
TrusteeIDintNoPKFK → SA_FSAA_Trustees.IDMember trustee
EquivalentTrusteeIDintNoPKFK → SA_FSAA_LocalTrustees.IDGroup (local trustee) the member belongs to

Primary Key: PK_SA_FSAA_TrusteeEquivalence — clustered on (HOST, TrusteeID, EquivalentTrusteeID)

Foreign Keys:

  • FK_SA_FSAA_TrusteeEquivalence_TrusteeID(HOST, TrusteeID) → SA_FSAA_Trustees(HOST, ID)
  • FK_SA_FSAA_TrusteeEquivalence_EquivalentTrusteeID(HOST, EquivalentTrusteeID) → SA_FSAA_LocalTrustees(HOST, ID) ON DELETE CASCADE

Indexes:

  • SA_FSAA_TrusteeEquivalence_Group_IDX — nonclustered on (HOST, EquivalentTrusteeID) INCLUDE (TrusteeID)

SA_FSAA_Rights

Description: Permission-entry table. Every distinct ACL is given a RightsProxyID; resources that share an identical ACL share one RightsProxyID, deduplicating the storage cost dramatically. Each row of SA_FSAA_Rights is one access-control entry within an ACL: a TrusteeID plus its allow/deny rights (broken down by direct/inherited and by simplified bitmask vs. full Windows mask).

The Rights bitmask (AllowRights / DenyRights) uses the simplified six-bit FSAA representation — see Rights bitmask enumeration. The Mask columns (AllowMask / DenyMask) hold the full Windows access mask (for example, 2032127 = Full Control, 1245631 = Modify).

AllowRights = DirectAllowRights | InheritedAllowRights (and similarly for DenyRights); the table is created with WITH (DATA_COMPRESSION = ROW) on Enterprise editions because it is the largest table in the schema.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
RightsProxyIDintNoPKDeduplication key — multiple resources may share one proxy
TrusteeIDintNoPKFK → SA_FSAA_Trustees.IDThe principal this ACE applies to
AllowRightssmallintNo0Combined direct+inherited allow bits (see Rights bitmask)
DenyRightssmallintNo0Combined direct+inherited deny bits
DirectAllowRightssmallintNoDirect (non-inherited) allow bits
DirectDenyRightssmallintNoDirect deny bits
InheritedAllowRightssmallintNoInherited allow bits
InheritedDenyRightssmallintNoInherited deny bits
AllowMaskintNoFull Windows allow access mask
DenyMaskintNoFull Windows deny access mask
DirectAllowMaskintNoDirect allow mask
DirectDenyMaskintNoDirect deny mask
InheritedAllowMaskintNoInherited allow mask
InheritedDenyMaskintNoInherited deny mask

Primary Key: PK_SA_FSAA_Rights — clustered on (HOST, RightsProxyID, TrusteeID)

Foreign Keys:

  • FK_SA_FSAA_Rights_TrusteeID(HOST, TrusteeID) → SA_FSAA_Trustees(HOST, ID)

SA_FSAA_Tags

Description: Distinct file tag values per host. Two-level deduplication: Tags holds the unique tag string, TagKeys/TagProxies define a multi-tag set, and Resources.TagProxyID references a particular set.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
TagIDintNoPKPer-host tag ID
TagnvarcharMAXNoTag string (for example, an Azure Information Protection label or custom tag)
SourcetinyintNo0Tag source

Primary Key: PK_SA_FSAA_Tags — clustered on (HOST, TagID)

Foreign Keys:

  • FK_SA_FSAA_Tags_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE

SA_FSAA_TagKeys

Description: Defines a "tag set" identity. Each TagProxyID represents a unique combination of tag values that one or more resources share.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
TagProxyIDintNoPKIdentifier for the tag set

Primary Key: PK_SA_FSAA_TagKeys — clustered on (HOST, TagProxyID)

Foreign Keys:

  • FK_SA_FSAA_TagKeys_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE

SA_FSAA_TagProxies

Description: Membership of Tags in a TagKeys set: each row links one tag to one tag-proxy. A resource's TagProxyID points at a row in TagKeys; joining through TagProxies yields the list of tags applied.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
TagProxyIDintNoPKFK → SA_FSAA_TagKeys.TagProxyIDTag set
TagIDintNoPKFK → SA_FSAA_Tags.TagIDTag in the set

Primary Key: PK_SA_FSAA_TagProxies — clustered on (HOST, TagProxyID, TagID)

Foreign Keys:

  • FK_SA_FSAA_TagProxies_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE
  • FK_SA_FSAA_TagProxies_TagProxyID(HOST, TagProxyID) → SA_FSAA_TagKeys(HOST, TagProxyID)
  • FK_SA_FSAA_TagProxies_TagID(HOST, TagID) → SA_FSAA_Tags(HOST, TagID)

SA_FSAA_Resources

Description: The structural backbone — every share, folder, and file the DC has seen on the host, plus its parent linkage, owner, ACL pointer, gate pointer, tag pointer, sizing, timestamps, and per-scan-type tracking columns. This is the largest table in the schema by row count and is created WITH (DATA_COMPRESSION = ROW) on Enterprise editions.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
IDbigintNoPKPer-host resource ID (bigint to support very large file systems)
ParentResourceIDbigintYesFK → SA_FSAA_Resources.IDParent folder/share. NULL = root
Namenvarchar2000NoLeaf name (folder/file name; share name for shares)
ResourceTypetinyintNoSee ResourceType enumeration
OwnerIDintYesFK → SA_FSAA_Trustees.IDResource owner trustee
RightsProxyIDintYesFK-style pointer into SA_FSAA_Rights (no enforced FK; NULL = inherited from parent)
GatesProxyIDbigintYesPointer into SA_FSAA_GatesProxy (no enforced FK)
NestedLevelintNoDepth in the resource tree (0 = root)
SizebigintYesAggregated file-content size
LastModifieddatetimeYesNTFS last-modified timestamp
LastAccesseddatetimeYesNTFS last-accessed timestamp
CreateddatetimeYesNTFS creation timestamp
TagProxyIDintYesPointer into SA_FSAA_TagKeys (no enforced FK)
AccessIDbigintYesCross-module link to the Access (FSAA) ID for this resource
AccessUSNintYesUSN at last Access sighting
AccessLastSeendatetime2YesLast time Access scan saw this resource
AccessLastDeleteddatetime2YesTime the resource was last marked deleted by Access
ActivityIDbigintYesCross-module link to the Activity (FSAC) ID for this resource
ActivityUSNintYesUSN at last Activity sighting
ActivityLastSeendatetime2YesLast time Activity scan saw this resource
ActivityLastDeleteddatetime2YesTime the resource was last marked deleted by Activity
DLPIDbigintYesCross-module link to the DLP (FSDLP) ID for this resource
DLPUSNintYesUSN at last DLP sighting
DLPLastSeendatetime2YesLast time DLP saw this resource
DLPLastDeleteddatetime2YesTime the resource was last marked deleted by DLP
USNintNo-1Structural USN — last seen in this scan
DeletedUSNintYesUSN when the resource was deleted (NULL = still present)

Primary Key: PK_SA_FSAA_Resources — clustered on (HOST, ID)

Foreign Keys:

  • FK_SA_FSAA_Resources_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE
  • FK_SA_FSAA_Resources_ParentResourceID(HOST, ParentResourceID) → SA_FSAA_Resources(HOST, ID)
  • FK_SA_FSAA_Resources_OwnerID(HOST, OwnerID) → SA_FSAA_Trustees(HOST, ID)

Indexes:

  • SA_FSAA_Resources_Enum_IDX(HOST, ParentResourceID) INCLUDE (ID, ResourceType, DeletedUSN)
  • SA_FSAA_Resources_RightsProxyID_IDX(HOST, RightsProxyID) INCLUDE (ID, GatesProxyID, DeletedUSN, ResourceType)
  • SA_FSAA_Resources_GatesProxyID_IDX(HOST, GatesProxyID) INCLUDE (ID)
  • SA_FSAA_Resources_USN_IDX(HOST, USN) INCLUDE (ID)
  • SA_FSAA_Resources_ParentResourceID_Name_IDX(HOST, ParentResourceID, Name)

SA_FSAA_UnixRights

Description: POSIX permission triplet (Mask, owner, group) for Unix/NFS resources. One row per resource that has Unix rights. The Mask column stores the standard POSIX mode bits.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
ResourceIDbigintNoPKFK → SA_FSAA_Resources.IDResource these rights apply to
OwnerIDintNoFK → SA_FSAA_Trustees.IDPOSIX owner trustee
GroupIDintNoFK → SA_FSAA_Trustees.IDPOSIX group trustee
MaskintNoPOSIX mode mask
USNintNoUpdate Sequence Number

Primary Key: PK_SA_FSAA_UnixRights — clustered on (HOST, ResourceID)

Foreign Keys:

  • FK_SA_FSAA_UnixRights_ResourceID(HOST, ResourceID) → SA_FSAA_Resources(HOST, ID) ON DELETE CASCADE
  • FK_SA_FSAA_UnixRights_OwnerID(HOST, OwnerID) → SA_FSAA_Trustees(HOST, ID)
  • FK_SA_FSAA_UnixRights_GroupID(HOST, GroupID) → SA_FSAA_Trustees(HOST, ID)

SA_FSAA_Gates

Description: A "gate" is the entry point through which clients reach a resource: an SMB share, an NFS export, an NFS export policy, or an Azure Files share. Gates have their own ACLs (share permissions) separate from the resource ACLs. A gate references the underlying ShareID and the FolderID it grants access to. NFS share-level ACLs (export rules) are modeled as a separate "policy" gate referenced by PolicyID self-FK.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
IDintNoPKPer-host gate ID
ShareIDbigintYesFK → SA_FSAA_Resources.IDResource that represents the share root
FolderIDbigintYesFK → SA_FSAA_Resources.IDFolder the gate grants access to
PolicyIDintYesFK → SA_FSAA_Gates.IDSelf-FK — points at the export-policy gate when this is an NFS export
DisplayNamenvarchar256NoShare name (for example, Public$)
Pathnvarchar512YesLocal path of the share (for example, C:\Shares\Public)
NestedLevelintYesDepth from the host root
GateTypeintNo0See GateType enumeration
USNintNo-1Update Sequence Number
DeletedUSNintYesUSN at deletion (NULL = still present)

Primary Key: PK_SA_FSAA_Gates — clustered on (HOST, ID)

Foreign Keys:

  • FK_SA_FSAA_Gates_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE
  • FK_SA_FSAA_Gates_ShareID(HOST, ShareID) → SA_FSAA_Resources(HOST, ID)
  • FK_SA_FSAA_Gates_FolderID(HOST, FolderID) → SA_FSAA_Resources(HOST, ID)
  • FK_SA_FSAA_Gates_PolicyID(HOST, PolicyID) → SA_FSAA_Gates(HOST, ID) (self-FK for NFS export policies)

SA_FSAA_GatesProxy

Description: Many-to-many bridge from a resource to gates. A resource may be reachable through multiple shares (or no share at all). The proxy ID is denormalized onto SA_FSAA_Resources.GatesProxyID.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
IDbigintNoPKProxy ID — referenced by Resources.GatesProxyID
GateIDintNoPKFK → SA_FSAA_Gates.IDGate that grants reach to this resource

Primary Key: PK_SA_FSAA_GatesProxy — clustered on (HOST, ID, GateID)

Foreign Keys:

  • FK_SA_FSAA_GatesProxy_GateID(HOST, GateID) → SA_FSAA_Gates(HOST, ID) ON DELETE CASCADE

Indexes:

  • SA_FSAA_GatesProxy_GateID_IDX(HOST, GateID) INCLUDE (ID)

SA_FSAA_Policies

Description: Local Security Authority (LSA) policies attached to a host's "policy gates" (for example, Logon as a service, Allow log on locally). Used by the SA_FSAA_GetPolicyMembership UDF to expand pseudo-trustees such as NT AUTHORITY\INTERACTIVE and NT AUTHORITY\SERVICE into the underlying user accounts. PolicyID is a foreign key into SA_FSAA_Gates because policies are modeled as a special gate type.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
PolicyIDintNoPKFK → SA_FSAA_Gates.IDPolicy gate (1 = INTERACTIVE, 3 = BATCH, 4 = SERVICE, 5 = TERMINAL SERVER USER)
TrusteeIDintNoPKFK → SA_FSAA_Trustees.IDTrustee assigned to the policy
AllowsmallintNoAllow flag (1 = granted, 0 = denied)

Primary Key: PK_SA_FSAA_Policies — clustered on (HOST, PolicyID, TrusteeID)

Foreign Keys:

  • FK_SA_FSAA_Policies_PolicyID(HOST, PolicyID) → SA_FSAA_Gates(HOST, ID) ON DELETE CASCADE
  • FK_SA_FSAA_Policies_TrusteeID(HOST, TrusteeID) → SA_FSAA_Trustees(HOST, ID)

SA_FSAA_Exceptions

Description: One row per detected access-control anomaly (for example, Open Access, Broken Inheritance, Direct User Permissions). The kind of anomaly is identified by ExceptionType joining SA_FSAA_ExceptionTypes. Either ResourceID, GateID, TrusteeID, or SourceTrusteeID may be NULL depending on the exception class — for example, Open Access needs only Gate+Trustee, while SID History needs Trustee+SourceTrustee.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
IDintNoPKPer-host exception ID
ExceptionTypeintNoClass of exception (logical reference to SA_FSAA_ExceptionTypes.ExceptionType — no enforced FK)
GateIDintYesFK → SA_FSAA_Gates.IDGate involved (if any)
ResourceIDbigintYesFK → SA_FSAA_Resources.IDResource involved (if any)
TrusteeIDintYesFK → SA_FSAA_Trustees.IDSubject trustee (if any)
SourceTrusteeIDintYesFK → SA_FSAA_Trustees.IDSource trustee — for SID-History exceptions, the historical SID's owner

Primary Key: PK_SA_FSAA_Exceptions — clustered on (HOST, ID)

Foreign Keys:

  • FK_SA_FSAA_Exceptions_HOST(HOST) → SA_FSAA_Hosts(ID)
  • FK_SA_FSAA_Exceptions_GateID(HOST, GateID) → SA_FSAA_Gates(HOST, ID) ON DELETE CASCADE
  • FK_SA_FSAA_Exceptions_ResourceID(HOST, ResourceID) → SA_FSAA_Resources(HOST, ID)
  • FK_SA_FSAA_Exceptions_TrusteeID(HOST, TrusteeID) → SA_FSAA_Trustees(HOST, ID)
  • FK_SA_FSAA_Exceptions_SourceTrusteeID(HOST, SourceTrusteeID) → SA_FSAA_Trustees(HOST, ID)

Indexes:

  • SA_FSAA_Exceptions_Resource_IDX(HOST, ResourceID) INCLUDE (ExceptionType, GateID)
note

ExceptionType joins SA_FSAA_ExceptionTypes logically but no SQL FK is enforced — the exception-type catalog is repopulated by the import pipeline and the absence of an FK avoids load-order constraints.


SA_FSAA_ExceptionTypes

Description: Per-host catalog of every exception class FSAA can detect. ParentType allows hierarchical grouping of related exceptions (for example, Open Access — Everyone is a child of Open Access).

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
ExceptionTypeintNoPKType code (referenced by Exceptions.ExceptionType)
GUIDvarchar38NoStable GUID identifying this exception kind
USNintNoUpdate Sequence Number
Namevarchar128NoShort name (for example, OpenAccess)
Descriptionvarchar256NoHuman-readable description
CountintNoCached count of SA_FSAA_Exceptions rows of this type
ParentTypeintYesOptional parent exception type (self-reference within the host)

Primary Key: PK_SA_FSAA_ExceptionTypes — clustered on (HOST, ExceptionType)

Foreign Keys:

  • FK_SA_FSAA_ExceptionTypes_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE

SA_FSAA_ProbableOwners

Description: Probable-owner heuristic results — one row per (resource, candidate-owner) pair, scored by file count and aggregated size of files the candidate owns within the resource subtree. Populated by the Probable Owner analysis job.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
ResourceIDbigintNoPKFK → SA_FSAA_Resources.IDResource (folder/share) being scored
OwnerIDintNoPKFK → SA_FSAA_Trustees.IDCandidate owner
FileSizebigintYesTotal bytes owned by this candidate within the subtree
FileCountintYesNumber of files owned by this candidate within the subtree

Primary Key: PK_SA_FSAA_ProbableOwners — clustered on (HOST, ResourceID, OwnerID)

Foreign Keys:

  • FK_SA_FSAA_ProbableOwners_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE
  • FK_SA_FSAA_ProbableOwners_ResourceID(HOST, ResourceID) → SA_FSAA_Resources(HOST, ID)
  • FK_SA_FSAA_ProbableOwners_OwnerID(HOST, OwnerID) → SA_FSAA_Trustees(HOST, ID)

SA_FSAA_FileSizes

Description: Aggregated size and count of all files within each resource subtree. Populated by the bulk-import pipeline when the Sizing option is enabled.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
ResourceIDbigintNoPKFK → SA_FSAA_Resources.IDResource (folder/share)
FileSizebigintYesTotal file bytes within the subtree
FileCountintYesTotal number of files within the subtree

Primary Key: PK_SA_FSAA_FileSizes — clustered on (HOST, ResourceID)

Foreign Keys:

  • FK_SA_FSAA_FileSizes_ResourceID(HOST, ResourceID) → SA_FSAA_Resources(HOST, ID) ON DELETE CASCADE

SA_FSAA_FileTypes

Description: Per-extension breakdown of files within each resource subtree. One row per (resource, extension).

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
ResourceIDbigintNoPKFK → SA_FSAA_Resources.IDResource (folder/share)
Extensionnvarchar255NoPKFile extension (for example, .docx)
FileSizebigintYesTotal bytes of files with this extension
FileCountintYesNumber of files with this extension

Primary Key: PK_SA_FSAA_FileTypes — clustered on (HOST, ResourceID, Extension)

Foreign Keys:

  • FK_SA_FSAA_FileTypes_ResourceID(HOST, ResourceID) → SA_FSAA_Resources(HOST, ID) ON DELETE CASCADE

SA_FSAA_FileAges

Description: Histogram of file age buckets within each resource subtree. The 11 FileCount0..FileCount10 columns hold counts in successively older buckets; the bucket boundaries are determined at scan configuration time.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
ResourceIDbigintNoPKFK → SA_FSAA_Resources.IDResource (folder/share)
LastModifieddatetimeYesMost recent file modification within the subtree
FileCount0intYesFiles in age bucket 0 (newest)
FileCount1intYesFiles in age bucket 1
FileCount2intYesFiles in age bucket 2
FileCount3intYesFiles in age bucket 3
FileCount4intYesFiles in age bucket 4
FileCount5intYesFiles in age bucket 5
FileCount6intYesFiles in age bucket 6
FileCount7intYesFiles in age bucket 7
FileCount8intYesFiles in age bucket 8
FileCount9intYesFiles in age bucket 9
FileCount10intYesFiles in age bucket 10 (oldest)

Primary Key: PK_SA_FSAA_FileAges — clustered on (HOST, ResourceID)

Foreign Keys:

  • FK_SA_FSAA_FileAges_ResourceID(HOST, ResourceID) → SA_FSAA_Resources(HOST, ID) ON DELETE CASCADE

SA_FSAA_FileTags

Description: Aggregated file count and size per (resource, tag-set). Populated when AIP / sensitive-data tags are collected.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
ResourceIDbigintNoPKFK → SA_FSAA_Resources.IDResource (folder/share)
TagProxyIDintNoPKFK → SA_FSAA_TagKeys.TagProxyIDTag set
FileSizebigintNoTotal bytes of files with this tag set
FileCountintNoNumber of files with this tag set

Primary Key: PK_SA_FSAA_FileTags — clustered on (HOST, ResourceID, TagProxyID)

Foreign Keys:

  • FK_SA_FSAA_FileTags_ResourceID(HOST, ResourceID) → SA_FSAA_Resources(HOST, ID) ON DELETE CASCADE
  • FK_SA_FSAA_FileTags_TagProxyID(HOST, TagProxyID) → SA_FSAA_TagKeys(HOST, TagProxyID)

SA_FSAA_ScanHistory

Description: Append-only audit log of every scan run, including the FSAA configuration XML used. Useful for forensic / configuration-tracking purposes.

Column NameData TypeSizeNullablePKFKDefaultDescription
ConsoleHostnvarchar64YesNAA console that initiated the scan
ScanHostnvarchar64YesHost machine that performed the scan
ScanTypenvarchar64YesScan type (Access / Activity / DLP)
JobGUIDvarchar38YesJob correlation GUID
RunTimedatetime2YesWhen the scan ran
FSAAConfigXmlxmlYesSnapshot of the FSAA XML configuration

This table is intentionally append-only with no primary key, foreign keys, or indexes. Every scan run inserts a new row; rows are never updated and aren't referenced by other tables. Querying is by ScanHost / RunTime and is expected to be infrequent (forensic / support use).


Activity Collector Tables (SA_FSAC_*)

The File System Activity Collector produces the following tables. They capture audit events streamed from agents on the file servers and roll those events up into daily-activity aggregates and exception detections.

SA_FSAC_ProcessNames

Description: Per-host lookup of process names observed in audit events. Activity events reference process names by ID to avoid storing the same long path string repeatedly.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
IDintNoPKPer-host process-name ID
Namenvarchar255NoProcess name (for example, EXPLORER.EXE)

Primary Key: PK_SA_FSAC_ProcessNames — clustered on (HOST, ID)

Foreign Keys:

  • FK_SA_FSAC_ProcessNames_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE

SA_FSAC_ActivityEvents

Description: The activity-event firehose. One row per audited file-system operation captured by an FSAC agent. Operation is a coded enumeration covering Read / Add / Update / Delete / PermissionChange / Rename. Allow is 1 for successful operations and 0 for denied operations.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
IDbigintNoPKPer-host event ID
AccessTimedatetime2NoTime the operation occurred
PathIDbigintNoFK → SA_FSAA_Resources.IDResource (file or folder) the operation acted on
TrusteeIDintNoFK → SA_FSAA_Trustees.IDThe user / principal that performed the operation
ProcessIDintYesFK → SA_FSAC_ProcessNames.IDProcess executing the operation (NULL if unknown)
OperationtinyintNoOperation code: 0=Read, 1=Add, 2=Update, 3=Delete, 4=PermissionChange, 5=Rename
AllowbitNo11 = operation allowed, 0 = operation denied
USNintNoUpdate Sequence Number

Primary Key: PK_SA_FSAC_ActivityEvents — clustered on (HOST, ID)

Foreign Keys:

  • FK_SA_FSAC_ActivityEvents_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE
  • FK_SA_FSAC_ActivityEvents_PathID(HOST, PathID) → SA_FSAA_Resources(HOST, ID)
  • FK_SA_FSAC_ActivityEvents_ProcessID(HOST, ProcessID) → SA_FSAC_ProcessNames(HOST, ID)
  • FK_SA_FSAC_ActivityEvents_TrusteeID(HOST, TrusteeID) → SA_FSAA_Trustees(HOST, ID)

Indexes:

  • SA_FSAC_ActivityEvents_PathID_IDX(HOST, PathID) INCLUDE (ID, AccessTime, TrusteeID, Operation, Allow)
  • SA_FSAC_ActivityEvents_TrusteeID_IDX(TrusteeID, AccessTime) INCLUDE (PathID, ProcessID, Operation, Allow)

SA_FSAC_PermissionChanges

Description: Detail rows for activity events where Operation = 4 (PermissionChange). Each event may have multiple change rows — one per ACE that was added, removed, or modified. AccessRights is the bitmask before the change; NewAccessRights is the bitmask after the change (NULL on removal).

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
ActivityIDbigintNoPKFK → SA_FSAC_ActivityEvents.IDOwning activity event
ChangeIDsmallintNoPKPer-event change index
AclTypetinyintNoACL type (DACL / SACL distinction)
TrusteeIDintNoFK → SA_FSAA_Trustees.IDTrustee whose ACE changed
ChangeTypetinyintNoChange kind: added / removed / modified
AceTypetinyintNoACE type (Allow / Deny)
InheritanceFlagstinyintNoNTFS inheritance flags
AceFlagstinyintNoNTFS ACE flags
AccessRightsbigintNoPre-change Windows access mask
NewAccessRightsbigintYesPost-change access mask (NULL when ACE was removed)

Primary Key: PK_SA_FSAC_PermissionChanges — clustered on (HOST, ActivityID, ChangeID)

Foreign Keys:

  • FK_SA_FSAC_PermissionChanges_HOST(HOST) → SA_FSAA_Hosts(ID)
  • FK_SA_FSAC_PermissionChanges_ActivityID(HOST, ActivityID) → SA_FSAC_ActivityEvents(HOST, ID)
  • FK_SA_FSAC_PermissionChanges_TrusteeID(HOST, TrusteeID) → SA_FSAA_Trustees(HOST, ID)

SA_FSAC_OwnerChanges

Description: Detail rows for activity events that changed a resource's owner (Take Ownership / chown). One row per qualifying activity event.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
ActivityIDbigintNoPKFK → SA_FSAC_ActivityEvents.IDOwning activity event
PreviousOwnerIDintNoFK → SA_FSAA_Trustees.IDOwner before the change
NewOwnerIDintNoFK → SA_FSAA_Trustees.IDOwner after the change

Primary Key: PK_SA_FSAC_OwnerChanges — clustered on (HOST, ActivityID)

Foreign Keys:

  • FK_SA_FSAC_OwnerChanges_HOST(HOST) → SA_FSAA_Hosts(ID)
  • FK_SA_FSAC_OwnerChanges_ActivityID(HOST, ActivityID) → SA_FSAC_ActivityEvents(HOST, ID)
  • FK_SA_FSAC_OwnerChanges_PreviousOwnerID(HOST, PreviousOwnerID) → SA_FSAA_Trustees(HOST, ID)
  • FK_SA_FSAC_OwnerChanges_NewOwnerID(HOST, NewOwnerID) → SA_FSAA_Trustees(HOST, ID)

SA_FSAC_DailyActivity

Description: Daily aggregation of activity-event counts, partitioned by (host, date, folder, trustee, operation, allow). The folder ID is the containing folder for the operation, so each row counts how many times a trustee performed a given operation type in a folder on a given day. This table feeds the daily-activity views and the Most Active Users / Most Active Servers reports.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
ActivityDatedateNoPKDate the activity occurred
FolderIDbigintNoPKFK → SA_FSAA_Resources.IDContaining folder
TrusteeIDintNoPKFK → SA_FSAA_Trustees.IDActing trustee
OperationtinyintNoPKOperation code (0–5)
AllowbitNoPK1Allow / Deny flag
CountintNoNumber of operations

Primary Key: PK_SA_FSAC_DailyActivity — clustered on (HOST, FolderID, ActivityDate, TrusteeID, Operation, Allow)

Foreign Keys:

  • FK_SA_FSAC_DailyActivity_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE
  • FK_SA_FSAC_DailyActivity_FolderID(HOST, FolderID) → SA_FSAA_Resources(HOST, ID)
  • FK_SA_FSAC_DailyActivity_TrusteeID(HOST, TrusteeID) → SA_FSAA_Trustees(HOST, ID)

SA_FSAC_RenameTargets

Description: Detail rows for Operation = 5 (Rename) activity events: stores the target path-ID of the rename. The activity event itself records the source path; this table records the destination.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
ActivityIDbigintNoPKFK → SA_FSAC_ActivityEvents.IDOwning rename event
TargetPathIDbigintNoFK → SA_FSAA_Resources.IDResource the source was renamed to

Primary Key: PK_SA_FSAC_RenameTargets — clustered on (HOST, ActivityID)

Foreign Keys:

  • FK_SA_FSAC_RenameTargets_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE
  • FK_SA_FSAC_RenameTargets_ActivityID(HOST, ActivityID) → SA_FSAC_ActivityEvents(HOST, ID)
  • FK_SA_FSAC_RenameTargets_TargetPathID(HOST, TargetPathID) → SA_FSAA_Resources(HOST, ID)

SA_FSAC_ExceptionTypes

Description: Catalog of activity-exception classes (for example, Unusual hourly activity, Mass deletion, Ransomware artifact). One row per (host, exception type).

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
ExceptionTypeintNoPKException type code
Namevarchar128NoShort name
Descriptionvarchar256NoHuman-readable description
CountintNoCached count of SA_FSAC_Exceptions rows of this type
ParentTypeintYesOptional parent exception type for hierarchical grouping

Primary Key: PK_SA_FSAC_ExceptionTypes — clustered on (HOST, ExceptionType)


SA_FSAC_Exceptions

Description: One row per detected activity anomaly. The Value / Average / StandardDeviations columns capture the statistical model output that triggered the exception (for example, observed value vs. baseline).

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
IDintNoPKPer-host exception ID
ExceptionTypeintNoClass of exception (logical reference to SA_FSAC_ExceptionTypes.ExceptionType — no enforced FK)
ActivityDatedateNoDate the anomaly occurred
ActivityHourtinyintYesHour-of-day (0–23) for hourly-bucketed anomalies
GateIDintNoGate (share) where the anomaly was observed
TrusteeIDintYesUser involved (if applicable)
ResourceIDbigintYesResource involved (if applicable)
ValueintYesObserved value (for example, operation count)
AveragefloatYesBaseline average for comparison
StandardDeviationsfloatYesHow many σ the observed value is from the average

Primary Key: PK_SA_FSAC_Exceptions — clustered on (HOST, ID)

Indexes:

  • SA_FSAC_Exceptions_ResourceID_IDX(HOST, ResourceID) INCLUDE (GateID)
note

No foreign keys are declared on this table; GateID, TrusteeID, ResourceID, and ExceptionType are logical references only.


SA_FSAC_UserExceptionTypes

Description: User-centric variant of SA_FSAC_ExceptionTypes — partitioned by user SID instead of by host. Used when an exception is associated with a particular user across multiple hosts.

Column NameData TypeSizeNullablePKFKDefaultDescription
SIDvarchar184NoPKUser SID
ExceptionTypeintNoPKException type code
Namevarchar128NoShort name
Descriptionvarchar256NoDescription
CountintNoCached count
ParentTypeintYesOptional parent exception type

Primary Key: PK_SA_FSAC_UserExceptionTypes — clustered on (SID, ExceptionType)


SA_FSAC_UserExceptions

Description: One row per detected per-user activity anomaly (for example, unusual login pattern attributed to a specific SID).

Column NameData TypeSizeNullablePKFKDefaultDescription
SIDvarchar184NoUser SID
IDintNoPKSurrogate exception ID
ExceptionTypeintNoException type
ActivityDatedateNoDate the anomaly occurred
ActivityStartTimetinyintYesStart hour of the activity window (0–23)
ActivityPeriodtinyintYesLength of the activity window in hours
ValueintYesObserved value
AveragefloatYesBaseline average
StandardDeviationsfloatYesσ from baseline

Primary Key: PK_SA_FSAC_UserExceptions — clustered on (ID)


Sensitive Data Tables (SA_FSDLP_*)

The Sensitive Data / DLP collector produces the following tables. They capture matches against configured DLP criteria, including per-match excerpt context and links to the subject-profile system that ties hits to specific identities.

SA_FSDLP_ImportHistory

Description: Append-only history of DLP scan imports per host. One row per imported scan run.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
GUIDvarchar38NoScan correlation GUID
USNintNoPKUSN at import time

Primary Key: PK_SA_FSDLP_ImportHistory — clustered on (HOST, USN)

Foreign Keys:

  • FK_SA_FSDLP_ImportHistory_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE

SA_FSDLP_Criteria

Description: Per-host catalog of the DLP criteria (patterns / classifiers) that produced matches. The pattern_guid is the global identifier that links back to the centrally managed criteria definitions. Risk is a numeric severity score.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKFK → SA_FSAA_Hosts.IDHost partition
IDintNoPKPer-host criterion ID
Namenvarchar256NoCriterion name (for example, "U.S. Social Security Number")
RiskintNo0Risk score
pattern_guiduniqueidentifierYesGlobal criterion GUID

Primary Key: PK_SA_FSDLP_Criteria — clustered on (HOST, ID)

Foreign Keys:

  • FK_SA_FSDLP_Criteria_HOST(HOST) → SA_FSAA_Hosts(ID) ON DELETE CASCADE

SA_FSDLP_Matches

Description: One row per (file, criterion) pair where the criterion produced at least one hit in the file. MatchCount is the total number of hits.

DataSource is a bitmask indicating where in the file the matches came from: 1 = Content, 2 = Metadata, 4 = Filename. Combinations are summed (for example, 5 = Content + Filename).

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
FileIdbigintNoPKResource ID of the matched file (joins SA_FSAA_Resources.ID)
CriteriaIdintNoPKFK → SA_FSDLP_Criteria.IDCriterion that matched
MatchCountintYesNumber of hits within this file for this criterion
DataSourceintNo0Bitmask: 1=Content, 2=Metadata, 4=Filename

Primary Key: PK_SA_FSDLP_Matches — clustered on (HOST, FileId, CriteriaId)

Foreign Keys:

  • FK_SA_FSDLP_Matches_CriteriaId(HOST, CriteriaId) → SA_FSDLP_Criteria(HOST, ID) ON DELETE CASCADE

SA_FSDLP_MatchHits

Description: Per-hit detail rows. For every match in SA_FSDLP_Matches, this table holds the prefix / data / suffix excerpt around each hit, plus a confidence score.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
FileIdbigintNoPKResource ID of the matched file
CriteriaIdintNoPKCriterion that produced the hit
IDbigintNoPKPer-(File, Criterion) hit ID
SubFileNamenvarchar1024YesSub-file name (for archives such as ZIP / RAR)
MatchPrefixnvarchar1024YesText immediately before the matched data
MatchDatanvarchar1024YesThe matched data itself
MatchSuffixnvarchar1024YesText immediately after the matched data
ConfidenceintNo0Confidence score (0–100)
DataSourceintNo0Where the hit was found (see SA_FSDLP_Matches.DataSource)

Primary Key: PK_SA_FSDLP_MatchHits — clustered on (HOST, FileId, CriteriaId, ID)

Foreign Keys:

  • FK_SA_FSDLP_MatchHits_Match(HOST, FileId, CriteriaId) → SA_FSDLP_Matches(HOST, FileId, CriteriaId) ON DELETE CASCADE

SA_FSDLP_MatchHits_SubjectProfile

Description: Links a DLP match hit to the subject-profile system, which identifies which person / entity the hit is about. Populated when subject-profile correlation is enabled.

Column NameData TypeSizeNullablePKFKDefaultDescription
HOSTintNoPKHost partition
FileIdbigintNoPKResource ID of the matched file
CriteriaIdintNoPKCriterion that produced the hit
IDbigintNoPKFK → SA_FSDLP_MatchHits.IDHit ID
SourceIdintNoFK → SA_SubjectProfile_Sources.IdSubject-profile source
IdentityIdbigintNoFK → SA_SubjectProfile_Identities.IdResolved identity
AttributeIdintNoAttribute on the identity that the hit aligns with
OrderintNoPosition within multi-valued attributes

Primary Key: PK_SA_FSDLP_MatchHits_SubjectProfile — clustered on (HOST, FileId, CriteriaId, ID)

Foreign Keys:

  • FK_SA_FSDLP_MatchHits_SubjectProfile(HOST, FileId, CriteriaId, ID) → SA_FSDLP_MatchHits(HOST, FileId, CriteriaId, ID) ON DELETE CASCADE
  • FK_SA_FSDLP_MatchHits_SubjectProfile_Source(SourceId) → SA_SubjectProfile_Sources(Id)
  • FK_SA_FSDLP_MatchHits_SubjectProfile_Identity(IdentityId) → SA_SubjectProfile_Identities(Id)
  • FK_SA_FSDLP_MatchHits_SubjectProfile_Attribute(IdentityId, AttributeId, Order) → SA_SubjectProfile_AttributeValues(IdentityId, AttributeId, Order) ON DELETE CASCADE

Indexes:

  • SA_FSDLP_MatchHits_SubjectProfile_Source_IDX — nonclustered on (SourceId)
  • SA_FSDLP_MatchHits_SubjectProfile_Identity_IDX — nonclustered on (IdentityId)
note

The SA_SubjectProfile_* tables are owned by the central Subject Profile module and are documented separately.


DFS Namespace Tables (SA_FSDFS_*)

The DFS Namespace collector produces the following tables. They capture Microsoft DFS namespaces and the links that map DFS paths to underlying physical shares.

SA_FSDFS_Namespaces

Description: One row per discovered DFS namespace (for example, \\contoso.com\public). Each namespace anchors zero or more DFS links.

Column NameData TypeSizeNullablePKFKDefaultDescription
IDintNoPKIDENTITY(1,1)Surrogate namespace ID
HOSTintNoHost that owns the namespace record
Namenvarchar450NoDFS namespace name
RootHostIDintYesFK → SA_FSAA_Hosts.IDThe FSAA host that hosts the namespace root
RootGateIDintYesThe gate (share) that backs the namespace root

Primary Key: PK_SA_FSDFS_Namespaces — clustered on (ID)

Foreign Keys:

  • FK_SA_FSDFS_Namespaces_Hosts(RootHostID) → SA_FSAA_Hosts(ID) ON DELETE CASCADE
  • FK_SA_FSDFS_Namespaces_GateID(RootHostID, RootGateID) → SA_FSAA_Gates(HOST, ID)

Description: Each DFS link maps a logical DFS path (for example, \\contoso.com\public\sales) to a physical target path on a specific server. Multiple links may exist per namespace.

Column NameData TypeSizeNullablePKFKDefaultDescription
IDintNoPKIDENTITY(1,1)Surrogate link ID
HOSTintNoPKHost partition (the DFS host)
NamespaceIDintYesFK → SA_FSDFS_Namespaces.IDOwning namespace
NamespaceNamenvarchar512NoCached namespace name
DfsPathnvarchar400NoDFS-side logical path (for example, sales\reports)
DfsResourceIDbigintYesFK → SA_FSAA_Resources.IDResource representing the DFS-side path (when available)
DfsHostIDintYesHost on the DFS side
TargetPathnvarchar450NoUNC path of the physical target (for example, \\fileserver\sales)
TargetHostIDintYesFK → SA_FSAA_Hosts.IDFSAA host that holds the physical target
TargetGateIDintYesFK → SA_FSAA_Gates.IDGate (share) that holds the physical target
TargetResourceIDbigintYesFK → SA_FSAA_Resources.IDResource on the target host
StateintYesDFS link state (online / offline)
TimeoutintYesDFS-link cache timeout
DfsGuiduniqueidentifierYesDFS link's unique identifier
Commentnvarchar1024YesFree-text comment
IsRootbitNoTrue if the DFS link represents the namespace root rather than a sub-link

Primary Key: PK_SA_FSDFS_Links — clustered on (HOST, ID)

Unique Constraints: UQ_FSDFS_Links_DfsPath — unique on (DfsPath, NamespaceID)

Foreign Keys:

  • FK_SA_FSDFS_Links_NamespaceID(NamespaceID) → SA_FSDFS_Namespaces(ID) ON DELETE CASCADE
  • FK_SA_FSDFS_Links_TargetHostID(TargetHostID) → SA_FSAA_Hosts(ID)
  • FK_SA_FSDFS_Links_TargetGateID(TargetHostID, TargetGateID) → SA_FSAA_Gates(HOST, ID)
  • FK_SA_FSDFS_Links_TargetResourceID(TargetHostID, TargetResourceID) → SA_FSAA_Resources(HOST, ID)
  • FK_SA_FSDFS_Links_DfsResourceID(DfsHostID, DfsResourceID) → SA_FSAA_Resources(HOST, ID)

Indexes:

  • SA_FSDFS_Links_GateID_IDX(TargetHostID, TargetGateID)