K0.3 The Eight Tables You Will Query Every Day
SigninLogs — the identity investigation table
Every authentication to Entra ID (Microsoft 365, Azure portal, VPN via Entra SSO) generates a row in SigninLogs. This is the most-queried table in security operations because identity compromise is the starting point of 80% of cloud-based attacks.
| |
The field that matters most: ResultType. This single field determines whether the authentication succeeded (0), failed due to wrong password (50126), failed due to account locked (50053), failed due to MFA denial (500121), or dozens of other outcomes. Learning the 10 most common ResultType values is the fastest path to SigninLogs fluency.
NE investigation use: Rachel queries SigninLogs 15-20 times per day. The most common patterns: “show me all failures for this IP” (spray investigation), “show me all sign-ins for this user in the last 24 hours” (compromise scope), “show me non-interactive sign-ins with deviceDetail mismatch” (AiTM detection).
Figure K0.3 — The 8 daily tables. These handle 95% of security investigation queries at NE.
DeviceProcessEvents — the endpoint investigation table
Every process that starts on an MDE-enrolled device generates a row. This is the table that reveals WHAT AN ATTACKER DID on the endpoint: which tools they ran, which commands they executed, and which process spawned which child process.
| |
The field that matters most: InitiatingProcessFileName — the parent process. Security analysis is not about WHAT ran but about WHO SPAWNED IT. PowerShell spawned by Explorer.exe (user double-clicked a script) is different from PowerShell spawned by Word (macro execution). The parent-child relationship is the foundation of process-based detection.
OfficeActivity — the email and collaboration table
Every inbox rule, email send, SharePoint download, OneDrive sync, and Teams action generates a row. This table reveals what users DO with their M365 applications.
| |
The field that matters most: Operation. This single field determines whether you are looking at inbox rule creation, email forwarding, file downloads, sharing link creation, or dozens of other actions. Filter by Operation first, then investigate the details.
The remaining 5 tables
AuditLogs — Entra ID configuration changes: MFA registrations, role activations, app consent grants, conditional access policy modifications. The table that reveals whether an attacker changed your security configuration.
DeviceFileEvents — file operations on endpoints: creation, modification, deletion, rename. The table that reveals ransomware (mass modification), data staging (bulk copies to temp folders), and evidence destruction (log file deletion).
IdentityLogonEvents — Kerberos and NTLM authentication events from domain controllers. The table that reveals Kerberoasting, Pass-the-Hash, Golden Ticket usage, and on-premises lateral movement.
CommonSecurityLog — firewall, proxy, and VPN logs in CEF (Common Event Format). The table that reveals network-layer activity: blocked connections, cross-site traffic, and external communication patterns.
SecurityAlert — aggregated alerts from all connected products. The table that reveals what Defender, Sentinel, and third-party products have ALREADY detected. Use this to check: has this entity triggered other alerts recently?
The myth: KQL requires memorising hundreds of field names across dozens of tables before you can write useful queries.
The reality: Start with ONE table (SigninLogs) and THREE fields (UserPrincipalName, IPAddress, ResultType). That is enough to investigate 50% of identity-related alerts. Add tables and fields as your investigations require them. Nobody memorises the full schema — experienced analysts know the 15-20 fields they use daily and look up the rest. The getschema operator shows every field in any table: SigninLogs | getschema. Use it when you need a field you have not used before.
Try it yourself
Exercise: Run getschema on your top 3 tables
Run SigninLogs | getschema, DeviceProcessEvents | getschema, and OfficeActivity | getschema in your Sentinel Logs blade. Scan the field names. How many do you recognise from the examples above? How many are unfamiliar? The unfamiliar fields are the ones this course will teach you to use.
Check your understanding
An analyst needs to determine: did a specific user run certutil.exe to download a file from the internet? Which table contains this data, and which two fields identify the process and its command line?
Answer: DeviceProcessEvents — the endpoint process execution table. The two fields: FileName (filter for "certutil.exe") and ProcessCommandLine (check for download-related arguments like "-urlcache" or "-f http"). Additionally, check InitiatingProcessFileName to see what spawned certutil — if cmd.exe spawned it and cmd.exe was spawned by Word, this is a macro-based download chain.
Troubleshooting
“getschema returns no results for a table.” The table does not exist in your workspace — either the data connector is not enabled, or your licence tier does not include that product. Run union withsource=T * | distinct T to see which tables actually contain data in your workspace.
The table selection decision tree
When an investigation question arrives, the analyst’s first decision is: which table do I query? This decision tree handles 90% of cases:
“Who authenticated?” → SigninLogs (cloud authentication) or IdentityLogonEvents (on-premises AD authentication). If the question is about Entra ID sign-ins (cloud apps, VPN, Azure portal): SigninLogs. If the question is about Kerberos or NTLM authentication to domain controllers: IdentityLogonEvents.
“What process ran?” → DeviceProcessEvents. Always. This table contains every process creation event on MDE-enrolled devices. If the question involves: what command was executed, which tool was used, what spawned what — the answer is in DeviceProcessEvents.
“What happened with email?” → OfficeActivity (for user actions — inbox rules, sends, reads) or EmailEvents (for system actions — delivery, filtering, quarantine). If the question is “did the user create an inbox rule?” → OfficeActivity. If the question is “was the phishing email delivered or blocked?” → EmailEvents.
“What was changed in the cloud config?” → AuditLogs. MFA registrations, role activations, app consent grants, conditional access policy changes — all configuration modifications to Entra ID land in AuditLogs.
“What network traffic occurred?” → CommonSecurityLog (for firewall/proxy logs) or DeviceNetworkEvents (for endpoint network connections). If the question is about perimeter traffic (what did the firewall allow/deny): CommonSecurityLog. If the question is about endpoint connections (which process connected to which IP): DeviceNetworkEvents.
This decision tree is not comprehensive — some investigations require tables not listed here. But for the 8 daily tables, this covers the most common decision points. By K7 (Sentinel Tables Deep Dive), you will know every field in every table well enough to select without the decision tree.
NE’s table volumes: planning for query performance
Table volume directly affects query performance. Querying a table with 5,000 rows/day is instantaneous. Querying a table with 500,000 rows/day requires careful time filtering to avoid 30-second query times. NE’s daily volumes:
DeviceProcessEvents leads at approximately 32,000 events/day from 796 MDE-enrolled devices. This is the table where time filtering matters most — always start with where TimeGenerated > ago(1h) before adding other filters.
SigninLogs generates approximately 45,000 events/day — but this includes non-interactive token refreshes (AADNonInteractiveUserSignInLogs). Interactive sign-ins alone are approximately 3,000/day. The IsInteractive field separates the two.
OfficeActivity generates approximately 15,000 events/day covering email, SharePoint, OneDrive, and Teams. The RecordType field separates email operations (RecordType 2) from SharePoint operations (RecordType 6) from other activity types.
The ninth table you will need
The 8 daily tables handle 95% of investigation queries. The ninth — needed for 5% of investigations but CRITICAL when required — is AADNonInteractiveUserSignInLogs. This table contains non-interactive authentication events: token refreshes, application-level authentication, and service principal sign-ins. At NE, this table generates 42,000 rows/day — more than SigninLogs. Most of these are legitimate application activity. But AiTM token replay appears HERE, not in SigninLogs — because the attacker’s replayed token generates a non-interactive authentication event. DE4-002 queries this table specifically. If you query only SigninLogs during an AiTM investigation, you miss the attacker’s operational sessions entirely.
You're reading the free modules of Mastering KQL
The full course continues with advanced topics, production detection rules, worked investigation scenarios, and deployable artifacts. Premium subscribers get access to all courses.