SaveMyCert
Log in
5 of 5 free questions left today·for 30 a day
Secure storage, databases, and networking

SC-500 Database Security: Azure SQL Hardening, Auditing and Defender for Databases

19 min readSC-500 · Secure storage, databases, and networkingUpdated

Database security on SC-500 means hardening Azure SQL at the platform level (who can reach the logical server, which TLS versions and identities it accepts, and who holds the encryption key), recording what happens inside it with auditing for Azure SQL Database and Azure SQL Managed Instance, and detecting attacks with the Defender for Databases plan in Microsoft Defender for Cloud. This lesson covers server- and database-level firewall rules, public network access and minimum TLS, Microsoft Entra-only authentication, TDE with customer-managed keys, audit policies and destinations, Managed Instance audits in T-SQL, support-operations auditing, Defender for SQL threat alerts and SQL vulnerability assessment. Private endpoints and Private Link themselves are taught in the network-services lesson; storage account hardening has its own lesson.

What you’ll learn
  • Choose between server-level IP rules, database-level IP rules, virtual network rules and the Allow Azure services setting to give exactly the access a requirement asks for.
  • Configure public network access, connection settings and the minimum TLS version on a logical server, and predict what each setting blocks.
  • Enforce Microsoft Entra-only authentication, including its prerequisite, the separation-of-duties roles and Azure Policy enforcement at scale.
  • Set up TDE with a customer-managed key in Key Vault: vault protections, the server identity's permissions, revocation and automatic rotation.
  • Configure auditing for Azure SQL Database (server vs database level, destinations, retention, firewalled and immutable storage) and for SQL Managed Instance with T-SQL, including Microsoft support operations.
  • Enable Defender for Databases offerings at subscription or resource level, interpret and route SQL threat alerts, and run SQL vulnerability assessment in express or classic configuration.

Network access to an Azure SQL logical server: firewall rules, virtual network rules and Allow Azure services

Clients reach Azure SQL Database through the logical server's public endpoint only when a rule lets their address in: a server-level IP firewall rule opens every database on the server, a database-level IP firewall rule opens one database, and a virtual network rule admits a whole Azure subnet that has the Microsoft.Sql service endpoint. Everything else is rejected before authentication is even attempted.

Rule typeScopeWhere it is storedHow you manage it
Server-level IP ruleAll databases on the logical server, including future onesThe master database (sys.firewall_rules)Portal (server Networking page, or the Set server firewall button on any database), CLI, PowerShell, REST, or sp_set_firewall_rule in master
Database-level IP ruleOne database onlyInside that database (sys.database_firewall_rules), so it travels with geo-replicas and copiesT-SQL only: sp_set_database_firewall_rule in the database
Virtual network ruleAll databases on the serverServer configurationPortal, CLI, PowerShell; needs the subnet's Microsoft.Sql service endpoint

Evaluation runs from the narrow scope outward: a connection to a specific database is first checked against that database's rules, then against the server-level rules. So the way to give an external IP range access to just one database out of many is a database-level rule; any server-level rule, however it is created, opens all of them. Virtual network rules match Azure subnets, never internet IP ranges. The tooling differs too: the portal, CLI and PowerShell manage server-level rules, while database-level rules exist only in T-SQL.

Firewall changes are not always instant. Server-level rules are cached inside each database, and security changes can take up to about five minutes to show. To make a new server-level rule apply immediately for one database, connect to that database and run DBCC FLUSHAUTHCACHE. The command clears only the cache of the database you run it in, so it has to be run in each database that must see the change at once.

What 'Allow Azure services and resources to access this server' really permits

The Allow Azure services and resources to access this server setting creates a server-level rule named AllowAllWindowsAzureIps with start and end address 0.0.0.0, and it admits connections from any Azure resource with outbound connectivity, in any subscription and any tenant, including other customers'. It is not scoped to your subscription, resource group or Microsoft Entra tenant, so authentication becomes the only barrier.

Microsoft recommends narrower alternatives:

  • A virtual network rule for the subnet the workload actually uses. An App Service app with regional virtual network integration, for example, sends its traffic from its integration subnet, so a rule for that subnet (with the Microsoft.Sql service endpoint) admits just that app.
  • A private endpoint, which gives the server a private IP address in your virtual network (covered in the network-services lesson).

A virtual network rule only narrows access if the Azure services setting is then turned off; leaving it on keeps the whole of Azure allowed. IP rules for App Service outbound addresses are a weak substitute, because those addresses are shared with other apps on the same scale unit.

Public network access and connectivity settings: Disable, Selected networks and minimum TLS

The logical server's Public network access setting decides whether the public endpoint exists at all. Selected networks keeps it and lets IP firewall rules and virtual network rules decide who gets in; Disable turns it off so that only private endpoint connections succeed, whatever rules exist.

SettingPublic endpointFirewall and virtual network rulesPrivate endpoints
Selected networksOpen to clients matched by a ruleEvaluated, and can be added or changedWork
DisableEvery connection refused (error 47073), Azure services includedCannot be created or modified (error 42101)Work (the only path)

Two consequences follow. First, Disable is a standing control, while rules are a current state: with Selected networks, removing every rule closes the endpoint only until a rule is added again, whereas Disable keeps it closed and blocks rule changes. Second, Disable has no exception for Azure-hosted clients: the AllowAllWindowsAzureIps rule is itself a public-endpoint rule, so a service such as an Azure Data Factory integration runtime that connected through it fails until it uses a private endpoint (for example a managed private endpoint) or public access is set back to Selected networks. Likewise, when an administrator must add a temporary IP rule and gets error 42101, the first step is to switch public network access to Selected networks; the private endpoint keeps working alongside it.

The connection policy (Default, Redirect or Proxy) on the same Connectivity page only controls how traffic is routed to the database node after the gateway. It does not grant or deny access and has nothing to do with TLS.

Minimum TLS version

The minimum TLS version is set once on the logical server (Networking > Connectivity) and applies to every database on it; there is no per-database setting. Clients that negotiate a lower version fail with an invalid TLS version login error. TLS 1.0 and 1.1 have been retired for Azure SQL, so in practice the choice is 1.2 or 1.3; setting 1.2 still accepts 1.3 clients. Once a minimum is enforced you cannot go back to the original "no minimum" default, only to another version.

Before raising the minimum, find out which clients would break. Microsoft documents two sources: the database's Metrics for successful connections, split by TLS version, and the client_tls_version_name field in the audit records. The Activity log only shows who changed the setting, not what clients negotiate.

Microsoft Entra-only authentication for Azure SQL

Microsoft Entra-only authentication turns off SQL authentication on a logical server (or managed instance) so that only Microsoft Entra users, groups, service principals and managed identities can connect. It is a server setting on the Microsoft Entra ID page, labelled Support only Microsoft Entra authentication for this server.

  • Prerequisite: the server must have a Microsoft Entra admin. Until one is set, the option is unavailable in the portal and API calls fail, whatever Azure role you hold. Set the Entra admin first, then enable the option.
  • Effect on SQL logins: existing SQL logins and their database users stay where they are; they simply can no longer connect, over any path, private endpoint included. Removing them is a separate clean-up task.
  • At scale: to make every new server comply, and block deployments that don't, assign the built-in Azure Policy definitions for Azure SQL Microsoft Entra-only authentication at a management group. Policy is the tool that evaluates resource configuration at deployment time; reporting and after-the-fact remediation tools leave non-compliant servers running in the meantime.

Microsoft built two roles for separation of duties around this setting:

Built-in roleCan toggle Entra-only authenticationCan set or remove the Entra adminOther notes
SQL Security ManagerYesNoManages security settings such as auditing, Defender for SQL and vulnerability assessment
SQL Server ContributorNoYesManages servers but deliberately lacks security-policy permissions
Owner / ContributorYesYesToo broad when duties must be split
SQL DB ContributorNoNoDatabase-level management only

Transparent data encryption with a customer-managed key

Transparent data encryption (TDE) encrypts data files, logs and backups at rest with a database encryption key (DEK); the TDE protector encrypts that DEK. With a service-managed protector Microsoft owns the key. With a customer-managed key (bring your own key) the protector is an RSA key in Azure Key Vault or Managed HSM that you control, so you can make the data unreadable by withdrawing the server's access to it, with no application changes. Cell-level encryption needs code changes and dynamic data masking is not encryption at all.

Setting up the customer-managed protector requires:

  • Soft-delete and purge protection on the key vault. Losing the protector makes every database it protects inaccessible, so Azure SQL refuses a vault without both and the save fails validation.
  • A managed identity on the server (system- or user-assigned) with get, wrapKey and unwrapKey on the key. Both Key Vault permission models are supported: with vault access policies you grant those three key permissions; with Azure RBAC the least-privilege role is Key Vault Crypto Service Encryption User for the server's identity. The grant goes to the server's identity, because it is the server that wraps and unwraps the DEK, and the role should allow only cryptographic use of keys, not key management or access to secrets.
  • If the vault has a firewall, the vault must let Azure SQL in (the trusted Microsoft services exception).

Revocation: if the server loses access to the protector (key deleted, disabled or permissions removed), its databases deny connections and become inaccessible within minutes. If access is restored within about 30 minutes the databases heal automatically; after that, recovery is not automatic and you must revalidate the key (the portal's Revalidate key option) to bring them back, which can take longer.

Rotation takes two halves. A rotation policy on the key in Key Vault creates new key versions on schedule, and automatic key rotation on the server's TDE settings (off by default) makes Azure SQL detect a new version and switch the protector to it, within about 24 hours. Rotating the protector re-wraps only the DEK, so no data is re-encrypted. Both halves are needed: a new key version that the server never switches to protects nothing new, and an expiry date on a key only marks when it should stop being used.

Auditing Azure SQL Database: server vs database policies, destinations and retention

Azure SQL Database auditing records database events (by default successful and failed authentications and completed batches) and writes them to one or more destinations. You can define an audit policy at the server level, the database level, or both.

  • A server-level policy applies to every existing and future database on the logical server. It is the low-effort choice when every database must be audited the same way.
  • A database-level policy applies to one database and runs alongside a server policy rather than replacing it, so the database is then audited twice.

Microsoft recommends server-level auditing only, and adding database-level auditing just for a database that needs something different: another storage account, a different retention period, a separate workspace, or different event types. Adding a destination to the server policy instead would send every database's records there.

There is one performance-driven exception. Server-level records written to storage are consolidated in a single master folder, so retrieving one database's trail means sifting through all of them. For large, busy OLTP estates, Microsoft's guidance is to turn server auditing off and audit each database at database level, so each writes to its own folder. The fix is the auditing level, not the event set: the separate folders come only from database-level policies with server auditing off, and trimming default action groups changes what is recorded rather than where it is stored.

Audit destinations, retention and the diagnostic setting

Azure SQL auditing writes to three destination types, and you can select several at once; each receives the full record set.

DestinationUse it forFormat and retention
Azure Storage accountLong-term, low-cost retention and evidence.xel files; the audit's retention (days) applies here, 0 means unlimited
Log Analytics workspaceKQL queries alongside other Azure logs, Microsoft SentinelWorkspace retention settings
Event HubsNear-real-time streaming to a third-party SIEMConsumer decides

These three are the only destination types the audit policy offers; anything else is reached by forwarding from one of them.

Retention changes are not retroactive. If retention was 0 (unlimited) and you change it to a number of days, the new period applies only to logs written after the change; older files stay until you remove them another way, for example with a storage lifecycle management policy where that is allowed.

Log Analytics and Event Hubs are wired through a diagnostic setting that sends the SQLSecurityAuditEvents category. The portal creates it for you, but if someone later deletes it, auditing fails silently: the Auditing page still lists the workspace while no records arrive. Microsoft's safeguard is an activity log alert rule with an action group on diagnostic-setting deletion for the server. A policy that checks whether auditing is enabled would still pass, because the audit setting itself never changed.

Auditing to a storage account behind a firewall or with immutable storage

Auditing can write to a storage account that accepts only selected virtual networks, but only when four conditions hold:

  1. The account is general-purpose v2. A GPv1 or Blob Storage account must be upgraded first.
  2. The storage firewall has Allow trusted Microsoft services to access this storage account turned on. Adding the server's outbound IP addresses is not the documented mechanism.
  3. The logical server authenticates with its managed identity, not storage access keys, which aren't supported in this setup (and can't work anyway when shared key access is disabled).
  4. That identity holds Storage Blob Data Contributor on the account, because auditing writes append blobs. Storage Blob Data Reader cannot write.

Immutable audit storage stops anyone altering or deleting audit files for a fixed period with a time-based retention policy on the container. For SQL auditing to keep writing to it:

  • Allow protected append writes must be Append blobs or Block and append blobs; None isn't supported.
  • The storage policy's retention interval must be shorter than the SQL audit retention in days.
  • An audit retention of 0 (unlimited) isn't supported together with a storage immutability policy.

Auditing Azure SQL Managed Instance and Microsoft support operations

Azure SQL Managed Instance auditing uses the SQL Server audit model in T-SQL, not the Auditing page that SQL Database has: you create a server audit (where records go), one or more audit specifications (what to record), and then enable both. CREATE SERVER AUDIT leaves the audit itself off, so a common fault is a specification that is on but an audit that never started; ALTER SERVER AUDIT ... WITH (STATE = ON) fixes it.

DestinationServer audit targetExtra setup
Blob storageTO URL (PATH = 'https://<account>.blob.core.windows.net/<container>')A server credential named after the container URL, with IDENTITY = 'SHARED ACCESS SIGNATURE' and the SAS token as the secret
Log Analytics or Event HubsTO EXTERNAL_MONITORA diagnostic setting on the instance sending the SQLSecurityAuditEvents category to the workspace or event hub

Choose the specification by scope. A server audit specification takes server-level action groups such as FAILED_LOGIN_GROUP. A database audit specification, created inside the database, takes database action groups or individual object actions; to record only reads of one table, add SELECT ON dbo.TableName BY public. Broad groups such as SCHEMA_OBJECT_ACCESS_GROUP record far more than one table, and DATABASE_OBJECT_ACCESS_GROUP covers database objects such as certificates and assemblies, not table reads. A specification always belongs to a server audit; it can't exist without one.

CREATE SERVER AUDIT FinanceAudit TO EXTERNAL_MONITOR;
ALTER SERVER AUDIT FinanceAudit WITH (STATE = ON);
-- in the Finance database
CREATE DATABASE AUDIT SPECIFICATION InvoiceReads
  FOR SERVER AUDIT FinanceAudit
  ADD (SELECT ON dbo.Invoices BY public)
  WITH (STATE = ON);

Auditing Microsoft support operations

Auditing of Microsoft support operations records what Microsoft support engineers do on your server when they access it during a support request you opened, which some regulators require. It is separate from your normal audit:

  • Azure SQL Database: turn on Enable Auditing of Microsoft support operations on the server's Auditing page. It can use its own destination, so the existing server audit policy stays unchanged.
  • Azure SQL Managed Instance: create a separate server audit with OPERATOR_AUDIT = ON (to EXTERNAL_MONITOR), and select the DevOps operations Audit Logs category in the instance's diagnostic setting. Turning support-operations auditing on for an existing audit overwrites it so that it logs only support operations, and the diagnostic category produces nothing without the audit behind it.

Don't confuse it with neighbours: Customer Lockbox for Microsoft Azure controls whether support engineers may access your data at all (approval), the Activity log records control-plane operations, and Microsoft Purview Audit covers Microsoft 365 activity, not database operations.

Defender for Databases: what each offering protects and how to enable it

The Databases plan in Microsoft Defender for Cloud bundles four offerings that add threat detection (and, for SQL, vulnerability assessment) to database services. You can enable the whole plan on a subscription or use Select types to choose offerings.

OfferingProtectsNot covered
Defender for Azure SQL DatabasesAzure SQL Database, Azure SQL Managed Instance, dedicated SQL pools in Azure SynapseSQL Server you install yourself
Defender for SQL Servers on MachinesSQL Server on Azure VMs, Azure Arc-enabled servers and on-premises machinesThe VM's operating system (that's Defender for Servers)
Defender for Open-Source Relational DatabasesAzure Database for PostgreSQL flexible server and MySQL flexible server, plus Amazon RDS engines on AWSSelf-managed PostgreSQL/MySQL on machines or Arc; Azure Cosmos DB for PostgreSQL
Defender for Azure Cosmos DBAzure Cosmos DB for NoSQL accountsThe MongoDB, Apache Cassandra, Table and Apache Gremlin APIs

Subscription level versus resource level

For Azure SQL, enabling the offering on the subscription protects every server in it, including servers created later. To protect only chosen servers, leave the subscription plan off and enable Microsoft Defender for SQL on each server (the server's Security > Microsoft Defender for Cloud page); billing is per protected server. The least-privilege role for a team that should switch on Defender for SQL and manage vulnerability assessment for its own servers only is SQL Security Manager scoped to those servers; Security Admin on the subscription reaches beyond them, and SQL Server Contributor lacks the security permissions by design.

Defender for SQL threat alerts: detection, investigation and notification

Advanced Threat Protection, delivered by Defender for SQL, watches database activity with built-in detections and raises security alerts with investigation and mitigation guidance; you write no detection queries. It is different from auditing (raw events you must analyse) and vulnerability assessment (weaknesses, not attacks).

AlertWhat it means
A possible vulnerability to SQL InjectionThe application sent a faulty statement, typically built by concatenating user input, that the engine couldn't run. A coding weakness, not yet an exploit (Medium)
Potential SQL injectionAn active exploitation of an identified injection weakness (High)
Suspected brute force attack (using a valid user, or not)Many failed sign-ins against the server
Logon from an unusual location, data center or principal; logon from a potentially harmful applicationAnomalous access patterns or known attack tools

Alerts appear in Defender for Cloud's security alerts, on the database resource's Microsoft Defender for Cloud page, and in Microsoft Sentinel or Defender XDR when connected. To investigate, pair the alert with the audit trail. One gap matters: when Microsoft Entra authentication fails, the credential is rejected before the database is reached, so neither server nor database auditing records failed Entra sign-ins. Find those in the sign-in logs of the Microsoft Entra admin center; failed SQL logins do appear in the SQL audit. Entra audit logs record directory changes, and the Activity log is control-plane only.

Email notifications are configured in Defender for Cloud's environment settings. By default only subscription owners get email, and only for high-severity alerts. To notify someone without giving them a role, add their address as an additional recipient, and set the minimum severity (Medium sends medium and high). Email goes to the roles and addresses listed in those settings; an Azure role assignment on its own is not a notification.

SQL vulnerability assessment: express and classic configuration

SQL vulnerability assessment scans databases for misconfigurations, excessive permissions and unprotected sensitive data, and reports failed rules as Defender for Cloud recommendations. It comes in two configurations:

AspectExpress (recommended, default)Classic
StorageNo customer storage account; results kept in the server's regionA storage account you create and manage
BaselinesTake effect immediately, without a rescanTake effect only after the database is scanned again
Email reportsNo built-in scheduled email; build it with Azure Logic AppsBuilt-in periodic recurring scan emails
PrerequisitesSQL managed instances need a system-assigned managed identity; logical servers need nothing extraStorage permissions for the server

A baseline records that a failing result is intended (for example, permissions you granted on purpose) so the rule passes from then on. To view findings across a subscription, Microsoft lists Security Admin or Security Reader; only Security Reader is read-only, so it fits an auditor who must not change settings.

Tip. Expect Microsoft-style scenarios: a logical server or managed instance, a requirement and a deciding constraint such as least privilege, minimize administrative effort, no application changes, keep the existing audit unchanged, or a budget that covers only some servers. Items ask which rule scope, setting, role, destination or Defender offering fits, which two configurations together make something work (multi-response), or why something silently isn't working (an audit that was never enabled, a baseline waiting for a rescan, a deleted diagnostic setting, an error code after disabling public access). Near-twins to keep apart: server vs database firewall rules, Disable vs Selected networks, SQL Security Manager vs SQL Server Contributor, server vs database audit policies, TO URL vs TO EXTERNAL_MONITOR, express vs classic vulnerability assessment, and the two SQL injection alerts. Private endpoint and network-service details are tested in the networking topic.

Key takeaways
  • A database-level IP rule (T-SQL only, stored in the database) opens one database; any server-level rule opens every database on the server; virtual network rules match Azure subnets, not internet IPs.
  • Allow Azure services (AllowAllWindowsAzureIps, 0.0.0.0) admits every Azure resource in every tenant; replace it with a virtual network rule or private endpoint and turn it off.
  • Public network access = Disable rejects every public connection (error 47073) and blocks firewall-rule changes (error 42101); Selected networks lets rules decide.
  • Minimum TLS is server-wide, can't return to 'no minimum' once set, and audit client_tls_version_name or connection metrics show which clients would break.
  • Entra-only authentication needs an Entra admin first; SQL Security Manager toggles it but can't change the admin, SQL Server Contributor is the reverse; SQL logins stay but can't connect.
  • Customer-managed TDE needs soft-delete and purge protection plus get/wrapKey/unwrapKey (Key Vault Crypto Service Encryption User) for the server identity; rotation = Key Vault rotation policy + server automatic key rotation.
  • Prefer server-level auditing; add database-level auditing only for a database that needs a different destination, retention or event set; busy OLTP estates may switch to database-level for per-database folders.
  • Firewalled audit storage needs GPv2, trusted Microsoft services, the server's managed identity and Storage Blob Data Contributor; a deleted SQLSecurityAuditEvents diagnostic setting fails silently, so alert on it.
  • Managed Instance audits are T-SQL: TO URL with a SAS credential or TO EXTERNAL_MONITOR with a diagnostic setting, then enable the audit itself; support operations need a separate OPERATOR_AUDIT audit.
  • Defender for Databases covers Azure SQL, SQL Server on machines, PostgreSQL/MySQL flexible server and Cosmos DB for NoSQL only; VA express needs no storage and applies baselines without a rescan.

Frequently asked questions

What is the difference between server-level and database-level firewall rules in Azure SQL Database?

A server-level IP firewall rule is stored in the master database and lets the matched addresses reach every database on the logical server; you can manage it in the portal, CLI, PowerShell or with sp_set_firewall_rule. A database-level IP firewall rule is stored inside one database, admits the addresses to that database only, and can be created only with T-SQL (sp_set_database_firewall_rule). Use a database-level rule when an external range must reach one database and no others.

Is 'Allow Azure services and resources to access this server' safe to leave on?

It is broader than most teams think. The setting creates the AllowAllWindowsAzureIps rule (0.0.0.0), which accepts connections from any Azure resource in any subscription or tenant, including other customers'. Microsoft recommends replacing it with virtual network rules for the subnets you use, or with private endpoints, and then turning it off.

What happens when you set Public network access to Disable on an Azure SQL logical server?

The public endpoint stops accepting connections, including from Azure services, and clients get error 47073 telling them to use a private endpoint. IP firewall rules can't be created or changed while it is set (error 42101). Private endpoint connections keep working. To add a temporary IP rule, set public network access back to Selected networks first.

Why can't I turn on Microsoft Entra-only authentication for my Azure SQL server?

The option stays unavailable until the server has a Microsoft Entra admin. Set an Entra admin first, then enable Support only Microsoft Entra authentication. The person enabling it needs a role with the azureADOnlyAuthentications permissions, such as SQL Security Manager, Contributor or Owner.

What Key Vault settings does Azure SQL TDE with a customer-managed key require?

The key vault must have soft-delete and purge protection enabled, and the logical server's managed identity needs get, wrapKey and unwrapKey on the key, which under Azure RBAC is the Key Vault Crypto Service Encryption User role. If the vault has a firewall, it must allow trusted Microsoft services. For hands-off rotation, add a rotation policy to the key and enable automatic key rotation on the server.

Should I configure Azure SQL auditing at the server level or the database level?

Microsoft recommends server-level auditing, which covers every existing and future database. Add database-level auditing only for a database that needs a different storage account, retention, workspace or event set; the two policies run side by side. For many busy OLTP databases auditing to storage, database-level auditing alone gives each database its own folder instead of one shared master folder.

How do you configure auditing on Azure SQL Managed Instance?

With T-SQL. Create a server audit TO URL (blob storage, authenticated by a credential named after the container URL with a SAS token) or TO EXTERNAL_MONITOR (Log Analytics or Event Hubs, plus a diagnostic setting sending SQLSecurityAuditEvents). Add a server or database audit specification, and enable both the specification and the audit with STATE = ON, because CREATE SERVER AUDIT leaves the audit off.

Which databases does the Defender for Databases plan protect?

Four offerings: Defender for Azure SQL Databases (SQL Database, SQL Managed Instance, Synapse dedicated SQL pools), Defender for SQL Servers on Machines (SQL Server on Azure VMs, Arc-enabled and on-premises machines), Defender for Open-Source Relational Databases (Azure Database for PostgreSQL and MySQL flexible server, plus Amazon RDS), and Defender for Azure Cosmos DB, which supports only the NoSQL API.

Source

This lesson covers the "Secure storage, databases, and networking" domain of the official SC-500 exam guide. Vendors revise their guides — check the source for the current version.

Sign up free to mark lessons complete, bookmark topics and track your exam readiness.

Spotted a mistake in this lesson?