<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Azure SQL Blog articles</title>
    <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/bg-p/AzureSQLBlog</link>
    <description>Azure SQL Blog articles</description>
    <pubDate>Wed, 27 May 2026 10:36:03 GMT</pubDate>
    <dc:creator>AzureSQLBlog</dc:creator>
    <dc:date>2026-05-27T10:36:03Z</dc:date>
    <item>
      <title>Regex support for LOB types in T-SQL—available in Azure SQL &amp; SQL Server 2025</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/regex-support-for-lob-types-in-t-sql-available-in-azure-sql-sql/ba-p/4522396</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;At a glance&lt;/STRONG&gt; — Native regular expression (regex) functions in T-SQL now accept varchar(max) and nvarchar(max) inputs of up to&amp;nbsp;&lt;STRONG&gt;2 MB&lt;/STRONG&gt;&amp;nbsp;across&amp;nbsp;&lt;STRONG&gt;all seven&lt;/STRONG&gt;&amp;nbsp;regex functions, including the two table-valued functions (REGEXP_MATCHES&amp;nbsp;and&amp;nbsp;REGEXP_SPLIT_TO_TABLE). This capability ships in&amp;nbsp;&lt;A href="https://learn.microsoft.com/troubleshoot/sql/releases/sqlserver-2025/cumulativeupdate5" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;SQL Server 2025 CU5&lt;/STRONG&gt;&lt;/A&gt;&amp;nbsp;and is already available in&amp;nbsp;&lt;STRONG&gt;Azure SQL Database, SQL Database in Fabric&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;&lt;STRONG&gt;Azure SQL Managed Instance&lt;/STRONG&gt; configured with the Always-up-to-date update policy. It will reach Managed Instances on the SQL Server 2025 update policy as part of the CU5 rollout. You no longer need to split log files, HTML documents, or large JSON payloads into 8,000-byte chunks just to run a pattern match.&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H2&gt;1. Introduction&lt;/H2&gt;
&lt;P&gt;Regular expressions have long been a cornerstone of modern data processing — used for validation, parsing, transformation, and extracting structured insights from unstructured text. With&amp;nbsp;&lt;STRONG&gt;SQL Server 2025&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;&lt;STRONG&gt;Azure SQL&lt;/STRONG&gt;, regex is now a first-class T-SQL capability, removing the historical need to rely on SQLCLR functions or application-tier processing.&lt;/P&gt;
&lt;P&gt;While the initial release made native regex broadly available, large-object (LOB) inputs were not yet supported on every function. CU5 closes that gap.&lt;/P&gt;
&lt;P&gt;Under the hood, T-SQL regex implements&amp;nbsp;&lt;STRONG&gt;POSIX&amp;nbsp;&lt;/STRONG&gt;Extended Regular Expression&lt;STRONG&gt;&amp;nbsp;(ERE)&lt;/STRONG&gt;&amp;nbsp;semantics, augmented by a curated set of Perl-style features, and is powered by the RE2 engine. RE2 is a&amp;nbsp;&lt;EM&gt;linear-time&lt;/EM&gt;, non-backtracking implementation, which means it is not susceptible to catastrophic backtracking (a class of denial-of-service issue commonly known as ReDoS). That guarantee becomes far more important when the input is a 1.8 MB log blob than when it is an 8,000-byte string.&lt;/P&gt;
&lt;H3&gt;Release timeline&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;Milestone&lt;/td&gt;&lt;td&gt;What shipped&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Ignite 2025 — General Availability&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Regex went GA in&amp;nbsp;&lt;STRONG&gt;SQL Server 2025&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;&lt;STRONG&gt;Azure SQL&lt;/STRONG&gt;. LOB inputs were initially supported only on&amp;nbsp;REGEXP_LIKE,&amp;nbsp;REGEXP_COUNT, and&amp;nbsp;REGEXP_INSTR. LOB support on&amp;nbsp;REGEXP_REPLACE&amp;nbsp;and&amp;nbsp;REGEXP_SUBSTR&amp;nbsp;was deferred, and the two table-valued functions (TVFs) accepted only non-LOB string types.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Azure SQL (post-GA service updates)&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;LOB inputs enabled across all seven functions.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;A href="https://learn.microsoft.com/troubleshoot/sql/releases/sqlserver-2025/cumulativeupdate5" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;SQL Server 2025 CU5&lt;/STRONG&gt;&lt;/A&gt;&lt;/td&gt;&lt;td&gt;LOB inputs up to&amp;nbsp;&lt;STRONG&gt;2 MB&lt;/STRONG&gt;&amp;nbsp;enabled on&amp;nbsp;&lt;STRONG&gt;all seven&lt;/STRONG&gt; functions in the SQL Server.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;What’s new in CU5&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;varchar(max)&amp;nbsp;and&amp;nbsp;nvarchar(max)&amp;nbsp;inputs are accepted on&amp;nbsp;&lt;STRONG&gt;every&lt;/STRONG&gt;&amp;nbsp;regex function.&lt;/LI&gt;
&lt;LI&gt;The input string is capped at&amp;nbsp;&lt;STRONG&gt;2 MB per function call&lt;/STRONG&gt;. The pattern is still capped at&amp;nbsp;&lt;STRONG&gt;8,000 bytes&lt;/STRONG&gt;, which is far larger than any maintainable regular expression should ever need.&lt;/LI&gt;
&lt;LI&gt;Behavior is consistent between Azure SQL and SQL Server, so code you write today is fully portable.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;&amp;nbsp;— The 2 MB limit applies to the&amp;nbsp;&lt;STRONG&gt;input passed to a single function call&lt;/STRONG&gt;, not to the column or row. A single value in a varchar(max) column can still store up to 2 GB; the constraint is that no single regex evaluation can consume more than 2 MB of that value.&lt;/P&gt;
&lt;H3&gt;Prerequisites&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;SQL Server 2025 CU5&lt;/STRONG&gt;&amp;nbsp;or later,&amp;nbsp;&lt;STRONG&gt;or&lt;/STRONG&gt;&amp;nbsp;Azure SQL Database,&amp;nbsp;&lt;STRONG&gt;or&lt;/STRONG&gt;&amp;nbsp;SQL Database in Fabric&amp;nbsp;&lt;STRONG&gt;or&lt;/STRONG&gt;&amp;nbsp;Azure SQL Managed Instance configured with the SQL Server 2025 / Always-up-to-date&amp;nbsp;&lt;A href="https://learn.microsoft.com/azure/azure-sql/managed-instance/update-policy" target="_blank" rel="noopener"&gt;update policy&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;The two table-valued functions (REGEXP_MATCHES&amp;nbsp;and&amp;nbsp;REGEXP_SPLIT_TO_TABLE) require&amp;nbsp;&lt;STRONG&gt;database compatibility level 170&lt;/STRONG&gt;, unless the database-scoped configuration ALLOW_BUILTIN_TVF_IN_ALL_COMPAT_LEVELS (preview) is enabled.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt; — On Azure SQL Managed Instance (Always-up-to-date), this capability is rolling out region by region. It is already live in regions where the rollout has completed and will light up in the remaining regions as the deployment finishes. Instances on the&amp;nbsp;&lt;STRONG&gt;SQL Server 2025&lt;/STRONG&gt; update policy will receive it as part of the CU5 rollout — coming soon.&lt;/P&gt;
&lt;P&gt;Verify compatibility level (170 required for the TVFs) –&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;SELECT name, compatibility_level FROM sys.databases WHERE name = DB_NAME(); 

-- If necessary: 
-- ALTER DATABASE [&amp;lt;your-database&amp;gt;] SET COMPATIBILITY_LEVEL = 170;&lt;/LI-CODE&gt;
&lt;H2&gt;2. Working with LOB Data&lt;/H2&gt;
&lt;P&gt;This section demonstrates the CU5 capabilities against a realistic LOB data. We build a LogEntries table whose RawPayload column holds multi-KB to multi-MB chunks of web server and application output, plus an HtmlPages table for HTML cleansing examples.&lt;/P&gt;
&lt;H3&gt;2.1 Create the sample schema and data&lt;/H3&gt;
&lt;LI-CODE lang="sql"&gt;IF OBJECT_ID('dbo.LogEntries', 'U') IS NOT NULL DROP TABLE dbo.LogEntries;
IF OBJECT_ID('dbo.HtmlPages',  'U') IS NOT NULL DROP TABLE dbo.HtmlPages;

CREATE TABLE dbo.LogEntries
(
    LogId       BIGINT IDENTITY(1,1) PRIMARY KEY,
    Source      SYSNAME       NOT NULL,
    IngestedAt  DATETIME2(3)  NOT NULL DEFAULT SYSUTCDATETIME(),
    RawPayload  VARCHAR(MAX)  NOT NULL   -- LOB column
);

CREATE TABLE dbo.HtmlPages
(
    PageId      INT IDENTITY(1,1) PRIMARY KEY,
    Url         NVARCHAR(2048) NOT NULL,
    Body        NVARCHAR(MAX)  NOT NULL  -- LOB column (Unicode)
);&lt;/LI-CODE&gt;
&lt;P&gt;Now generate realistically large rows. The&amp;nbsp;REPLICATE(CAST(...&amp;nbsp;AS varchar(max)),&amp;nbsp;n)&amp;nbsp;pattern is required because&amp;nbsp;REPLICATE&amp;nbsp;returns&amp;nbsp;NULL&amp;nbsp;when the result would exceed 8,000 bytes unless its first argument is a max type.&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;-- Synthetic web access-log payload (~252 KB in row 1, plus a separate ~586 KB row).
DECLARE @logLine VARCHAR(500) =
    '127.0.0.1 - alice [21/May/2026:10:15:32 +0000] "GET /api/orders/42 HTTP/1.1" 200 1532 ' +
    'user-agent="Mozilla/5.0" ip=10.0.0.7 email=alice@contoso.com card=4111-1111-1111-1234' + CHAR(10);

DECLARE @bigLog VARCHAR(MAX) =
    REPLICATE(CAST(@logLine AS VARCHAR(MAX)), 1500)                -- ~252 KB
    + '127.0.0.1 - mallory [21/May/2026:10:16:01 +0000] "POST /login HTTP/1.1" 500 0 ' +
      'ip=203.0.113.99 ssn=123-45-6789' + CHAR(10);

INSERT INTO dbo.LogEntries (Source, RawPayload) VALUES
    ('web-01', @bigLog),                                            -- ~252 KB
    ('web-02', REPLICATE(CAST('OK ' AS VARCHAR(MAX)), 200000));     -- ~586 KB

-- Synthetic HTML page (~775 KB / ~396,000 characters).
DECLARE @htmlChunk NVARCHAR(MAX) =
    N'&amp;lt;div class="row"&amp;gt;&amp;lt;p&amp;gt;Hello &amp;lt;b&amp;gt;world&amp;lt;/b&amp;gt;! Contact &amp;lt;a href="mailto:bob@contoso.com"&amp;gt;bob&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;';

INSERT INTO dbo.HtmlPages (Url, Body) VALUES
    (N'https://contoso.example/page-1',
     N'&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Big Page&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;'
     + REPLICATE(@htmlChunk, 4000)
     + N'&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;');

-- Confirm payload sizes in bytes.
SELECT LogId, Source, DATALENGTH(RawPayload) AS PayloadBytes FROM dbo.LogEntries;
SELECT PageId, DATALENGTH(Body) AS BodyBytes, LEN(Body) AS BodyChars FROM dbo.HtmlPages;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Results:&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;LogId&lt;/td&gt;&lt;td&gt;Source&lt;/td&gt;&lt;td&gt;PayloadBytes&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;web-01&lt;/td&gt;&lt;td&gt;258,110&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;web-02&lt;/td&gt;&lt;td&gt;600,000&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;PageId&lt;/td&gt;&lt;td&gt;BodyBytes&lt;/td&gt;&lt;td&gt;BodyChars&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;792,124&lt;/td&gt;&lt;td&gt;396,062&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;Before CU5, feeding any of these payloads into&amp;nbsp;REGEXP_REPLACE,&amp;nbsp;REGEXP_SUBSTR,&amp;nbsp;REGEXP_MATCHES, or&amp;nbsp;REGEXP_SPLIT_TO_TABLE&amp;nbsp;would have failed with a type-mismatch error or required a&amp;nbsp;LEFT(RawPayload,&amp;nbsp;8000)-style truncation. The same queries now run end-to-end.&lt;/P&gt;
&lt;H3&gt;2.2 REGEXP_LIKE — Filter rows by LOB content&lt;/H3&gt;
&lt;LI-CODE lang="sql"&gt;-- Find logs that contain at least one HTTP 5xx response.
SELECT LogId, Source, DATALENGTH(RawPayload) AS PayloadBytes
FROM   dbo.LogEntries
WHERE  REGEXP_LIKE(RawPayload, '"[A-Z]+\s[^"]+\sHTTP/1\.[01]"\s5[0-9]{2}\s');&lt;/LI-CODE&gt;
&lt;P&gt;REGEXP_LIKE&amp;nbsp;is a Boolean predicate: it evaluates to&amp;nbsp;true&amp;nbsp;when the pattern matches anywhere in the input and&amp;nbsp;false&amp;nbsp;otherwise. Because it returns a Boolean rather than a&amp;nbsp;bit, use it directly in&amp;nbsp;WHERE,&amp;nbsp;CASE WHEN,&amp;nbsp;IIF, or&amp;nbsp;CHECK&amp;nbsp;constraint contexts — do&amp;nbsp;&lt;STRONG&gt;not&lt;/STRONG&gt;&amp;nbsp;compare it with = 1 or = 0 (the parser rejects that syntax).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;&amp;nbsp;—&amp;nbsp;REGEXP_LIKE&amp;nbsp;itself requires database compatibility level&amp;nbsp;&lt;STRONG&gt;170&lt;/STRONG&gt;. The other scalar regex functions (REGEXP_COUNT,&amp;nbsp;REGEXP_INSTR,&amp;nbsp;REGEXP_REPLACE,&amp;nbsp;REGEXP_SUBSTR) are available at all compatibility levels.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Results:&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;LogId&lt;/td&gt;&lt;td&gt;Source&lt;/td&gt;&lt;td&gt;PayloadBytes&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;web-01&lt;/td&gt;&lt;td&gt;258,110&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;2.3 REGEXP_COUNT — Counting at scale&lt;/H3&gt;
&lt;LI-CODE lang="sql"&gt;-- Per-row tally of GET requests, POST requests, and 5xx responses
-- across the entire LOB payload.
SELECT LogId,
       Source,
       REGEXP_COUNT(RawPayload, '"GET\s')        AS Gets,
       REGEXP_COUNT(RawPayload, '"POST\s')       AS Posts,
       REGEXP_COUNT(RawPayload, '\s5[0-9]{2}\s') AS ServerErrors
FROM   dbo.LogEntries;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Results:&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;LogId&lt;/td&gt;&lt;td&gt;Source&lt;/td&gt;&lt;td&gt;Gets&lt;/td&gt;&lt;td&gt;Posts&lt;/td&gt;&lt;td&gt;ServerErrors&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;web-01&lt;/td&gt;&lt;td&gt;1,500&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;web-02&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;2.4 REGEXP_INSTR — Locate the first error&lt;/H3&gt;
&lt;LI-CODE lang="sql"&gt;-- 1-based character position (or 0 if no match) of the FIRST 5xx response in each payload.
SELECT LogId,
       Source,
       REGEXP_INSTR(RawPayload, '\s5[0-9]{2}\s', 1, 1, 0) AS FirstErrorPos
FROM   dbo.LogEntries;&lt;/LI-CODE&gt;
&lt;P&gt;Parameter recap:&amp;nbsp;REGEXP_INSTR(string,&amp;nbsp;pattern,&amp;nbsp;start,&amp;nbsp;occurrence,&amp;nbsp;return_option&amp;nbsp;[,&amp;nbsp;flags&amp;nbsp;[,&amp;nbsp;group&amp;nbsp;]]). A&amp;nbsp;return_option&amp;nbsp;of&amp;nbsp;0&amp;nbsp;returns the starting position of the match;&amp;nbsp;1&amp;nbsp;returns the position immediately after the last character of the match.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Results:&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;LogId&lt;/td&gt;&lt;td&gt;Source&lt;/td&gt;&lt;td&gt;FirstErrorPos&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;web-01&lt;/td&gt;&lt;td&gt;258,072&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;web-02&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;2.5 REGEXP_REPLACE — Redact sensitive data in place&lt;/H3&gt;
&lt;P&gt;PII redaction over LOB payloads was one of the most-requested CU5 scenarios. Before CU5, it required a custom chunked-replace routine; it is now a single expression.&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;-- Redact credit-card-shaped tokens, U.S. SSN-shaped tokens, and email addresses
-- across the entire payload.
SELECT LogId,
       REGEXP_REPLACE(
           REGEXP_REPLACE(
               REGEXP_REPLACE(
                   RawPayload,
                   '\b[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}\b',
                   '****-****-****-****'),
               '\b[0-9]{3}-[0-9]{2}-[0-9]{4}\b',
               '***-**-****'),
           '\b[A-Za-z0-9._%+\-]+@[A-Za-z0-9.\-]+\.[A-Za-z]{2,}\b',
           '[redacted-email]'
       ) AS RedactedPayload
FROM   dbo.LogEntries;&lt;/LI-CODE&gt;
&lt;P&gt;Or strip every HTML tag from an&amp;nbsp;nvarchar(max)&amp;nbsp;page in a single call:&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;SELECT PageId,
       LEN(Body)                                     AS OriginalLen,
       LEN(REGEXP_REPLACE(Body, N'&amp;lt;[^&amp;gt;]+&amp;gt;', N''))    AS TextOnlyLen
FROM   dbo.HtmlPages;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Results&lt;/STRONG&gt;&amp;nbsp;— the ~775 KB HTML document collapses from 396,062 to 100,008 characters of plain text in a single call:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;PageId&lt;/td&gt;&lt;td&gt;OriginalLen&lt;/td&gt;&lt;td&gt;TextOnlyLen&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;396,062&lt;/td&gt;&lt;td&gt;100,008&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;2.6 REGEXP_SUBSTR — Extract a single value&lt;/H3&gt;
&lt;LI-CODE lang="sql"&gt;-- Pull the first IPv4 address out of each log payload.
SELECT LogId,
       REGEXP_SUBSTR(RawPayload,
                     '\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b',
                     1,    -- start position
                     1,    -- occurrence
                     'c',  -- flags: case-sensitive
                     0     -- group: 0 returns the whole match
                    ) AS FirstIp
FROM   dbo.LogEntries;&lt;/LI-CODE&gt;
&lt;P&gt;To return the contents of a specific capture group instead of the entire match, pass its 1-based group number as the final argument.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Results:&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;LogId&lt;/td&gt;&lt;td&gt;FirstIp&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;127.0.0.1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;2.7 REGEXP_MATCHES — Every match, set-based&lt;/H3&gt;
&lt;P&gt;This is where the combination of TVF and LOB delivers the largest productivity gain: extract every structured value from a megabyte of unstructured text in a single set-based query, with no client round-trips.&lt;/P&gt;
&lt;P&gt;REGEXP_MATCHES&amp;nbsp;returns one row per match with these columns:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;Column&lt;/td&gt;&lt;td&gt;Type&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;match_id&lt;/td&gt;&lt;td&gt;bigint&lt;/td&gt;&lt;td&gt;Sequence number of the match (1-based).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;start_position&lt;/td&gt;&lt;td&gt;int&lt;/td&gt;&lt;td&gt;1-based start index of the match.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;end_position&lt;/td&gt;&lt;td&gt;int&lt;/td&gt;&lt;td&gt;1-based end index of the match.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;match_value&lt;/td&gt;&lt;td&gt;same type as&amp;nbsp;string_expression&lt;/td&gt;&lt;td&gt;The entire matched substring.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;substring_matches&lt;/td&gt;&lt;td&gt;json&lt;/td&gt;&lt;td&gt;JSON array describing each capture group, with the shape&amp;nbsp;[{"value":"…","start":N,"length":N},&amp;nbsp;…].&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;LI-CODE lang="sql"&gt;-- Every email address in every log payload, alongside its row of origin.
SELECT  l.LogId,
        m.match_id,
        m.match_value AS EmailFound
FROM    dbo.LogEntries AS l
CROSS APPLY REGEXP_MATCHES(
        l.RawPayload,
        '\b[A-Za-z0-9._%+\-]+@[A-Za-z0-9.\-]+\.[A-Za-z]{2,}\b'
) AS m
ORDER BY l.LogId, m.match_id;&lt;/LI-CODE&gt;
&lt;P&gt;Capture groups are even more useful — you can project the parts of every log line as columns by reading from the&amp;nbsp;substring_matches&amp;nbsp;JSON document:&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;-- Parse Common-Log-Format-ish entries into ip, user, status, and bytes columns.
-- The pattern has four capture groups, accessed below as $[0] through $[3].
SELECT  l.LogId,
        m.match_id,
        JSON_VALUE(m.substring_matches, '$[0].value') AS Ip,
        JSON_VALUE(m.substring_matches, '$[1].value') AS UserName,
        JSON_VALUE(m.substring_matches, '$[2].value') AS Status,
        JSON_VALUE(m.substring_matches, '$[3].value') AS Bytes
FROM    dbo.LogEntries AS l
CROSS APPLY REGEXP_MATCHES(
        l.RawPayload,
        '^([0-9.]+)\s-\s(\S+)\s\[[^\]]+\]\s"[^"]+"\s([0-9]{3})\s([0-9]+)',
        'm'    -- multi-line: ^ and $ anchor to each line, not just the whole input
) AS m
ORDER BY l.LogId, m.match_id;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Important&lt;/STRONG&gt;&amp;nbsp;— Without the&amp;nbsp;'m'&amp;nbsp;flag, the&amp;nbsp;^&amp;nbsp;anchor matches only at the start of the entire 250 KB input, so you would receive exactly one match for the first line. The multi-line flag is what unlocks per-line extraction.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Results&lt;/STRONG&gt;&amp;nbsp;(first two parsed rows):&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;LogId&lt;/td&gt;&lt;td&gt;match_id&lt;/td&gt;&lt;td&gt;Ip&lt;/td&gt;&lt;td&gt;UserName&lt;/td&gt;&lt;td&gt;Status&lt;/td&gt;&lt;td&gt;Bytes&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;127.0.0.1&lt;/td&gt;&lt;td&gt;alice&lt;/td&gt;&lt;td&gt;200&lt;/td&gt;&lt;td&gt;1532&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;127.0.0.1&lt;/td&gt;&lt;td&gt;alice&lt;/td&gt;&lt;td&gt;200&lt;/td&gt;&lt;td&gt;1532&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;2.8 REGEXP_SPLIT_TO_TABLE — Shred a LOB into rows&lt;/H3&gt;
&lt;LI-CODE lang="sql"&gt;-- Project the entire log payload as one row per non-empty line.
SELECT  l.LogId,
        s.ordinal AS [LineNo],
        s.value   AS LineText
FROM    dbo.LogEntries AS l
CROSS APPLY REGEXP_SPLIT_TO_TABLE(l.RawPayload, '\r?\n') AS s
WHERE   l.LogId = 1
  AND   s.value &amp;lt;&amp;gt; ''
ORDER BY s.ordinal;&lt;/LI-CODE&gt;
&lt;P&gt;You now have a tabular projection of a multi-megabyte text blob without leaving the engine. You can feed it into a CTE, aggregate it, join it to dimension tables, or materialize it into a staging table — all set-based.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Results&lt;/STRONG&gt;&amp;nbsp;(first three rows):&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;LogId&lt;/td&gt;&lt;td&gt;ordinal&lt;/td&gt;&lt;td&gt;LineText (first 80 chars)&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;127.0.0.1&amp;nbsp;-&amp;nbsp;alice&amp;nbsp;[21/May/2026:10:15:32&amp;nbsp;+0000]&amp;nbsp;"GET /api/orders/42 HTTP/1.1"&amp;nbsp;200&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;127.0.0.1&amp;nbsp;-&amp;nbsp;alice&amp;nbsp;[21/May/2026:10:15:32&amp;nbsp;+0000]&amp;nbsp;"GET /api/orders/42 HTTP/1.1"&amp;nbsp;200&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;127.0.0.1&amp;nbsp;-&amp;nbsp;alice&amp;nbsp;[21/May/2026:10:15:32&amp;nbsp;+0000]&amp;nbsp;"GET /api/orders/42 HTTP/1.1"&amp;nbsp;200&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Tip — composing LOB regex pipelines&lt;/STRONG&gt; — CROSS APPLY (and OUTER APPLY when you need to preserve rows that produce no matches) is the primary composition primitive. You can stack REGEXP_SPLIT_TO_TABLE (lines) feeding REGEXP_MATCHES (fields per line) feeding ordinary aggregates, all within a single query plan.&lt;/P&gt;
&lt;H3&gt;2.9 The 2 MB ceiling — strategies for larger inputs&lt;/H3&gt;
&lt;P&gt;The 2 MB limit applies to the&amp;nbsp;&lt;STRONG&gt;input string of a single regex call&lt;/STRONG&gt;. If the value passed to a regex function exceeds 2 MB, the call raises an error (&lt;STRONG&gt;error number&amp;nbsp;19311&lt;/STRONG&gt;, severity 16) rather than silently truncating. That is the intended behavior — silent truncation would hide correctness bugs.&lt;/P&gt;
&lt;P&gt;In practice, 2 MB is a generous ceiling: a single log file or HTML document of that size is already unusual, and most real-world LOB data sit comfortably below it. When individual values do exceed the limit, the most reliable approach is to&amp;nbsp;&lt;STRONG&gt;split them into smaller logical units before they land in the column you want to query&lt;/STRONG&gt; — for example, by writing one log line, one document section, or one record per row at ingestion time. Because every regex function (including the two TVFs) shares the same 2 MB ceiling, sharding at query time is not generally feasible; doing it at the load path keeps every regex call well under the limit and avoids per-query workarounds.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Bytes vs. characters&lt;/STRONG&gt;&amp;nbsp;— The 2 MB limit is measured in&amp;nbsp;&lt;STRONG&gt;bytes&lt;/STRONG&gt;, not characters, and the byte count is based on the UTF-8 encoding of the input regardless of the column’s declared type. ASCII characters take 1 byte each, so plain ASCII text can run to roughly two million characters; non-ASCII characters take 2–4 bytes in UTF-8, so fewer characters fit. Keep in mind that&amp;nbsp;DATALENGTH()&amp;nbsp;reports storage size in the column’s own encoding, which may differ from the UTF-8 byte count used by the limit, and&amp;nbsp;LEN()&amp;nbsp;(which counts characters) is best avoided as a sizing check here.&lt;/P&gt;
&lt;P&gt;To measure the UTF-8 byte length that the limit actually checks, cast the value to varchar(max) under a UTF-8 collation and take its DATALENGTH:&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;SELECT DATALENGTH(
           CONVERT(varchar(max),
                   Body COLLATE Latin1_General_100_CI_AS_SC_UTF8)
       ) AS Utf8Bytes
FROM   dbo.HtmlPages;&lt;/LI-CODE&gt;
&lt;P&gt;Anything above 2 * 1024 * 1024 (2,097,152) bytes will be rejected by a regex call on that value.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Have a scenario that genuinely needs more than 2 MB?&lt;/STRONG&gt;&amp;nbsp;If your workload requires regex evaluation on individual values larger than the current 2 MB ceiling, we would like to hear about it. Please share the details — data shape, payload size, pattern, and business need — on the&amp;nbsp;&lt;A href="https://feedback.azure.com/d365community/forum/04fe6ee0-3b25-ec11-b6e6-000d3a4f0da0" target="_blank" rel="noopener"&gt;Azure SQL feedback portal&lt;/A&gt;. Customer feedback directly informs how we prioritize future limit changes.&lt;/P&gt;
&lt;H3&gt;2.10 Cleanup&lt;/H3&gt;
&lt;LI-CODE lang="sql"&gt;DROP TABLE IF EXISTS dbo.LogEntries;
DROP TABLE IF EXISTS dbo.HtmlPages;&lt;/LI-CODE&gt;
&lt;H2&gt;3. Summary&lt;/H2&gt;
&lt;H3&gt;What changed in CU5&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Before CU5&lt;/STRONG&gt;&amp;nbsp;— LOB inputs were accepted on&amp;nbsp;REGEXP_LIKE,&amp;nbsp;REGEXP_COUNT, and&amp;nbsp;REGEXP_INSTR. The remaining functions —&amp;nbsp;REGEXP_REPLACE,&amp;nbsp;REGEXP_SUBSTR, and the two TVFs (REGEXP_MATCHES,&amp;nbsp;REGEXP_SPLIT_TO_TABLE) — required non-LOB string inputs, which often meant truncating with&amp;nbsp;LEFT(...,&amp;nbsp;8000)&amp;nbsp;or chunking in the application tier.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;After CU5 (and already in Azure SQL)&lt;/STRONG&gt;&amp;nbsp;— All seven functions accept&amp;nbsp;varchar(max)&amp;nbsp;and&amp;nbsp;nvarchar(max)&amp;nbsp;inputs of up to&amp;nbsp;&lt;STRONG&gt;2 MB&lt;/STRONG&gt;. The pattern remains capped at 8,000 bytes.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Quick reference&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;Function&lt;/td&gt;&lt;td&gt;Returns&lt;/td&gt;&lt;td&gt;LOB input (CU5)&lt;/td&gt;&lt;td&gt;Common use case&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;REGEXP_LIKE&lt;/td&gt;&lt;td&gt;Boolean (predicate)&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Filter rows in&amp;nbsp;WHERE&amp;nbsp;/&amp;nbsp;CASE&amp;nbsp;/&amp;nbsp;CHECK&amp;nbsp;predicates&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REGEXP_COUNT&lt;/td&gt;&lt;td&gt;int&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Count occurrences of a pattern&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REGEXP_INSTR&lt;/td&gt;&lt;td&gt;int&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Position of the&amp;nbsp;&lt;EM&gt;n&lt;/EM&gt;th match&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REGEXP_REPLACE&lt;/td&gt;&lt;td&gt;string&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Redact, cleanse, or normalize text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REGEXP_SUBSTR&lt;/td&gt;&lt;td&gt;string&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Extract a single value&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REGEXP_MATCHES&amp;nbsp;(TVF)&lt;/td&gt;&lt;td&gt;(match_id,&amp;nbsp;start_position,&amp;nbsp;end_position,&amp;nbsp;match_value,&amp;nbsp;substring_matches)&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Extract every match plus capture groups (via JSON), set-based&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REGEXP_SPLIT_TO_TABLE&amp;nbsp;(TVF)&lt;/td&gt;&lt;td&gt;(value,&amp;nbsp;ordinal)&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Split a LOB into rows by a regex delimiter&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;Further reading&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Official documentation: &lt;A href="https://learn.microsoft.com/sql/t-sql/functions/regexp-like-transact-sql" target="_blank" rel="noopener"&gt;REGEXP_LIKE&lt;/A&gt;,&amp;nbsp;&lt;A href="https://learn.microsoft.com/sql/t-sql/functions/regexp-count-transact-sql" target="_blank" rel="noopener"&gt;REGEXP_COUNT&lt;/A&gt;,&amp;nbsp;&lt;A href="https://learn.microsoft.com/sql/t-sql/functions/regexp-instr-transact-sql" target="_blank" rel="noopener"&gt;REGEXP_INSTR&lt;/A&gt;,&amp;nbsp;&lt;A href="https://learn.microsoft.com/sql/t-sql/functions/regexp-replace-transact-sql" target="_blank" rel="noopener"&gt;REGEXP_REPLACE&lt;/A&gt;,&amp;nbsp;&lt;A href="https://learn.microsoft.com/sql/t-sql/functions/regexp-substr-transact-sql" target="_blank" rel="noopener"&gt;REGEXP_SUBSTR&lt;/A&gt;,&amp;nbsp;&lt;A href="https://learn.microsoft.com/sql/t-sql/functions/regexp-matches-transact-sql" target="_blank" rel="noopener"&gt;REGEXP_MATCHES&lt;/A&gt;,&amp;nbsp;&lt;A href="https://learn.microsoft.com/sql/t-sql/functions/regexp-split-to-table-transact-sql" target="_blank" rel="noopener"&gt;REGEXP_SPLIT_TO_TABLE&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/sql/relational-databases/regular-expressions/overview" target="_blank" rel="noopener"&gt;Regular expressions overview&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/troubleshoot/sql/releases/sqlserver-2025/cumulativeupdate5" target="_blank" rel="noopener"&gt;SQL Server 2025 CU5 release notes&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Closing thought.&lt;/STRONG&gt;&amp;nbsp;Native regex was already a significant quality-of-life improvement when it became generally available. CU5 completes the picture: every function, every input size up to 2 MB, every shape — scalar or table-valued. The next time you are tempted to export a column out of the database in order to grep it, try one of the seven regex functions first.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Happy matching. 🧠&lt;/EM&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 22 May 2026 20:28:26 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/regex-support-for-lob-types-in-t-sql-available-in-azure-sql-sql/ba-p/4522396</guid>
      <dc:creator>abhimantiwari</dc:creator>
      <dc:date>2026-05-22T20:28:26Z</dc:date>
    </item>
    <item>
      <title>Automatic Connectivity Tests for Azure SQL Managed Instance</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/automatic-connectivity-tests-for-azure-sql-managed-instance/ba-p/4519795</link>
      <description>&lt;P&gt;To further enhance connectivity monitoring and improve service reliability, we’re introducing automatic internal connectivity tests for all Azure SQL Managed Instances. These tests are fully automated and require no action from you. Beginning May 2026, the tests will be continuously performed at regular intervals on all managed instances. By proactively monitoring internal network connections, we’re able to quickly identify potential issues and maintain stable end-to-end connectivity.&lt;/P&gt;
&lt;P&gt;These tests are performed from a pair of internal IP addresses from the subnet range that hosts the managed instance, so they do not require any external inbound or outbound connectivity. Please note that additional IP addresses will be reserved for these tests and that tests may leave traces in your observability logs.&lt;/P&gt;
&lt;P&gt;Automatic tests diagnose issues in internal service and network availability. This results in accelerated issue discovery and shorter time to mitigate incidents that involve degraded connectivity of managed instances’ internal networking components. This suite of connectivity tests examines internal network connections at several levels, boosting the supportability and visibility into the service’s internal state and offering you peace of mind regarding your managed instances.&lt;/P&gt;
&lt;P&gt;Do note that your audit and security systems, if configured to track certain types of events emitted by SQL Server, may record failed login attempts. Those are normal and expected byproducts of the end-to-end connectivity test suite. If you would prefer to not have those events register in your SQL Server audit logs, SQL error logs, or captured Extended Events, we provide you with their event signatures so you can set up event filters or configure your SIEM system to ignore them: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/connectivity-testing-overview?view=azuresql#observe-failed-logins-caused-by-end-to-end-tests" target="_blank"&gt;Observing failed logins caused by end-to-end tests&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;You can read more about the automated connectivity tests at &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/connectivity-testing-overview?view=azuresql" target="_blank"&gt;Automatic internal connectivity tests for Azure SQL Managed Instance&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Thu, 14 May 2026 15:56:24 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/automatic-connectivity-tests-for-azure-sql-managed-instance/ba-p/4519795</guid>
      <dc:creator>ZoranRilak</dc:creator>
      <dc:date>2026-05-14T15:56:24Z</dc:date>
    </item>
    <item>
      <title>Dynamic Data Masking – What it is, What it isn’t, and How to use it effectively</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/dynamic-data-masking-what-it-is-what-it-isn-t-and-how-to-use-it/ba-p/4512877</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In this post, we’ll explain the core purpose of Dynamic Data Masking (to ease application development), how it works, and its proper use cases – as well as its limitations. If you’re considering using Dynamic Data Masking or reviewing your data security strategy, this information will help you make informed decisions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What Dynamic&amp;nbsp;Data Masking is designed for&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Dynamic Data Masking&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking?view=sql-server-ver17" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Dynamic Data Masking - SQL Server | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt; is a database feature that can be used to alter how certain data elements are presented in query results for users who do not have privileged access or required permission. For example, a query on an email column may return a masked value such as &lt;/SPAN&gt;&lt;A href="mailto:jXXX@XXXX.com" target="_blank"&gt;&lt;SPAN data-contrast="auto"&gt;jXXX@XXXX.com&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;rather than the full address, depending on user permissions, while the original data&amp;nbsp;remains&amp;nbsp;unchanged in storage.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Masking rules are defined within the database schema and are applied to query results for applicable users at runtime. This approach&amp;nbsp;can&amp;nbsp;simplify application developer’s job and&amp;nbsp;reduce the need for application&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;level logic that modifies how sensitive values are displayed across different application(s) or reports. DDM can help prevent accidental or casual exposure of sensitive information.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;How Does DDM differ from other security features?&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Dynamic Data Masking affects only what users see in query results—it does not protect the underlying data. Unlike encryption&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine?view=sql-server-ver17" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Always Encrypted - SQL Server | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;or&amp;nbsp;Row&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;Level security&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/security/row-level-security?view=sql-server-ver17" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Row-Level Security - SQL Server | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;, DDM does not encrypt data, filter rows, or override SQL permissions. Users with elevated privileges (such as UNMASK, db_owner, or sysadmin) always see unmasked data or can modify or remove masking rules.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What DDM&amp;nbsp;doesn’t&amp;nbsp;protect against&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Because Dynamic Data Masking is applied when query results are returned, there are several considerations to be aware of:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:278}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Inference&amp;nbsp;through queries:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt; In some scenarios, users with database access may be able to make inferences about masked values by applying query filters or conditions that rely on underlying stored data. The database is still comparing the real values under the hood, so these queries work. It’s an expected behavior given DDM’s design. &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:278,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Privileged users:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Users who are granted sufficient database permissions, such as the ability to alter table schemas, can directly disable or remove masking. Users with sysadmin, db_owner or CONTROL permission can view unmasked data. Thus, controlling and auditing who holds such privileges is vital.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Metadata&amp;nbsp;visibility:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Masking rules and&amp;nbsp;associated columns&amp;nbsp;can&amp;nbsp;be&amp;nbsp;discoverable&amp;nbsp;through system metadata.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:278,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Data movement:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Because masking is defined at the schema level&amp;nbsp;in a given&amp;nbsp;database instance, backups or exported datasets may&amp;nbsp;contain&amp;nbsp;unmasked values depending on permissions and configuration.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:278,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Understanding these design characteristics is important when incorporating DDM into a broader data governance or privacy&amp;nbsp;strategy.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Proper use and best practices for DDM &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Organizations may consider using Dynamic Data Masking in scenarios where consistent display of sensitive values is needed across application(s)&amp;nbsp;or reporting environments.&amp;nbsp;Some implementation considerations include:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Using DDM to help standardize how sensitive fields are displayed in query results and reduce developmental effort for data masking&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Combining DDM with other database or&amp;nbsp;access&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;control&amp;nbsp;features as part of a layered data protection strategy&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Reviewing which users are granted permissions to view unmask data or alter masking configurations.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Implementing auditing or monitoring database activity as part of broader governance practices&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Educating internal stakeholders on how masking&amp;nbsp;operates&amp;nbsp;at the&amp;nbsp;query&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;result&amp;nbsp;level&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Testing masking configurations in&amp;nbsp;non&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;production&amp;nbsp;environments prior to deployment&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Conclusion&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Dynamic Data Masking can be useful in scenarios where organizations want to manage how sensitive data is displayed in application outputs without&amp;nbsp;modifying&amp;nbsp;stored values. It is designed to&amp;nbsp;operate&amp;nbsp;as part of a broader data access or governance approach rather than as a standalone protection mechanism for stored data. When implemented alongside complementary database features and&amp;nbsp;appropriate access&amp;nbsp;controls, DDM may help support more consistent handling of sensitive values across environments.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:278}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 20 Apr 2026 09:09:39 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/dynamic-data-masking-what-it-is-what-it-isn-t-and-how-to-use-it/ba-p/4512877</guid>
      <dc:creator>MadhumitaTripathyMSFT</dc:creator>
      <dc:date>2026-04-20T09:09:39Z</dc:date>
    </item>
    <item>
      <title>Azure SQL is Retiring the “No Minimum TLS” (MinTLS None) Configuration</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/azure-sql-is-retiring-the-no-minimum-tls-mintls-none/ba-p/4508933</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;As part of &lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/preparing-for-the-deprecation-of-tls-1-0-and-1-1-in-azure-databases/4426512" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;the retirement of&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;lower&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;TLS&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;versions&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;1.0 and 1.1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;the&amp;nbsp;enforcement of 1.2&amp;nbsp;as the&amp;nbsp;new&amp;nbsp;default&amp;nbsp;minimum&amp;nbsp;TLS version,&amp;nbsp;we&amp;nbsp;will be&amp;nbsp;removing&amp;nbsp;the&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; &lt;STRONG&gt;No Minimum TLS (MinTLS = “None” or "0")&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;option&lt;/STRONG&gt;&amp;nbsp;and updating&amp;nbsp;these&amp;nbsp;configurations to TLS 1.2.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;No Minimum TLS &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;allowed Azure SQL Database and Azure SQL Managed Instance resources to accept client connections using any TLS protocol version&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN data-contrast="auto"&gt;and&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN data-contrast="auto"&gt;unencrypted connections.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Over the past year, Azure has retired TLS 1.0 and 1.1 for all Azure databases, due to known security vulnerabilities in these older protocols. As of August 31, 2025,&amp;nbsp;creating servers configured with versions 1.0 and 1.1 was&amp;nbsp;disallowed&amp;nbsp;and&amp;nbsp;migration&amp;nbsp;to 1.2&amp;nbsp;began. With&amp;nbsp;legacy TLS&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;versions being retired&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;TLS 1.2&amp;nbsp;will become the&amp;nbsp;secure default&amp;nbsp;minimum&amp;nbsp;TLS version&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt; for new Azure SQL DB and MI configurations and for all client-server connections, rendering the MinTLS = None setting obsolete. As a result, the MinTLS = None configuration option will be retired for new servers, and existing servers configured with No Minimum TLS will be upgraded to 1.2.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;What is changing?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;After July 31, 2026, we will disallow minimum TLS value "None"&lt;/STRONG&gt;,&amp;nbsp;for the creation of new SQL DB and MI resources using PowerShell, Azure CLI, &lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;and any other REST based interface&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;This configuration&amp;nbsp;option&amp;nbsp;has&amp;nbsp;already&amp;nbsp;been removed&amp;nbsp;from&amp;nbsp;the Portal&lt;/STRONG&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;as part of the retirement of TLS versions 1.0 and 1.1. &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Creating new Azure SQL Database and Managed Instance servers with&lt;STRONG&gt; M&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;inTLS = None &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;(which was previously considered the default)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;will no longer be a supported configuration&lt;/STRONG&gt;.&amp;nbsp;&amp;nbsp;If the server parameter value for the&amp;nbsp;minimum&amp;nbsp;TLS is left&amp;nbsp;blank,&amp;nbsp;it will default to&amp;nbsp;minimum&amp;nbsp;TLS version&amp;nbsp;1.2.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Attempts to create an Azure SQL server with MinTLS = None will fail&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;with an “Invalid operation” error&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;downgrades to None will be disallowed&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;While&lt;STRONG&gt;&amp;nbsp;attempts&amp;nbsp;to connect with&amp;nbsp;TLS 1.0, 1.1 or&amp;nbsp;unencrypted&amp;nbsp;connections will fail&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;with&amp;nbsp;“Error: 47072/171 on Gateway.”&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Effective date (retirement milestone)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;MinTLS = None (0)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;MinTLS&amp;nbsp;left blank&amp;nbsp;(defaults to supported&amp;nbsp;minimum)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Before 8/31/25&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Any + Unencrypted&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Any + Unencrypted&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;After 8/31/25&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;1.2 +&amp;nbsp;Unencrypted&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;1.2&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;After July 31, 2026&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Invalid operation error&amp;nbsp;(for&amp;nbsp;new server&amp;nbsp;creates)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Downgrades will be disallowed&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;TLS error: 47072/171 (for&amp;nbsp;unencrypted&amp;nbsp;connections)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;1.2&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In summary,&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;STRONG&gt;after&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;July 31, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, Azure SQL Database and Azure SQL Managed Instance&amp;nbsp;will require&amp;nbsp;all client connections to use TLS 1.2 or higher&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;unencrypted connections will be denied&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;.&lt;/STRONG&gt; The minimum TLS version setting will no longer accept the value &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;"None" for new or existing servers&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and servers currently configured with this value will&amp;nbsp;be upgraded to&amp;nbsp;explicitly enforce&amp;nbsp;TLS 1.2.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:360,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Who is&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;impacted&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;For most Azure SQL customers,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;there is no action&amp;nbsp;required&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;.&lt;/STRONG&gt; Most clients already use TLS 1.2 or higher. After July 31, 2026, if your Azure SQL Database or Managed Instance is still configured with No Minimum TLS &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;and using 1.0, 1.1 or unencrypted connections&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, it will automatically update to TLS 1.2 to reflect the current minimum protocol enforcement in client-server connectivity.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;We do recommend you&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;verify your client applications&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;– especially any older or third-party client drivers – to ensure they can communicate with TLS 1.2 or above. In&amp;nbsp;some&amp;nbsp;rare cases,&amp;nbsp;very old&amp;nbsp;applications, such&amp;nbsp;as an outdated JDBC driver or older .NET framework version,&amp;nbsp;may need an&amp;nbsp;update or need to enable TLS 1.2.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Conclusion&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This retirement is part of Azure’s broader security strategy to&amp;nbsp;&lt;STRONG&gt;ensure&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;encrypted connections are&amp;nbsp;secure by modern encryption standards&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;. TLS&amp;nbsp;version&amp;nbsp;1.2 is&amp;nbsp;more&amp;nbsp;secure than older versions and is now the industry standard (required by regulations like PCI DSS and HIPAA).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;This change&amp;nbsp;eliminates&amp;nbsp;the use of&amp;nbsp;unencrypted connections&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;which ensure all database connections meet current security standards.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If you’ve already migrated to TLS 1.2 (as most customers have), you will most likely not notice any change, except that the No Minimum TLS option will disappear from configurations.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Apr 2026 18:01:42 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/azure-sql-is-retiring-the-no-minimum-tls-mintls-none/ba-p/4508933</guid>
      <dc:creator>TameikaL</dc:creator>
      <dc:date>2026-04-29T18:01:42Z</dc:date>
    </item>
    <item>
      <title>Zero Trust for data: Make Microsoft Entra authentication for SQL your policy baseline</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/zero-trust-for-data-make-microsoft-entra-authentication-for-sql/ba-p/4506679</link>
      <description>&lt;P&gt;A policy-driven path from enabled to enforced.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why this matters now&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Security and compliance programs were once built on an assumption that internal networks were inherently safer. Cloud adoption, remote work, and supply-chain compromise have steadily invalidated that model. U.S. federal guidance has now formalized this shift: &lt;A href="https://www.govinfo.gov/content/pkg/DCPD-202100401/pdf/DCPD-202100401.pdf" target="_blank" rel="noopener"&gt;Executive Order 14028&lt;/A&gt; calls for modernizing cybersecurity and accelerating Zero Trust adoption, and &lt;A href="https://www.whitehouse.gov/wp-content/uploads/2022/01/M-22-09.pdf" target="_blank" rel="noopener"&gt;OMB Memorandum M-22-09&lt;/A&gt; sets a federal Zero Trust strategy with specific objectives and timelines.&lt;/P&gt;
&lt;P&gt;Meanwhile, attacker economics are changing. Automation and AI make reconnaissance, phishing, and credential abuse cheaper and faster. That concentrates risk on identity—the control plane that sits in front of systems, applications, and data. In Zero Trust, the question is no longer “is the network trusted,” but “is this request verified, governed by policy, and least-privilege?”&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why database authentication is a first‑order Zero Trust control&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Databases are universally treated as crown-jewel infrastructure. Yet many data estates still rely on legacy patterns: password-based SQL authentication, long-lived secrets embedded in apps, and shared administrative accounts that persist because migration feels risky. This is exactly the kind of implicit trust Zero Trust architectures aim to remove.&lt;/P&gt;
&lt;P&gt;NIST SP 800-207 defines Zero Trust as eliminating implicit trust based solely on network location or ownership and focusing controls on protecting resources. In that model, every new database connection is not “plumbing”—it is an access decision to sensitive data. If the authentication mechanism sits outside the enterprise identity plane, governance becomes fragmented and policy enforcement becomes inconsistent.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What changes when SQL uses Microsoft Entra authentication&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Microsoft Entra authentication enables users and applications to connect to SQL using enterprise identities, instead of usernames and passwords. Across &lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-overview" target="_blank" rel="noopener"&gt;Azure SQL&lt;/A&gt; and &lt;A href="https://learn.microsoft.com/en-us/sql/sql-server/azure-arc/microsoft-entra-authentication-with-managed-identity" target="_blank" rel="noopener"&gt;SQL Server enabled by Azure Arc&lt;/A&gt;, Entra-based authentication helps align database access with the same identity controls organizations use elsewhere.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The security and compliance outcomes that leaders care about&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Reduce password and secret risk: move away from static passwords and embedded credentials.&lt;/LI&gt;
&lt;LI&gt;Centralize governance: bring database access under the same identity policies, access reviews, and lifecycle controls used across the enterprise.&lt;/LI&gt;
&lt;LI&gt;Improve auditability: tie access to enterprise identities and create a consistent control surface for reporting.&lt;/LI&gt;
&lt;LI&gt;Enable policy enforcement at scale: move from “configured” controls to “enforced” controls through governance and tooling.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This is why Entra authentication is a high-ROI modernization step: it collapses multiple security and operational objectives into one effort (identity modernization) rather than a set of ongoing compensating programs (password rotation programs, bespoke exceptions, and perpetual secret hygiene projects).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why AI makes this a high priority decision&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;AI accelerates both reconnaissance and credential abuse, which concentrates risk on identity. As a result, policy makers increasingly treat phishing-resistant authentication and centralized identity enforcement as foundational—not optional.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A practical path: from enabled to enforced&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Successful security programs define a clear end state, a measurable glide path, and an enforcement model. A pragmatic approach to modernizing SQL access typically includes:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Discover active usage: Identify which logins and users are actively connecting and which are no longer required.&lt;/LI&gt;
&lt;LI&gt;Establish Entra as the identity authority: Enable Entra authentication on SQL logical servers, starting in mixed mode to reduce disruption.&lt;/LI&gt;
&lt;LI&gt;Recreate principals using Entra identities: Replace SQL Authentication logins/users with Entra users, groups, service principals, and managed identities.&lt;/LI&gt;
&lt;LI&gt;Modernize application connectivity: Update drivers and connection patterns to use Entra-based authentication and managed identities.&lt;/LI&gt;
&lt;LI&gt;Validate, then enforce: Confirm the absence of password‑based SQL authentication traffic, then move to Entra‑only where available and enforce via policy.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;By adopting this sequencing, organizations can mitigate risks at an early stage and postpone enforcement until the validation process concludes. For a comprehensive migration strategy, refer to &lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/securing-azure-sql-database-with-microsoft-entra-password-less-authentication-mi/4470734" target="_blank" rel="noopener"&gt;Securing Azure SQL Database with Microsoft Entra Password-less Authentication: Migration Guide&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Choosing which projects to fund — and which ones to stop&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When making investment decisions, priority is given to database identity projects that can demonstrate clear risk reduction and lasting security benefits.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Microsoft Entra authentication as the default for new SQL workloads, with a defined migration path for the existing workloads.&lt;/LI&gt;
&lt;LI&gt;Managed identities for application-to-database connectivity to eliminate stored secrets.&lt;/LI&gt;
&lt;LI&gt;Centralized governance for privileged database access using enterprise identity controls.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;At the same time, organizations should explicitly de-prioritize investments that perpetuate password risk: password rotation projects that preserve SQL Authentication, bespoke scripts maintaining shared logins, and exception processes that do not scale.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Security and scale are not competing goals&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Security is often seen as something that slows down innovation, but database identity offers unique benefits. When enterprise identity is used for access controls, bringing in new applications and users shifts from handing out credentials to overseeing policies. Compliance reporting also becomes uniform rather than customized, making it easier to grow consistently thanks to a single control framework.&lt;/P&gt;
&lt;P&gt;Modern database authentication is not solely about mitigating risk— it establishes a scalable operational framework for secure data access.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A scorecard designed for leadership readiness&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;To elevate the conversation from implementation to governance, use outcome-based metrics:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Coverage: Percentage of SQL workloads with Entra authentication enabled.&lt;/LI&gt;
&lt;LI&gt;Enforcement: Percentage operating in Entra-only mode after validation.&lt;/LI&gt;
&lt;LI&gt;Secret reduction: Applications still relying on stored database passwords.&lt;/LI&gt;
&lt;LI&gt;Privilege hygiene: Admin access governed through enterprise identity controls.&lt;/LI&gt;
&lt;LI&gt;Audit evidence: Ability to produce identity-backed access reports on demand.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These map directly to Zero Trust maturity expectations and provide a defensible definition of “done.”&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Closing&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Zero Trust is an operating posture, not a single control. For most organizations, the fastest way to make that posture measurable is to standardize database access on the same identity plane used everywhere else.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;If you are looking for a single investment that improves security, reduces audit friction, and supports responsible AI adoption, modernizing SQL access with Microsoft Entra authentication — and driving it from enabled to enforced — is one of the most durable choices you can make.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;References&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A href="https://www.microsoft.com/en-us/security/blog/2022/02/17/us-government-sets-forth-zero-trust-architecture-strategy-and-requirements/" target="_blank" rel="noopener"&gt;US Government sets forth Zero Trust architecture strategy and requirements (Microsoft Security Blog)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/securing-azure-sql-database-with-microsoft-entra-password-less-authentication-mi/4470734" target="_blank" rel="noopener"&gt;Securing Azure SQL Database with Microsoft Entra Password-less Authentication: Migration Guide (Microsoft Tech Community)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.whitehouse.gov/wp-content/uploads/2022/01/M-22-09.pdf" target="_blank" rel="noopener"&gt;OMB Memorandum M-22-09: Federal Zero Trust Strategy (White House)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://csrc.nist.gov/pubs/sp/800/207/final" target="_blank" rel="noopener"&gt;NIST SP 800-207: Zero Trust Architecture&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.cisa.gov/topics/cybersecurity-best-practices/zero-trust" target="_blank" rel="noopener"&gt;CISA: Zero Trust&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/database/authentication-azure-ad-only-authentication-policy-how-to" target="_blank" rel="noopener"&gt;Enforce Microsoft Entra-only authentication for Azure SQL Database and Azure SQL Managed Instance&lt;/A&gt;&lt;/LI&gt;
&lt;/OL&gt;</description>
      <pubDate>Mon, 30 Mar 2026 02:24:12 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/zero-trust-for-data-make-microsoft-entra-authentication-for-sql/ba-p/4506679</guid>
      <dc:creator>PDasgupta</dc:creator>
      <dc:date>2026-03-30T02:24:12Z</dc:date>
    </item>
    <item>
      <title>Stream data in near real time from SQL MI to Azure Event Hubs - Public preview</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/stream-data-in-near-real-time-from-sql-mi-to-azure-event-hubs/ba-p/4504212</link>
      <description>&lt;H2 data-line="2"&gt;How do I modernize an existing application without rewriting it?&lt;/H2&gt;
&lt;P data-line="4"&gt;Many business-critical applications still rely on architectures where the database is the most dependable integration point. These applications may have been built years ago, long before event-driven patterns became mainstream. Even after moving such workloads to Azure, teams are often left with the same question: how do we get data changes out of the database quickly, reliably, and without adding more custom plumbing?&lt;/P&gt;
&lt;P data-line="6"&gt;This is where&amp;nbsp;&lt;STRONG&gt;Change Event Streaming (CES)&lt;/STRONG&gt;&amp;nbsp;comes in.&lt;/P&gt;
&lt;P data-line="8"&gt;We are happy to announce that&amp;nbsp;&lt;STRONG&gt;Change Event Streaming for Azure SQL Managed Instance&lt;/STRONG&gt;&amp;nbsp;is now in&amp;nbsp;&lt;STRONG&gt;Public Preview&lt;/STRONG&gt;. CES enables you to stream row-level changes -&amp;nbsp;&lt;STRONG&gt;inserts, updates, and deletes&lt;/STRONG&gt;&amp;nbsp;- from your database directly to&amp;nbsp;&lt;STRONG&gt;Azure Event Hubs&lt;/STRONG&gt;&amp;nbsp;in near real time.&lt;/P&gt;
&lt;P data-line="10"&gt;For workloads running on Azure SQL Managed Instance, this matters especially because many of them are existing line-of-business applications, modernized from on-premises SQL Server environments into Azure. Those applications are often still central to the business, but they were not originally designed to publish events to downstream systems. CES helps bridge that gap without requiring you to redesign the application itself.&lt;/P&gt;
&lt;H3 data-line="12"&gt;What is Change Event Streaming?&lt;/H3&gt;
&lt;P data-line="14"&gt;Change Event Streaming is a capability that captures committed row changes from your database and publishes them to&amp;nbsp;&lt;STRONG&gt;Azure Event Hubs&lt;/STRONG&gt;&amp;nbsp;or&amp;nbsp;&lt;STRONG&gt;Fabric Eventstreams&lt;/STRONG&gt;. Instead of relying on periodic polling, custom ETL jobs, or additional connectors, CES lets SQL push changes out as they happen.&lt;/P&gt;
&lt;P data-line="16"&gt;This opens the door to near-real-time integrations while keeping the architecture simpler and closer to the source of truth.&lt;/P&gt;
&lt;img&gt;A diagram conceptually visualizing data flow from SQL, with an arrow towards Azure Event Hubs, from where a number of arrows point to different final destinations.&lt;/img&gt;
&lt;H3 data-line="18"&gt;Why CES matters for Azure SQL Managed Instance&lt;/H3&gt;
&lt;H4 data-line="20"&gt;Incremental modernization for existing applications&lt;/H4&gt;
&lt;P data-line="22"&gt;Azure SQL Managed Instance is a database of choice where application compatibility matters and where teams want to modernize from on-premises SQL Server into Azure with minimal disruption. In these environments, the database often becomes the most practical place to tap into business events - especially when the application itself was not designed to emit events or integrate in real-time.&lt;/P&gt;
&lt;P data-line="24"&gt;With CES, you do not need to retrofit an older application to emit events itself. You can publish changes at the data layer and let downstream services react from there. This makes CES a practical tool for modernization programs that need to move step by step rather than through a full rewrite.&lt;/P&gt;
&lt;H4 data-line="26"&gt;Lower operational complexity&lt;/H4&gt;
&lt;P data-line="28"&gt;&lt;STRONG&gt;Before CES&lt;/STRONG&gt;: teams typically had to assemble integration flows out of polling processes, ETL pipelines, custom code, or third-party connectors. Those approaches can work, but they usually bring more moving parts, more credentials to manage, more monitoring overhead, and more latency tuning.&lt;/P&gt;
&lt;P data-line="30"&gt;&lt;STRONG&gt;With CES&lt;/STRONG&gt;: SQL Managed Instance streams changes directly to the configured destination. This reduces architectural sprawl and helps teams focus on consuming the events instead of maintaining the mechanics of moving them.&lt;/P&gt;
&lt;H5 data-line="32"&gt;Better decoupling across the estate&lt;/H5&gt;
&lt;P data-line="34"&gt;Once changes are published to Azure Event Hubs or Fabric Eventstreams, multiple downstream systems can consume them independently. That is useful when one operational workload needs to feed analytics platforms, integration services, caches, search indexes, or new application components at the same time.&lt;/P&gt;
&lt;P data-line="36"&gt;Instead of teaching an existing application to integrate with every destination directly, you can stream once from the database and let the message bus handle fan-out.&lt;/P&gt;
&lt;H3 data-line="38"&gt;Typical scenarios&lt;/H3&gt;
&lt;H4 data-line="40"&gt;Breaking down monoliths&lt;/H4&gt;
&lt;P data-line="42"&gt;Many modernization efforts start with a large existing application and a database that serves many business functions. CES can help you carve out one capability at a time. A new component (microservice) can subscribe to events from selected tables, build its own behavior around those changes, and be validated incrementally before broader cutover decisions are made.&lt;/P&gt;
&lt;H4 data-line="44"&gt;Real-time integration for line-of-business systems&lt;/H4&gt;
&lt;P data-line="46"&gt;If an operational system running on SQL Managed Instance needs to notify other platforms when data changes, CES provides a direct path to doing that. This can help with partner integrations, internal workflows, or downstream business processes that should react quickly when transactions are committed.&lt;/P&gt;
&lt;H4 data-line="48"&gt;Real-time analytics&lt;/H4&gt;
&lt;P data-line="50"&gt;Operational data often becomes more valuable when it can be analyzed quickly. CES can stream data changes into Fabric Eventstreams or Azure Event Hubs, from where they can be consumed by analytics and stream processing processes for timely insights or actions.&lt;/P&gt;
&lt;H4 data-line="52"&gt;Cache and index refresh&lt;/H4&gt;
&lt;P data-line="54"&gt;Applications often depend on caches or search indexes that need to stay aligned with transactional data. CES can provide a cleaner alternative to custom synchronization logic by publishing changes as they occur.&lt;/P&gt;
&lt;H3 data-line="56"&gt;How it works&lt;/H3&gt;
&lt;P data-line="58"&gt;CES uses&amp;nbsp;&lt;STRONG&gt;transaction log-based capture&lt;/STRONG&gt;&amp;nbsp;to stream changes with minimal impact on the publishing workload. Events are emitted in a structured JSON format that follows the&amp;nbsp;&lt;A href="https://github.com/cloudevents/spec" target="_blank" rel="noopener" data-href="https://github.com/cloudevents/spec"&gt;CloudEvents&lt;/A&gt;&amp;nbsp;standard and includes details such as the operation type, primary key, and before/after values.&lt;/P&gt;
&lt;P data-line="60"&gt;Azure SQL Managed Instance can publish these events to&amp;nbsp;&lt;STRONG&gt;Azure Event Hubs&lt;/STRONG&gt;&amp;nbsp;or&amp;nbsp;&lt;STRONG&gt;Fabric Eventstreams&lt;/STRONG&gt;&amp;nbsp;using&amp;nbsp;&lt;STRONG&gt;AMQP&lt;/STRONG&gt;&amp;nbsp;or&amp;nbsp;&lt;STRONG&gt;Kafka&lt;/STRONG&gt;&amp;nbsp;protocols, depending on how you connect your downstream consumers.&lt;/P&gt;
&lt;H3 data-line="62"&gt;Conclusion&lt;/H3&gt;
&lt;P data-line="64"&gt;Change Event Streaming for Azure SQL Managed Instance is an important step for customers who want to make existing applications more connected, simplified into smaller pieces or easier to integrate with modern data and application platforms.&lt;/P&gt;
&lt;P data-line="66"&gt;For teams modernizing long-lived SQL Server workloads in Azure, CES offers a practical path: keep the application stable, tap into the data layer, and start enabling near-real-time scenarios without building another custom integration stack.&lt;/P&gt;
&lt;P data-line="68"&gt;As CES enters Public Preview for Azure SQL Managed Instance, we encourage you to explore where it can simplify your architecture and accelerate modernization efforts.&lt;/P&gt;
&lt;H3 data-line="70"&gt;Availability notes&lt;/H3&gt;
&lt;P data-line="72"&gt;Besides SQL Server 2025 and Azure SQL Database, where CES is already in Public preview, CES is available as of today in&amp;nbsp;&lt;STRONG&gt;Public Preview&lt;/STRONG&gt;&amp;nbsp;for&amp;nbsp;&lt;STRONG&gt;Azure SQL Managed Instance&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P data-line="72"&gt;Just make sure that your SQL MI&amp;nbsp;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/azuresqlblog/ga-of-update-policy-sql-server-2025-for-azure-sql-managed-instance/4498802" data-lia-auto-title="update policy" data-lia-auto-title-active="0" target="_blank"&gt;update policy&lt;/A&gt; is set to "Always up to date" or "SQL Server 2025".&lt;/P&gt;
&lt;P data-line="74"&gt;This preview brings the same core CES capability to SQL Managed Instance workloads, helping customers apply event-driven patterns to existing operational systems without adding another custom integration layer.&lt;/P&gt;
&lt;P data-line="76"&gt;For feature details, configuration guidance, and frequently asked questions, see:&lt;/P&gt;
&lt;UL data-line="78"&gt;
&lt;LI data-line="78"&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/change-event-streaming/overview?view=sql-server-ver17&amp;amp;ref=ignite-blog" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/change-event-streaming/overview?view=sql-server-ver17&amp;amp;ref=ignite-blog"&gt;Feature Overview&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="79"&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/change-event-streaming/frequently-asked-questions-faq?view=sql-server-ver17&amp;amp;ref=ignite-blog" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/change-event-streaming/frequently-asked-questions-faq?view=sql-server-ver17&amp;amp;ref=ignite-blog"&gt;CES: Frequently Asked Questions&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="81"&gt;We welcome your feedback through Azure Feedback channels or support channels. The CES team can also be reached via email: sqlcesfeedback [at] microsoft [dot] com.&lt;/P&gt;
&lt;H3 data-line="83"&gt;Useful resources&lt;/H3&gt;
&lt;UL data-line="85"&gt;
&lt;LI data-line="85"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-sql/managed-instance/free-offer?view=azuresql" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-sql/managed-instance/free-offer?view=azuresql"&gt;Try Azure SQL Managed Instance for free for one year&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="86"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-sql/managed-instance/doc-changes-updates-release-notes-whats-new?view=azuresql" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-sql/managed-instance/doc-changes-updates-release-notes-whats-new?view=azuresql"&gt;What's new in Azure SQL Managed Instance?&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Fri, 20 Mar 2026 20:34:02 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/stream-data-in-near-real-time-from-sql-mi-to-azure-event-hubs/ba-p/4504212</guid>
      <dc:creator>NikolaZagorac</dc:creator>
      <dc:date>2026-03-20T20:34:02Z</dc:date>
    </item>
    <item>
      <title>Database DevOps (preview) in SSMS 22.4.1</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/database-devops-preview-in-ssms-22-4-1/ba-p/4503858</link>
      <description>&lt;P&gt;Database DevOps tooling for Microsoft SQL brings the benefits of database-as-code to your development workflow. At its core are SQL database projects, which enable you to source control your database schema, perform reliable deployments to any environment, and integrate code quality checks into your development process. Whether you're managing a single database or orchestrating complex deployments across multiple environments, SQL projects in SQL Server Management Studio (SSMS) provide the foundation for modern database DevOps practices.&lt;/P&gt;
&lt;H2&gt;Introducing SQL projects in SSMS&lt;/H2&gt;
&lt;P&gt;With the 22.4 release of SQL Server Management Studio (SSMS), we are excited to launch the public preview of SQL projects with the new "Database DevOps" workload in SSMS. This marks a significant milestone in our journey to bring the power of SQL projects to database professionals in different roles and with different preferences for development environments. The initial public preview brings the core create, build, and publish workflow to SSMS with the backing of Microsoft.Build.Sql projects, which are also supported in VS Code. This means that you can create a SQL project in SSMS, check it into source control, and then work with it in VS Code or vice versa, enabling a seamless experience across different tools and teams.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;This is just the beginning of our plans for SQL projects in SSMS, and we are committed to expanding the capabilities and integrations in future releases based on your feedback and needs. Additional functionality in upcoming releases includes creating and updating projects from databases directly as well as the graphical schema compare interface. If you're looking to bring an existing database into source control and start with SQL projects in SSMS today, you have two options for quickly accessing your database definition. The mssql extension in VS Code provides a menu item in object explorer for "Create project from database" and the SqlPackage CLI has a command to generate the .sql files that can be copied directly into the SQL project directory:&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;&lt;LI-CODE lang="bash"&gt;dotnet tool install -g microsoft.sqlpackage sqlpackage /action:extract /sourceconnectionstring:"&amp;lt;connection string&amp;gt;" /targetfile:"databasefiles" /p:extracttarget=schemaobjecttype&lt;/LI-CODE&gt;&lt;/LI-CODE&gt;
&lt;H2&gt;What about Visual Studio SQL Server Data Tools (SSDT)?&lt;/H2&gt;
&lt;P&gt;SQL projects in SSMS are based on Microsoft.Build.Sql projects and requires a minimum SDK version of 2.1.0. While a preview of SSDT for Microsoft.Build.Sql projects is available for Visual Studio 2022, only the original SQL projects are supported in SSDT for Visual Studio 2026. The SQL projects tooling ecosystem includes multiple development environments, CI/CD integrations, and even customization through the DacFx .NET library. Our goal is that this ecosystem enables you and your teams to manage SQL database schemas and deployments in a more automated and reliable way, and this requires that tools used by your teams surface SQL projects such that they can be integrated into your existing workflows.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;I understand that initial messaging about Microsoft.Build.Sql projects for Visual Studio and changes when that work was delayed has led to some confusion, so we’re operating with as much transparency as we can with the SQL projects roadmap at&amp;nbsp;&lt;A href="https://aka.ms/sqlprojects-roadmap" target="_blank"&gt;aka.ms/sqlprojects-roadmap&lt;/A&gt;. You'll note at this time that Microsoft.Build.Sql support in Visual Studio 2026 is not yet on the roadmap. Please continue to voice your feedback on the &lt;A href="https://developercommunity.visualstudio.com/t/VisualStudio2026InsiderstillusingoldSQL-StyleProjects/10965461" target="_blank"&gt;Developer Community&lt;/A&gt;, which is extremely valuable as we are actively reviewing the integration.&lt;/P&gt;
&lt;H2&gt;Get to know SQL projects&lt;/H2&gt;
&lt;P&gt;SQL projects represent a fundamental file format for database development and automation, enabling both a declarative approach to defining and deploying database schemas as well as supporting migration-based deployment methods with consolidated change visibility and code quality checks. By adopting SQL projects, teams can achieve greater consistency, collaboration, and efficiency in their database development processes, ultimately leading to more reliable and maintainable database systems. The integration of SQL projects with modern development tools and platforms further enhances their value, making it easier for teams to implement DevOps practices and automate their database workflows.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Documentation is available at &lt;A href="https://aka.ms/sqlprojects-docs" target="_blank"&gt;aka.ms/sqlprojects-docs&lt;/A&gt;, and our public roadmap at &lt;A href="https://aka.ms/sqlprojects-roadmap" target="_blank"&gt;aka.ms/sqlprojects-roadmap&lt;/A&gt; shows what's coming next. We'd love to hear your feedback — your input directly shapes our priorities and helps us build the database DevOps experience that works best for your teams. Get started with the public preview of SQL projects in SSMS today by &lt;A href="https://learn.microsoft.com/ssms/install/install" target="_blank"&gt;downloading&lt;/A&gt; SSMS 22 or updating your current SSMS to 22.4 and &lt;A href="https://learn.microsoft.com/ssms/install/modify" target="_blank"&gt;modifying&lt;/A&gt; the SSMS install to include the Database DevOps workload.&lt;/P&gt;</description>
      <pubDate>Thu, 19 Mar 2026 15:31:46 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/database-devops-preview-in-ssms-22-4-1/ba-p/4503858</guid>
      <dc:creator>DrewSkwiersKoballa</dc:creator>
      <dc:date>2026-03-19T15:31:46Z</dc:date>
    </item>
    <item>
      <title>Announcing Preview of 160 and 192vCore Premium-series Options for Azure SQL Database Hyperscale</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/announcing-preview-of-160-and-192vcore-premium-series-options/ba-p/4501367</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We are excited to announce the public preview of 160 and 192vCore compute sizes for Premium-series hardware configuration in Azure SQL Database Hyperscale.&amp;nbsp; Since the introduction of Premium-series hardware configurations for Hyperscale in November 2022, many customers have successfully used larger vCore configurations to consolidate workloads, reduce shard counts, and improve overall application performance and stability. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;This preview builds on the Premium-series configuration introduced previously for Hyperscale, extending the maximum scale of a single database and elastic pools from 128vCores to 192vCores to support higher concurrency, faster CPU performance, and larger memory footprints, for more demanding mission critical workloads. With this preview, customers running largescale OLTP, HTAP, and analytics-heavy workloads can evaluate even higher compute ceilings without rearchitecting their applications.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Premium-Series Hyperscale Hardware Overview&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Premium-series Hyperscale databases &lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/database/service-tier-hyperscale?view=azuresql#compute-resources" target="_blank" rel="noopener"&gt;run on latest-generation Intel and AMD processors&lt;/A&gt;&amp;nbsp;, delivering higher per core performance and improved scalability compared to standard-series (Gen5) hardware.&amp;nbsp; With this public preview release, Premium-series Hyperscale now supports larger vCore configurations, extending the scaleup limits for customers who need more compute and memory in a single database.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Getting started&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Customers can enable the 160 or 192vCore Premium-series options when creating a database, or when scaling up existing Hyperscale databases in supported regions (where preview capacity is available).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;As with other Hyperscale scale operations, moving to a larger vCore size does not require application changes and uses Hyperscale’s distributed storage and compute architecture.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Resource Limits &amp;amp; Key characteristics&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/database/resource-limits-vcore-single-databases?view=azuresql#hyperscale-premium-series-part-3-of-3" target="_blank" rel="noopener"&gt;Link to Azure SQL documentation on resource limits&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Single Database Resource Limits&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Cores&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Memory (GB)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Tempdb max data size (GB)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max Local SSD IOPS&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max Log Rate (MiB/s)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max concurrent workers&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max concurrent external connections per pool&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max concurrent sessions&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;128&lt;/P&gt;
&lt;P&gt;(Current Limit)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;625&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;4,096&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;544,000&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;150&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;12,800&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;150&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;30,000&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;160&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;(New preview limit)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;830&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;4,096&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;680,000&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;150&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;16,000&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;150&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;30,000&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;192&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;(New preview limit)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;843*&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;4,096&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;816,000&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;150&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;19,200&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;150&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;30,000&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;*Memory values will increase for 192 vCores at GA.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Elastic Pool Resource Limits&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Cores&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Memory (GB)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Tempdb max data size (GB)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max Local SSD IOPS&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max Log Rate (MiB/s)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max concurrent workers per pool&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max concurrent external connections per pool&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Max concurrent sessions&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;128&lt;/P&gt;
&lt;P&gt;(Current Limit)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;625&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;4,096&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;409,600&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;150&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;13,440&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;150&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;30,000&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;160&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;(New preview limit)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;830&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;4,096&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;800,000&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;150&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;16,800&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;150&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;30,000&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;192&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;(New preview limit)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;843*&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;4,096&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;960,000&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;150&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;20,160&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;150&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;30,000&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;*Memory values will increase for 192 vCores at GA.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Premium-series Hyperscale can now scale up to 160 vCores &amp;amp; 192 vCores in public preview regions. &amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;High performance CPUs optimized for compute-intensive workloads.&lt;/LI&gt;
&lt;LI&gt;Increased memory capacity proportional to vCore scale&lt;/LI&gt;
&lt;LI&gt;Up to 128 TiB of data storage, consistent with Hyperscale architecture&lt;/LI&gt;
&lt;LI&gt;Full compatibility with existing Hyperscale features and capabilities&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;Performance Improvements with 160 and 192 vcores&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Strong scale-up efficiency observed beyond 128 vCores: Moving from 128 → 160 → 192 vCores shows consistent performance gains, demonstrating that Hyperscale Premium-series continues to scale effectively at higher core counts.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="width: 99.7222%; height: 690.021px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 690.021px;"&gt;&lt;td style="height: 690.021px;"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 690.021px;"&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;H6&gt;160 vCores delivers a strong balance of single-query and concurrent performance.&lt;/H6&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;H6&gt;192 vCores is ideal for customers prioritizing maximum throughput, high user concurrency, and large-scale transactional or analytical workloads&lt;/H6&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;H6&gt;&lt;A href="https://www.tpc.org/tpch/" target="_blank" rel="noopener"&gt;TPC-H Power Run&lt;/A&gt; (measures single-stream query performance) improves from 217 (128 vCores) to 357 (160 vCores) and remains high at 355 (192 vCores), delivering a +64% increase from 128 → 192 vCores, indicating strong single-query execution and CPU efficiency at larger sizes.&lt;/H6&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;H6&gt;&lt;A href="https://www.hammerdb.com/docs3.3/ch10s02.html" target="_blank" rel="noopener"&gt;TPC-H Throughput Run&lt;/A&gt; (measures multi-stream concurrency) increases from 191 → 360 → 511 QPH, resulting in a +168% gain from 128 → 192 vCores, highlighting significant benefits for highly concurrent, multi-user workloads.&lt;/H6&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 52.1151%" /&gt;&lt;col style="width: 47.844%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Performance case study&lt;/STRONG&gt; (Zava Lending example)&lt;/H5&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="width: 99.6296%; height: 484.87px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 484.87px;"&gt;&lt;td style="height: 484.87px;"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;FIGURE style="margin: 0; padding: 0;"&gt;
&lt;DIV style="position: relative; width: 100%; height: 0; padding-bottom: 56.25%; overflow: hidden; border: 0;"&gt;&lt;IFRAME src="https://medius.microsoft.com/Embed/video-nc/1a4a6c0a-e0fe-401e-a7c4-4eb187c42dd1" title="Scene 9 - Zava Scaling Online" allowfullscreen="allowfullscreen" allow="fullscreen; picture-in-picture" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0;" sandbox="allow-scripts allow-same-origin allow-forms"&gt;
    &lt;/IFRAME&gt;&lt;/DIV&gt;
&lt;FIGCAPTION id="video-caption" style="font-size: 14px; line-height: 1.5; color: #1f1f1f; text-align: left; margin-top: 8px;"&gt;If the player doesn’t load, open the video in a new window: &lt;A style="color: #0a5bd9; text-decoration: underline;" title="Open the video in a new window" href="https://medius.microsoft.com/Embed/video-nc/1a4a6c0a-e0fe-401e-a7c4-4eb187c42dd1" target="_blank" rel="noopener noreferrer"&gt;Open video&lt;/A&gt;&lt;/FIGCAPTION&gt;
&lt;/FIGURE&gt;
&lt;/td&gt;&lt;td style="height: 484.87px;"&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;H6&gt;Zava Lending scaled Azure SQL Hyperscale online as demand increased—supporting more users and higher transaction volume with no downtime.&lt;/H6&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;H6&gt;Throughput scaled linearly as compute increased, moving cleanly from 32 → 64 → 128 → 192 vCores to match real workload growth.&lt;/H6&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;H6&gt;192 vCores proved to be the optimal operating point, sustaining peak transaction load without over‑provisioning.&lt;/H6&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;H6&gt;Azure SQL Hyperscale handled mixed OLTP and analytics workloads, including nightly ETL, without becoming a bottleneck.&lt;/H6&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;H6&gt;Every scale operation was performed online, with no service interruption and no application changes.&lt;/H6&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 52.3493%" /&gt;&lt;col style="width: 47.6095%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;H5&gt;&lt;STRONG&gt;Preview scope and limitations&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;During preview, Premium-series 160 and 192 vCores are supported in a limited set of initial regions (Australia East, Canada Central, East US 2, South Central US, UK South, West Europe, North Europe, Southeast Asia, West US 2), with broader availability planned over time.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;During preview:&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL&gt;
&lt;LI&gt;Zone redundancy and Azure SQL Database maintenance window are not supported for these sizes&lt;/LI&gt;
&lt;LI&gt;Preview features are subject to supplemental preview terms, and performance characteristics may continue to improve through GA&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Customers are encouraged to use this preview to validate scalability, concurrency, memory utilization, query parallelism, and readiness for larger single database deployments.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Next Steps&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;This public preview is part of our broader investment in scaling Azure SQL Hyperscale for the most demanding workloads. Feedback from preview will help inform GA configuration limits, regional rollout priorities, and performance optimizations at extreme scale.&lt;/P&gt;</description>
      <pubDate>Wed, 18 Mar 2026 18:53:27 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/announcing-preview-of-160-and-192vcore-premium-series-options/ba-p/4501367</guid>
      <dc:creator>scott_kim</dc:creator>
      <dc:date>2026-03-18T18:53:27Z</dc:date>
    </item>
    <item>
      <title>Versionless keys for Transparent Data Encryption in Azure SQL Database (Generally Available)</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/versionless-keys-for-transparent-data-encryption-in-azure-sql/ba-p/4502969</link>
      <description>&lt;P&gt;With this release, &lt;STRONG&gt;you no longer need to reference a specific key version&lt;/STRONG&gt; stored in Azure Key Vault or Managed HSM when configuring Transparent Data Encryption (TDE) with customer‑managed keys. Instead, Azure SQL Database now supports a &lt;STRONG&gt;versionless key URI&lt;/STRONG&gt;, automatically using the latest enabled version of your key. This means:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Simpler key management&lt;/STRONG&gt;—no longer necessary to specify the key version.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Reduced operational overhead&lt;/STRONG&gt; by eliminating risks tied to outdated key versions.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Full control&lt;/STRONG&gt; remains with the customer.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This enhancement streamlines encryption at rest, especially for organizations operating at scale or enforcing strict security and compliance standards.&lt;/P&gt;
&lt;P&gt;Versionless keys for TDE are available &lt;STRONG&gt;today&lt;/STRONG&gt; across Azure SQL Database with no additional cost.&lt;/P&gt;
&lt;H2&gt;Versioned vs. Versionless Key URIs&lt;/H2&gt;
&lt;P&gt;To highlight the difference, here are real examples:&lt;/P&gt;
&lt;H5&gt;Versioned Key URI (old approach — explicit version required)&lt;/H5&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;https://demotdeakv.vault.azure.net/keys/TDECMK/&lt;SPAN class="lia-text-color-11"&gt;40acafb8a7034b20ba227905df090a1f&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H5&gt;Versionless Key URI (new approach)&lt;/H5&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;https://demotdeakv.vault.azure.net/keys/TDECMK&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;A versionless key URI references only the key &lt;EM&gt;name&lt;/EM&gt;. Azure SQL Database automatically uses the newest enabled version of the key.&lt;/P&gt;
&lt;H2&gt;Learn more&lt;/H2&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-sql/database/transparent-data-encryption-tde-overview?view=azuresql&amp;amp;tabs=azure-portal" target="_blank" rel="noopener"&gt;Transparent Data Encryption - Azure SQL Database&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-sql/database/transparent-data-encryption-byok-overview?view=azuresql&amp;amp;tabs=azurekeyvault%2Cazurekeyvaultrequirements%2Cazurekeyvaultrecommendations" target="_blank" rel="noopener"&gt;Azure SQL transparent data encryption with customer-managed key&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-sql/database/transparent-data-encryption-byok-database-level-overview?view=azuresql&amp;amp;tabs=azurekeyvault" target="_blank" rel="noopener"&gt;Transparent data encryption with customer-managed keys at the database level&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 18 Mar 2026 13:23:11 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/versionless-keys-for-transparent-data-encryption-in-azure-sql/ba-p/4502969</guid>
      <dc:creator>PieterVanhove</dc:creator>
      <dc:date>2026-03-18T13:23:11Z</dc:date>
    </item>
    <item>
      <title>Stop defragmenting and start living: introducing auto index compaction</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/stop-defragmenting-and-start-living-introducing-auto-index/ba-p/4500089</link>
      <description>&lt;H2&gt;Executive summary&lt;/H2&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/sql/relational-databases/indexes/automatic-index-compaction" target="_blank"&gt;Automatic index compaction&lt;/A&gt; is a new built-in feature in the MSSQL database engine that compacts indexes in background and with minimal overhead.&lt;/P&gt;
&lt;P&gt;Now you can:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Stop using scheduled index maintenance jobs.&lt;/LI&gt;
&lt;LI&gt;Reduce storage space consumption and save costs.&lt;/LI&gt;
&lt;LI&gt;Improve performance by reducing CPU, memory, and disk I/O consumption.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Today, we announce a &lt;STRONG&gt;public preview&lt;/STRONG&gt; of automatic index compaction in Azure SQL Database, Azure SQL Managed Instance with the always-up-to-date &lt;A href="https://learn.microsoft.com/azure/azure-sql/managed-instance/update-policy" target="_blank"&gt;update policy&lt;/A&gt;, and SQL database in Fabric.&lt;/P&gt;
&lt;H2&gt;Index maintenance without maintenance jobs&lt;/H2&gt;
&lt;P&gt;Enable automatic index compaction for a database with a single T-SQL command:&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;ALTER DATABASE [database-name] SET AUTOMATIC_INDEX_COMPACTION = ON;&lt;/LI-CODE&gt;
&lt;P&gt;Once enabled, you no longer need to set up, maintain, and monitor resource intensive index maintenance jobs, a time-consuming operational task for many DBA teams today.&lt;/P&gt;
&lt;P&gt;As the data in the database changes, a background process consolidates rows from partially filled data pages into a smaller number of filled up pages, and then removes the empty pages. Index bloat is eliminated – the same amount of data now uses a minimal amount of storage space.&lt;/P&gt;
&lt;img&gt;A conceptual view of the index compaction process&lt;/img&gt;
&lt;P&gt;Resource consumption is reduced because the database engine needs fewer disk IOs and less CPU and memory to process the same amount of data.&lt;/P&gt;
&lt;P&gt;By design, the background compaction process acts on the recently modified pages only. This means that its own resource consumption is much lower compared to the traditional index maintenance operations (index rebuild and reorganize), which process all pages in an index or its partition.&lt;/P&gt;
&lt;P&gt;For a detailed description of how the feature works, a comparison between automatic index compaction and the traditional index maintenance operations, and the ways to monitor the compaction process, see &lt;A href="https://learn.microsoft.com/sql/relational-databases/indexes/automatic-index-compaction" target="_blank"&gt;automatic index compaction&lt;/A&gt; in documentation.&lt;/P&gt;
&lt;H2&gt;Compaction in action&lt;/H2&gt;
&lt;P&gt;To see the effects of automatic index compaction, we wrote a stored procedure that simulates a write-intensive OLTP workload. Each execution of the procedure inserts, updates, deletes, or selects a random number of rows, from 1 to 100, in a 50,000-row table with a clustered index.&lt;/P&gt;
&lt;P&gt;We executed this stored procedure using a popular &lt;A href="https://github.com/ErikEJ/SqlQueryStress" target="_blank"&gt;SQLQueryStress&lt;/A&gt; tool, with 30 threads and 400 iterations on each thread.&lt;/P&gt;
&lt;img&gt;The SQLQueryStress tool running an OLTP-like workload&lt;/img&gt;
&lt;P&gt;We measured the page density, the number pages in the leaf level of the table’s clustered index, and the number of logical reads (pages) used by a test query reading 1,000 rows, at three points in time:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;After initially inserting the data and before running the workload.&lt;/LI&gt;
&lt;LI&gt;Once the workload stopped running.&lt;/LI&gt;
&lt;LI&gt;Several minutes later, once the background process completed index compaction.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Here are the results:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN lia-align-right"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Before workload&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;After workload&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;After compaction&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Logical reads&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;25 🟢&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;1,610 🔴⬆️&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;35 🟢⬇️&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Page density&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;99.51% 🟢&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;52.71% 🔴⬇️&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;96.11% 🟢⬆️&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Pages&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;962 🟢&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;4,394 🔴⬆️&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;1,065 🟢⬇️&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;Before the workload starts, page density is high because nearly all pages are full. The number of logical reads required by the test query is minimal, and so is its resource consumption.&lt;/P&gt;
&lt;P&gt;The workload leaves a lot of empty space on pages and increases the number of pages because of row updates and deletions, and because of page splits. As a result, immediately after workload completion, the number of logical reads required for the same test query increases more than 60 times, which translates into a higher CPU and memory usage.&lt;/P&gt;
&lt;P&gt;But then within a few minutes, automatic index compaction removes the empty space from the index, increasing page density back to nearly 100%, &lt;STRONG&gt;reducing logical reads by about 98%&lt;/STRONG&gt; and getting the index very close to its initial compact state. Less logical reads means that the query is faster and uses less CPU. &lt;STRONG&gt;All of this without any user action.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;With continuous workloads, index compaction is continuous as well, maintaining higher average page density and reducing resource usage by the workload over time.&lt;/P&gt;
&lt;P&gt;The T-SQL code we used in this demo is available in the &lt;A class="lia-internal-link" href="#community--1-appendix" data-lia-auto-title="Appendix" data-lia-auto-title-active="0" target="_blank"&gt;Appendix&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Conclusion&lt;/H2&gt;
&lt;P&gt;Automatic index compaction delegates a routine database maintenance operation to the database engine itself, letting administrators and engineers focus on more important work without worrying about index maintenance.&lt;/P&gt;
&lt;P&gt;The public preview is a great opportunity to let us know how this new feature works for you. Please share your feedback and suggestions for any improvements we can make.&lt;/P&gt;
&lt;P&gt;To let us know your thoughts, you can comment on this blog post, leave feedback at &lt;A href="https://aka.ms/sqlfeedback" target="_blank"&gt;https://aka.ms/sqlfeedback&lt;/A&gt;, or email us at sqlaicpreview@microsoft.com.&lt;/P&gt;
&lt;H2 class="lia-linked-item"&gt;&lt;a id="community--1-appendix" class="lia-anchor"&gt;&lt;/a&gt;Appendix&lt;/H2&gt;
&lt;P&gt;Here is the T-SQL code we used to demonstrate automatic index compaction.&lt;/P&gt;
&lt;P&gt;The type of executed statements and the number of affected rows is randomized to better represent an OLTP workload. While the results demonstrate the effectiveness of automatic index compaction, exact measurements may vary from one execution to the next.&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;/* Enable automatic index compaction */
ALTER DATABASE CURRENT SET AUTOMATIC_INDEX_COMPACTION = ON;

/* Reset to the initial state */
DROP TABLE IF EXISTS dbo.t;
DROP SEQUENCE IF EXISTS dbo.s_id;
DROP PROCEDURE IF EXISTS dbo.churn;

/* Create a sequence to generate clustered index keys */
CREATE SEQUENCE dbo.s_id 
AS int
START WITH 1 INCREMENT BY 1;

/* Create a test table */
CREATE TABLE dbo.t
(
id int NOT NULL CONSTRAINT df_t_id DEFAULT (NEXT VALUE FOR dbo.s_id),
dt datetime2 NOT NULL CONSTRAINT df_t_dt DEFAULT (SYSDATETIME()),
u uniqueidentifier NOT NULL CONSTRAINT df_t_uid DEFAULT (NEWID()),
s nvarchar(100) NOT NULL CONSTRAINT df_t_s DEFAULT (REPLICATE('c', 1 + 100 * RAND())),
CONSTRAINT pk_t PRIMARY KEY (id)
);

/* Insert 50,000 rows */
INSERT INTO dbo.t (s)
SELECT REPLICATE('c', 50) AS s
FROM GENERATE_SERIES(1, 50000);
GO

/*
Create a stored procedure that simulates 
a write-intensive OLTP workload.
*/
CREATE OR ALTER PROCEDURE dbo.churn
AS
SET NOCOUNT, XACT_ABORT ON;

DECLARE @r float = RAND(CAST(CAST(NEWID() AS varbinary(4)) AS int));

/* Get the type of statement to execute */
DECLARE @StatementType char(6) = CASE
                                 WHEN @r &amp;lt;= 0.15 THEN 'insert'
                                 WHEN @r &amp;lt;= 0.30 THEN 'delete'
                                 WHEN @r &amp;lt;= 0.65 THEN 'update'
                                 WHEN @r &amp;lt;= 1 THEN 'select'
                                 ELSE NULL
                                 END;

/* Get the maximum key value for the clustered index */
DECLARE @MaxKey int = (
                      SELECT CAST(current_value AS int)
                      FROM sys.sequences
                      WHERE name = 's_id'
                            AND
                            SCHEMA_NAME(schema_id) = 'dbo'
                      );

/* Get a random key value within the key range */
DECLARE @StartKey int = 1 + RAND() * @MaxKey;

/* Get a random number of rows, between 1 and 100, to modify or read */
DECLARE @RowCount int = 1 + RAND() * 99;

/* Execute a statement */

IF @StatementType = 'insert'
INSERT INTO dbo.t (id)
SELECT NEXT VALUE FOR dbo.s_id
FROM GENERATE_SERIES(1, @RowCount);

IF @StatementType = 'delete'
DELETE TOP (@RowCount) dbo.t
WHERE id &amp;gt;= @StartKey;

IF @StatementType = 'update'
UPDATE TOP (@RowCount) dbo.t
SET dt = DEFAULT,
    u = DEFAULT,
    s = DEFAULT
WHERE id &amp;gt;= @StartKey;

IF @StatementType = 'select'
SELECT TOP (@RowCount) id, dt, u, s
FROM dbo.t
WHERE id &amp;gt;= @StartKey;
GO

/*
The remainder of this script is executed three times:

1. Before running the workload using SQLQueryStress.
2. Immediately after the workload stops running. 
3. Once automatic index compaction completes several minutes later.
*/

/*
Monitor page density and the number of pages and records
in the leaf level of the clustered index.
*/
SELECT avg_page_space_used_in_percent AS page_density,
       page_count,
       record_count
FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID('dbo.t'), 1, 1, 'DETAILED')
WHERE index_level = 0;

/* Run a test query and measure its logical reads. */
DROP TABLE IF EXISTS #t;

SET STATISTICS IO ON;

SELECT TOP (1000) id, dt, u, s
INTO #t
FROM dbo.t
WHERE id &amp;gt;= 10000

SET STATISTICS IO OFF;
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 18 Mar 2026 12:30:29 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/stop-defragmenting-and-start-living-introducing-auto-index/ba-p/4500089</guid>
      <dc:creator>Dimitri_Furman</dc:creator>
      <dc:date>2026-03-18T12:30:29Z</dc:date>
    </item>
    <item>
      <title>Managed Identity Support for Azure SQL Database Import &amp; Export services (preview)</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/managed-identity-support-for-azure-sql-database-import-export/ba-p/4498732</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Today&amp;nbsp;we’re&amp;nbsp;announcing&amp;nbsp;a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;public preview&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;that lets Azure SQL Database Import&amp;nbsp;&amp;amp;&amp;nbsp;Export&amp;nbsp;services&amp;nbsp;authenticate with&amp;nbsp;user-assigned&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;managed identity&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;Now Azure SQL Databases can perform import and export operations with no passwords, storage&amp;nbsp;keys&amp;nbsp;or SAS tokens.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;With this preview, customers can choose to use either a single user-assigned managed identity (UAMI) for both SQL and Storage permissions or assign separate UAMIs, one for the Azure SQL logical server and another for the Storage account, for full separation of duties.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;At a glance:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Run Import/Export using a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;user-assigned managed identity (UAMI).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use one identity for both SQL and Storage, or split them if you prefer tighter scoping.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Works in the portal, REST, Azure CLI, and PowerShell.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P aria-level="2"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Why &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;this matters:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Managed identity support makes SQL migrations simpler and safer, no passwords, storage keys, or SAS tokens. By leveraging managed identity when integrating Import/Export into a pipeline, you streamline access management and enhance security: permissions are granted directly to the identity, reducing manual credential handling and the risk of exposing sensitive information. This keeps operations efficient and secure, without secrets embedded in scripts&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You’ve&amp;nbsp;got two straightforward options:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;One UAMI for everything&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(simplest setup).&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;Two UAMIs, &lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;one for SQL and one for Storage, recommended if you wish to maintain more strictly defined permissions.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Getting started:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Create a user-assigned managed identity (UAMI)&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Decide up front whether you want one identity end-to-end, or two identities (SQL vs Storage) for separation of duties.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Attach the UAMI to the Azure SQL logical server&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;On the server&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Identity&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;blade, add the UAMI so the Import/Export job can run as that identity.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Set the server’s Microsoft Entra ID admin to the UAMI&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;In&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Entra ID&amp;nbsp;&amp;gt;&amp;nbsp;Set admin,&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;select the UAMI. This is what lets the workflow authenticate to SQL without a password.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Grant Storage access&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Use&amp;nbsp;Storage Blob Data Reader&amp;nbsp;for import and&amp;nbsp;Storage Blob Data Contributor&amp;nbsp;for export, assigned in&amp;nbsp;Access control (IAM). If you can, scope the assignment to the container that holds the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.bacpac&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Pass resource IDs (not names) in your calls&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;
&lt;P&gt;In REST/CLI/PowerShell, you pass the UAMI&amp;nbsp;&lt;STRONG&gt;resource ID&lt;/STRONG&gt; as the value of &lt;EM&gt;administratorLogin&lt;/EM&gt; (SQL identity) and &lt;EM&gt;storageKey&lt;/EM&gt; (Storage identity), and set &lt;EM&gt;authenticationType&lt;/EM&gt; / &lt;EM&gt;storageKeyType&lt;/EM&gt; to &lt;EM&gt;ManagedIdentity&lt;/EM&gt;.&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;
&lt;P&gt;&lt;EM&gt;administratorLogin → UAMI resource ID used for SQL auth&lt;/EM&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-style: italic;" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;
&lt;P&gt;&lt;EM&gt;storageKey → UAMI resource ID used for Storage &lt;/EM&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-style: italic;" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;
&lt;P&gt;&lt;EM&gt;authauthenticationType / storageKeyType → ManagedIdentity&lt;/EM&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Run the import/export job&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Kick it off from the portal, REST, Azure CLI, or PowerShell. From there, the service uses the identity you selected to reach both SQL and Storage.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Portal experience&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In the Azure portal, you can choose&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Authentication type&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Managed identity&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and select the user-assigned managed identity to use for the operation.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Figure 1: Azure portal Import/Export experience with Managed identity authentication selected.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Notes&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;This preview supports&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;user-assigned&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;managed identities (UAMIs).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;For least privilege, scope Storage roles to the specific container used for the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.bacpac&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; file and use two user-assigned managed identities (UAMIs), one for SQL and one for the storage.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Sample 1: REST API — Export using one UAMI:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="powershell"&gt;$exportBody = "{
`n  `"storageKeyType`": `"ManagedIdentity`",
`n  `"storageKey`": `"${managedIdentityServerResourceId}`",
`n  `"storageUri`": `"${storageUri}`",
`n  `"administratorLogin`": `"${managedIdentityServerResourceId}`",
`n  `"authenticationType`": `"ManagedIdentity`"
`n}"

$export = Invoke-AzRestMethod -Method POST -Path "/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Sql/servers/${serverName}/databases/${databaseName}/export?api-version=2024-05-01-preview" -Payload $exportBody

# Poll operation status
Invoke-AzRestMethod -Method GET $export.Headers.Location.AbsoluteUri&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Sample 2: REST API — Import to a new server using &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;one UAMI:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="powershell"&gt;$serverName = "sql-mi-demo-target"
$databaseName = "sqldb-mi-demo-target"

# Same UAMI for SQL auth + Storage access
$importBody = "{
`n  `"operationMode`": `"Import`",
`n  `"administratorLogin`": `"${managedIdentityServerResourceId}`",
`n  `"authenticationType`": `"ManagedIdentity`",
`n  `"storageKeyType`": `"ManagedIdentity`",
`n  `"storageKey`": `"${managedIdentityServerResourceId}`",
`n  `"storageUri`": `"${storageUri}`",
`n  `"databaseName`": `"${databaseName}`"
`n}"

$import = Invoke-AzRestMethod -Method POST -Path "/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Sql/servers/${serverName}/databases/${databaseName}/import?api-version=2024-05-01-preview" -Payload $importBody

# Poll operation status
Invoke-AzRestMethod -Method GET $import.Headers.Location.AbsoluteUri&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Sample 3: PowerShell — Export using two UAMIs:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="powershell"&gt;# Server UAMI for SQL auth, Storage UAMI for storage access
New-AzSqlDatabaseExport -ResourceGroupName $resourceGroupName -DatabaseName $databaseName -ServerName $serverName -StorageKeyType ManagedIdentity -StorageKey $managedIdentityStorageResourceId -StorageUri $storageUri -AuthenticationType ManagedIdentity -AdministratorLogin $managedIdentityServerResourceId&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Sample 4: PowerShell — Import to a new server using two UAMIs:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="powershell"&gt;New-AzSqlDatabaseImport -ResourceGroupName $resourceGroupName -DatabaseName $databaseName -ServerName $serverName -DatabaseMaxSizeBytes $databaseSizeInBytes -StorageKeyType "ManagedIdentity" -StorageKey $managedIdentityStorageResourceId -StorageUri $storageUri -Edition $edition -ServiceObjectiveName $serviceObjectiveName -AdministratorLogin $managedIdentityServerResourceId -AuthenticationType ManagedIdentity&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Sample 5: Azure CLI — Export using two UAMIs:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;az sql db export -s $serverName -n $databaseName -g $resourceGroupName --auth-type ManagedIdentity -u $managedIdentityServerResourceId --storage-key $managedIdentityStorageResourceId --storage-key-type ManagedIdentity --storage-uri $storageUri&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Sample 6: Azure CLI — Import to a new server using two UAMIs:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;az sql db import -s $serverName -n $databaseName -g $resourceGroupName --auth-type ManagedIdentity -u $managedIdentityServerResourceId --storage-key $managedIdentityStorageResourceId --storage-key-type ManagedIdentity --storage-uri $storageUrib&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;For more information and samples, please check &lt;/SPAN&gt;&lt;A href="https://aka.ms/importMIpupr" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Tutorial: Use managed identity with Azure SQL import and export (preview)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 03 Mar 2026 18:05:24 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/managed-identity-support-for-azure-sql-database-import-export/ba-p/4498732</guid>
      <dc:creator>HugoQueiroz_MSFT</dc:creator>
      <dc:date>2026-03-03T18:05:24Z</dc:date>
    </item>
    <item>
      <title>GA of update policy SQL Server 2025 for Azure SQL Managed Instance</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/ga-of-update-policy-sql-server-2025-for-azure-sql-managed/ba-p/4498802</link>
      <description>&lt;P&gt;We’re happy to announce that the update policy&amp;nbsp;&lt;EM&gt;SQL Server 2025&lt;/EM&gt;&amp;nbsp;for Azure SQL Managed Instance is now generally available (GA). &lt;EM&gt;SQL Server 2025&lt;/EM&gt;&amp;nbsp;update policy contains all the latest SQL engine innovation while retaining database portability to the recent major release of SQL Server.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://aka.ms/sqlmiupdatepolicydocs" target="_blank" rel="noopener"&gt;Update policy&lt;/A&gt;&amp;nbsp;is an instance configuration option that provides flexibility and allows you to choose between instant access to the latest SQL engine features and fixed SQL engine feature set corresponding to 2022 and 2025 major releases of SQL Server. Regardless of the update policy chosen, you continue to benefit from Azure SQL platform innovation. New features and capabilities not related to the SQL engine – everything that makes Azure SQL Managed Instance a true PaaS service – are successively delivered to your Azure SQL Managed Instance resources.&lt;/P&gt;
&lt;H2&gt;What’s new in SQL Server 2025 update policy&lt;/H2&gt;
&lt;P&gt;In short, instances with update policy&amp;nbsp;&lt;EM&gt;SQL Server 2025&lt;/EM&gt;&amp;nbsp;benefit from all the SQL engine features that were gradually added to the&amp;nbsp;&lt;EM&gt;Always-up-to-date&lt;/EM&gt;&amp;nbsp;policy over the past few years and are not available in the&amp;nbsp;&lt;EM&gt;SQL Server 2022&lt;/EM&gt;&amp;nbsp;update policy. Let’s name few most notable features, with complete list available in the&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/update-policy?view=azuresql&amp;amp;tabs=azure-portal#feature-comparison" target="_blank" rel="noopener"&gt;update policy documentation&lt;/A&gt;:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/performance/optimized-locking" target="_blank" rel="noopener"&gt;Optimized locking&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/mirroring/azure-sql-managed-instance" target="_blank" rel="noopener"&gt;Mirroring in Fabric&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/regular-expressions/overview" target="_blank" rel="noopener"&gt;Regular expression functions&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/t-sql/data-types/vector-data-type" target="_blank" rel="noopener"&gt;Vector data type&lt;/A&gt;&amp;nbsp;and&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/sql/t-sql/functions/vector-functions-transact-sql" target="_blank" rel="noopener"&gt;functions&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/t-sql/data-types/json-data-type" target="_blank" rel="noopener"&gt;JSON data type&lt;/A&gt;&amp;nbsp;and&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/sql/t-sql/functions/json-arrayagg-transact-sql" target="_blank" rel="noopener"&gt;aggregate functions&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-invoke-external-rest-endpoint-transact-sql" target="_blank" rel="noopener"&gt;Invoking HTTP REST endpoints&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/copy-only-backups-sql-server" target="_blank" rel="noopener"&gt;Manual (copy-only) backup to immutable Azure Blob Storage&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/azuresqlblog/stream-data-in-near-real-time-from-sql-to-azure-event-hubs---public-preview/4470724" target="_blank" rel="noopener" data-lia-auto-title="Change Event Streaming (private preview)" data-lia-auto-title-active="0"&gt;Change Event Streaming (private preview)&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Update policy for each modernization strategy&lt;/H2&gt;
&lt;P&gt;&lt;EM&gt;Always-up-to-date&lt;/EM&gt;&amp;nbsp;is a “perpetual” update policy. It has no end of lifetime and brings new SQL engine features to instances as soon as they are available in Azure. It enables you to always be at the forefront - to quickly adopt new yet production-ready SQL engine features, benefit from them in everyday operations and keep a competitive edge without waiting for the next major release of SQL Server.&lt;/P&gt;
&lt;P&gt;In contrast, update policies&amp;nbsp;&lt;EM&gt;SQL Server 2025&lt;/EM&gt;&amp;nbsp;and&amp;nbsp;&lt;EM&gt;SQL Server 2022&lt;/EM&gt;&amp;nbsp;contain fixed sets of SQL engine features corresponding to the respective releases of SQL Server. They’re optimized to fulfill regulatory compliance, contractual, or other requirements for database/workload portability from managed instance to SQL Server. Over time, they get security patches, fixes, and incremental functional improvements in form of Cumulative Updates, but not new SQL engine features. They also have limited lifetime, aligned with the period of mainstream support of SQL Server releases. As the end of mainstream support for the update policy approaches, you should upgrade instances to a newer policy. Instances will be &lt;STRONG&gt;automatically upgraded&lt;/STRONG&gt; to the next more recent update policy at the end of mainstream support of their existing update policy.&lt;/P&gt;
&lt;H2&gt;Best practices with the Update policy feature&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;Plan for the&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/lifecycle/products/azure-sql-managed-instance" target="_blank" rel="noopener"&gt;end of lifetime&lt;/A&gt;&amp;nbsp;of&amp;nbsp;&lt;EM&gt;SQL Server 2022&lt;/EM&gt;&amp;nbsp;update policy if you’re using it today, and upgrade to a newer policy on your terms before automatic upgrade kicks in. Choose between &lt;EM&gt;Always-up-to-date&lt;/EM&gt; and SQL Server 2025&amp;nbsp;update policy.&lt;/LI&gt;
&lt;LI&gt;Make sure to add update policy configuration to your&amp;nbsp;&lt;STRONG&gt;deployment templates and scripts&lt;/STRONG&gt;, so that you don’t rely on service defaults that may change in the future.&lt;/LI&gt;
&lt;LI&gt;Be aware that using some of the newly introduced features may require changing the&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/databases/view-or-change-the-compatibility-level-of-a-database" target="_blank" rel="noopener"&gt;database compatibility level&lt;/A&gt;. Consult feature documentation for details.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;What’s coming next&lt;/H2&gt;
&lt;P&gt;&lt;EM&gt;SQL Server 2025&lt;/EM&gt; will become the default update policy in Azure portal during March 2026.&lt;/P&gt;
&lt;P&gt;Future versions of REST API, PowerShell and CLI will also have the default value changed to &lt;EM&gt;SQL Server 2025 &lt;/EM&gt;for the „database format“ parameter which corresponds to the instance’s update policy.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;SQL Server 2022 &lt;/EM&gt;policy will reach end of lifetime on January 11, 2028 when the &lt;A href="https://learn.microsoft.com/en-us/lifecycle/products/sql-server-2022" target="_blank" rel="noopener"&gt;mainstream support for SQL Server 2022&lt;/A&gt; ends. Plan timely and change the update policy of your instances before that date.&lt;/P&gt;
&lt;img&gt;Update policy transitions&lt;/img&gt;
&lt;H2&gt;Summary&lt;/H2&gt;
&lt;P&gt;Update policy&amp;nbsp;&lt;EM&gt;SQL Server 2025 &lt;/EM&gt;for Azure SQL Managed Instance is now&lt;EM&gt; &lt;/EM&gt;&lt;STRONG&gt;generally available&lt;/STRONG&gt;. It brings the same set of SQL engine features that exist in the new SQL Server 2025. Consider it if you have regulatory compliance, contractual, or other reasons for database/workload portability from Azure SQL Managed Instance to SQL Server 2025. Otherwise, use the &lt;EM&gt;Always-up-to-date&lt;/EM&gt; policy which always provides the latest features and benefits available to Azure SQL Managed Instance.&lt;/P&gt;
&lt;P&gt;If your instances are currently configured with &lt;EM&gt;SQL Server 2022&lt;/EM&gt; update policy, &lt;STRONG&gt;update them to a newer policy&lt;/STRONG&gt; before the end of mainstream support.&lt;/P&gt;
&lt;P&gt;For more details visit&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/update-policy?view=azuresql&amp;amp;tabs=azure-portal" target="_blank" rel="noopener"&gt;Update policy documentation&lt;/A&gt;. To stay up to date with the latest feature additions to Azure SQL Managed Instance, subscribe to the&amp;nbsp;&lt;A href="https://www.youtube.com/@AzureSQL" target="_blank" rel="noopener"&gt;Azure SQL video channel&lt;/A&gt;, subscribe to the&amp;nbsp;&lt;A href="https://techcommunity.microsoft.com/t5/azure-sql-blog/bg-p/AzureSQLBlog" target="_blank" rel="noopener"&gt;Azure SQL Blog&lt;/A&gt;&amp;nbsp;feed, or bookmark&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/doc-changes-updates-release-notes-whats-new" target="_blank" rel="noopener"&gt;What’s new in Azure SQL Managed Instance&lt;/A&gt; article with regular updates.&lt;/P&gt;</description>
      <pubDate>Tue, 03 Mar 2026 00:22:29 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/ga-of-update-policy-sql-server-2025-for-azure-sql-managed/ba-p/4498802</guid>
      <dc:creator>Mladen_Andzic</dc:creator>
      <dc:date>2026-03-03T00:22:29Z</dc:date>
    </item>
    <item>
      <title>Why Developers and DBAs love SQL’s Dynamic Data Masking (Series-Part 1)</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/why-developers-and-dbas-love-sql-s-dynamic-data-masking-series/ba-p/4498450</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Dynamic Data Masking (DDM) is one of those SQL features (available in SQL Server, Azure SQL DB, Azure SQL MI, SQL Database in Microsoft Fabric) that both developers and DBAs can rally behind. Why? Because it delivers a simple, built-in way to protect sensitive data—like phone numbers, emails, or IDs—without rewriting application logic or duplicating security rules across layers. With just a single line of T-SQL, you can configure masking directly at the column level, ensuring that non-privileged users see only obfuscated values while privileged users retain full access. This not only streamlines development but also supports compliance with data privacy regulations like GDPR and HIPAA, etc. by minimizing exposure to personally identifiable information (PII).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In this first post of our DDM series, we’ll walk through a real-world scenario using the default masking function to show how easy it is to implement and how much development effort it can save.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Scenario: Hiding customer phone numbers from support queries&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Imagine you have a support application where agents can look up customer profiles. They need to&amp;nbsp;know if&amp;nbsp;a phone number exists for the&amp;nbsp;customer but&amp;nbsp;shouldn’t&amp;nbsp;see the actual digits for privacy. In a traditional approach, a developer might implement custom logic in the app (or a SQL view) to replace phone numbers with placeholders like “XXXX” for non-privileged users. This adds complexity and duplicate logic across the app.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;With DDM’s default masking, the database can handle this automatically.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;By applying a mask to the phone number column, any query by a non-privileged user will return a generic masked value (e.g.&amp;nbsp;“XXXX”) instead of the real number. The support agent gets the information they need (that a number is on file) without revealing the actual phone number, and the developer writes&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;zero&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;masking code in the app.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This not only simplifies the application codebase but also ensures consistent data protection across all query access paths. As Microsoft’s documentation puts it, DDM lets you control how much sensitive data to reveal&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;“with minimal effect on the application layer”&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;– exactly what our scenario achieves.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Using the ‘Default’ Mask in T-SQL :&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The ‘Default’ masking function is the simplest mask: it fully replaces the actual value with a fixed default based on data type. For text data, that default is XXXX.&amp;nbsp;Let’s&amp;nbsp;apply this to our phone&amp;nbsp;number&amp;nbsp;example. The&amp;nbsp;following T-SQL snippet&amp;nbsp;works in Azure SQL Database, Azure SQL&amp;nbsp;MI&amp;nbsp;and SQL Server:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;SQL&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;-- Step 1: Create the table with a default mask on the Phone column&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;CREATE TABLE&amp;nbsp;SupportCustomers&amp;nbsp;(&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;   &amp;nbsp;CustomerID   INT PRIMARY KEY,&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;    Name        &amp;nbsp;NVARCHAR(100),&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;    Phone       &amp;nbsp;NVARCHAR(15) MASKED WITH (FUNCTION = 'default()')  --&amp;nbsp;Apply default masking&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;);&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;GO&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;-- Step 2: Insert sample data&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;INSERT INTO&amp;nbsp;SupportCustomers&amp;nbsp;(CustomerID, Name, Phone)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;VALUES (1, 'Alice Johnson', '222-555-1234');&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;GO&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;-- Step 3: Create a non-privileged user (no login for simplicity)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;CREATE USER&amp;nbsp;SupportAgent&amp;nbsp;WITHOUT LOGIN;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;GO&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;-- Step 4: Grant SELECT permission on the table to the user&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;GRANT SELECT ON&amp;nbsp;SupportCustomers&amp;nbsp;TO&amp;nbsp;SupportAgent;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;GO&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;-- Step 5: Execute a SELECT as the non-privileged user&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;EXECUTE AS USER = 'SupportAgent';&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;SELECT Name, Phone FROM&amp;nbsp;SupportCustomers&amp;nbsp;WHERE&amp;nbsp;CustomerID&amp;nbsp;= 1&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Alternatively, you can use Azure Portal to configure masking as shown in the following screenshot:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Expected result:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;The query above would return Alice’s name and a masked phone number. Instead of seeing&amp;nbsp;222-555-1234, the Phone column would show XXXX. Alice’s actual number&amp;nbsp;remains&amp;nbsp;safely stored in the database, but&amp;nbsp;it’s&amp;nbsp;dynamically obscured for the support agent’s query.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Meanwhile, privileged users such as administrator or db_owner which has CONTROL permission on the database or user with proper UNMASK permission would see the real phone number when running the same query.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;How this helps Developers :&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;By pushing the masking logic down to the database, developers and DBAs avoid writing repetitive masking code in every app or report that touches this data. In our scenario, without DDM you might implement a check in the application like:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;If&amp;nbsp;user_role&amp;nbsp;== “Support”,&amp;nbsp;then show “XXXX” for phone number, else show full phone.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;With DDM, such conditional code&amp;nbsp;isn’t&amp;nbsp;needed – the database takes care of it. This means:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Less application code&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;to write and&amp;nbsp;maintain&amp;nbsp;for masking&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Consistent masking&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;everywhere (whether data is accessed via app, report, or ad-hoc query).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Quick changes&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;to masking rules in one place if requirements change, without hunting through application code.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;From a security standpoint, DDM reduces the risk of accidental data exposure and helps in compliance scenarios where personal data must be protected in lower environments or by certain roles, while reducing the developer effort drastically.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In the next posts of this series, we’ll explore other masking functions (like Email, Partial, and Random etc) with different scenarios. By the end, you’ll see how each built-in mask can be applied to make data security and compliance more developer-friendly!&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Reference Links :&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking?view=sql-server-ver17" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Dynamic Data Masking - SQL Server | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/database/dynamic-data-masking-overview?view=azuresql" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Dynamic Data Masking - Azure SQL Database &amp;amp; Azure SQL Managed Instance &amp;amp; Azure Synapse Analytics | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 02 Mar 2026 10:17:08 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/why-developers-and-dbas-love-sql-s-dynamic-data-masking-series/ba-p/4498450</guid>
      <dc:creator>MadhumitaTripathyMSFT</dc:creator>
      <dc:date>2026-03-02T10:17:08Z</dc:date>
    </item>
    <item>
      <title>Multiple secondaries for failover groups is now in public preview</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/multiple-secondaries-for-failover-groups-is-now-in-public/ba-p/4489005</link>
      <description>&lt;P&gt;Failover groups for Azure SQL Database is a business continuity solution that lets you manage the replication and failover of databases to another Azure SQL logical server.&amp;nbsp; With failover groups, you get automatic endpoint redirection, so you don't have to change the connection string for your application after a geo-failover—connections are automatically routed to the current primary.&amp;nbsp; Until now, Azure SQL failover groups have only supported one secondary.&lt;/P&gt;
&lt;P&gt;We're excited to announce that Azure SQL Database failover groups support for up to &lt;STRONG&gt;four secondaries&lt;/STRONG&gt;&amp;nbsp;is now available in public preview. This enhancement gives you greater flexibility for disaster recovery, regional read scale-out, and complex high-availability scenarios.&lt;/P&gt;
&lt;H4&gt;What's New?&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Create up to&amp;nbsp;&lt;STRONG&gt;four secondaries&lt;/STRONG&gt;&amp;nbsp;for each failover group, deployed across the same or different Azure regions.&lt;/LI&gt;
&lt;LI&gt;Use the additional secondaries to add&amp;nbsp;&lt;STRONG&gt;read scale-out capabilities&lt;/STRONG&gt; to additional regions, adding flexibility for read-only workloads.&lt;/LI&gt;
&lt;LI&gt;Greater flexibility for&amp;nbsp;&lt;STRONG&gt;disaster recovery planning&lt;/STRONG&gt;&amp;nbsp;with multiple failover targets.&lt;/LI&gt;
&lt;LI&gt;Improved &lt;STRONG&gt;resilience&lt;/STRONG&gt;&amp;nbsp;by distributing secondaries across multiple geographic regions.&lt;/LI&gt;
&lt;LI&gt;Facilitate &lt;STRONG&gt;migration&lt;/STRONG&gt; to another region without sacrificing existing disaster recovery protection.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;How to Get Started&lt;/H4&gt;
&lt;P&gt;Getting started with multiple secondaries in Azure SQL failover groups is straightforward.&lt;/P&gt;
&lt;P&gt;In the Azure Portal, the process to create a failover group remains the same.&amp;nbsp; You can add additional secondaries using the process below.&lt;/P&gt;
&lt;H5&gt;Adding Additional Secondary Servers to a Failover Group in the Portal&lt;/H5&gt;
&lt;OL&gt;
&lt;LI&gt;Go to your Azure SQL Database logical server in the Azure portal.&lt;/LI&gt;
&lt;LI&gt;Open the&amp;nbsp;&lt;STRONG&gt;"Failover groups"&lt;/STRONG&gt; blade under&amp;nbsp;&lt;STRONG&gt;"Data management"&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Select an existing failover group.&lt;/LI&gt;
&lt;LI&gt;Click the&amp;nbsp;&lt;STRONG&gt;"Add server"&lt;/STRONG&gt;&amp;nbsp;menu item to add additional secondary servers.&lt;/LI&gt;
&lt;LI&gt;A side panel opens displaying the list of secondary servers and a dropdown to select which server should operate as the&amp;nbsp;&lt;STRONG&gt;read-only listener endpoint target&lt;/STRONG&gt;.&amp;nbsp; The additional secondary server can be in the same or different Azure region as the primary.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;NOTE&lt;/STRONG&gt;: The read-only listener endpoint dropdown lists all existing secondary servers as well as the secondary server being added. This allows you to designate which secondary server should receive read-only traffic routed through the `&amp;lt;fog-name&amp;gt;.secondary.database.windows.net` endpoint. However, the server selected as the read-only listener endpoint target&amp;nbsp;&lt;STRONG&gt;should not be in the same region as the primary server&lt;/STRONG&gt;&amp;nbsp;if you intend to serve read workloads with that endpoint.&lt;/LI&gt;
&lt;/OL&gt;
&lt;img&gt;Adding an additional secondary to your failover group and specifying the read-only listener endpoint target&lt;/img&gt;
&lt;OL start="6"&gt;
&lt;LI&gt;After selecting the additional secondary and specifying your read-only listener endpoint target, click "Select" on the side panel and click "Save" in the main menu to apply your failover group configuration.&amp;nbsp; The additional secondary will be added and seeding of databases in the failover group will begin to that additional secondary.&amp;nbsp; You can modify your read-only listener endpoint target with the "Edit configuration" menu option.&lt;/LI&gt;
&lt;/OL&gt;
&lt;img&gt;Save the configuration for the failover group with the newly added secondary&lt;/img&gt;&lt;img&gt;Databases in the failover group will begin seeding to the newly added secondary&lt;/img&gt;
&lt;P&gt;&lt;STRONG&gt;TIP&lt;/STRONG&gt;: If you want zone redundancy enabled for the secondary databases, ensure that the secondary servers are in regions that support availability zones and configure the zone redundancy setting appropriately.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;Using PowerShell&lt;/H4&gt;
&lt;P&gt;Creating a failover group with multiple secondaries can also be done with PowerShell.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Example - Create a failover group with multiple secondaries:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="powershell"&gt;New-AzSqlDatabaseFailoverGroup `
   -ResourceGroupName "myrg" `
   -ServerName "primaryserver" `
   -PartnerServerName "secondaryserver1" `
   -FailoverGroupName "myfailovergroup" `
   -FailoverPolicy "Manual" `
   -PartnerServerList @("secondary_uri_1", "secondary_uri_2", "secondary_uri_3", "secondary_uri_4") `
   -ReadOnlyEndpointTargetServer "secondary_uri_1"

where "secondary_uri_n" is in the form below and secondaryserver1 is also included in the list
"/subscriptions/your_sub_guid/resourceGroups/your_resource_group/providers/Microsoft.Sql/servers/your_server_name"&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Example - Add additional secondary servers to an existing failover group:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="powershell"&gt;Set-AzSqlDatabaseFailoverGroup `
   -ResourceGroupName "myrg" `
   -ServerName "primaryserver" `
   -FailoverGroupName "myfailovergroup" `
   -FailoverPolicy "Manual" `
   -PartnerServerList @("secondary_uri_1", "secondary_uri_2", "secondary_uri_3", "secondary_uri_4") `
   -ReadOnlyEndpointTargetServer "secondary_uri_1"

where "secondary_uri_n" is in the form below and secondaryserver1 is also included in the list
"/subscriptions/your_sub_guid/resourceGroups/your_resource_group/providers/Microsoft.Sql/servers/your_server_name"&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;Performing a Failover&lt;/H4&gt;
&lt;P&gt;With multiple secondaries, you can choose which secondary to promote to primary during a failover.&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;Using the Portal&lt;/H5&gt;
&lt;OL&gt;
&lt;LI&gt;Navigate to your SQL server's&amp;nbsp;&lt;STRONG&gt;Failover groups&lt;/STRONG&gt;&amp;nbsp;blade.&lt;/LI&gt;
&lt;LI&gt;Select the failover group you want to fail over.&lt;/LI&gt;
&lt;LI&gt;In the servers list, locate the secondary server you want to promote.&lt;/LI&gt;
&lt;LI&gt;Click the&amp;nbsp;&lt;STRONG&gt;ellipsis menu (...)&lt;/STRONG&gt;&amp;nbsp;next to the server.&lt;/LI&gt;
&lt;/OL&gt;
&lt;img&gt;Use the ellipsis menu for failover options and to remove a server from the failover group&lt;/img&gt;
&lt;OL start="5"&gt;
&lt;LI&gt;Select&amp;nbsp;&lt;STRONG&gt;Failover&lt;/STRONG&gt; for a planned failover (with full data synchronization) or&amp;nbsp;&lt;STRONG&gt;Forced failover&lt;/STRONG&gt;&amp;nbsp;for an unplanned failover (potential data loss).&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;TIP&lt;/STRONG&gt;: The ellipsis menu also includes a&amp;nbsp;&lt;STRONG&gt;Remove server&lt;/STRONG&gt; option, allowing you to remove a secondary server from the failover group.&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;Using PowerShell&lt;/H5&gt;
&lt;P&gt;For PowerShell, use the `Switch-AzSqlDatabaseFailoverGroup` cmdlet to perform a failover.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Example:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="powershell"&gt;Switch-AzSqlDatabaseFailoverGroup `
   -ResourceGroupName "myrg" `
   -ServerName "secondaryserver1" `
   -FailoverGroupName "myfailovergroup"&lt;/LI-CODE&gt;
&lt;H4&gt;Key Benefits&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Enhanced Disaster Recovery&lt;/STRONG&gt; - Multiple geo-secondaries provide additional failover targets, reducing the risk of total service disruption.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Regional Read Scale-Out&amp;nbsp;&lt;/STRONG&gt;- Distribute read-only workloads across multiple regions.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Flexible HA/DR Architecture&amp;nbsp;&lt;/STRONG&gt;- Design your high-availability architecture based on your specific business requirements.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Ease migrations to another region&lt;/STRONG&gt; - Leverage the additional secondary to migrate to a different Azure region while maintaining DR protection.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;Limitations &amp;amp; Notes&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;You can create up to &lt;STRONG&gt;four secondaries&lt;/STRONG&gt;&amp;nbsp;per failover group.&lt;/LI&gt;
&lt;LI&gt;Each secondary must be hosted on a &lt;STRONG&gt;different logical server&lt;/STRONG&gt; from the primary.&lt;/LI&gt;
&lt;LI&gt;Secondary servers can be in the same region as the primary or in different regions.&lt;/LI&gt;
&lt;LI&gt;The &lt;STRONG&gt;read-only listener endpoint target&lt;/STRONG&gt; must be in a different region from the primary if you want to make use of the read-only listener for read workloads.&lt;/LI&gt;
&lt;LI&gt;The failover group name must be globally unique&amp;nbsp;within the `.database.windows.net` domain.&lt;/LI&gt;
&lt;LI&gt;Chaining (creating a geo-replica of a geo-replica) is not supported.&lt;/LI&gt;
&lt;LI&gt;Secondary databases in a failover group inherit the backup storage redundancy and zone redundancy configuration from the primary, depending on the service tier.&lt;/LI&gt;
&lt;LI&gt;For non-Hyperscale databases: Secondary databases will not have high availability (zone redundancy) enabled by default. Enable it after the failover group is created.&lt;/LI&gt;
&lt;LI&gt;For Hyperscale databases: Secondary databases inherit the high availability settings from their respective primary databases.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;Best Practices&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Use paired regions&lt;/STRONG&gt;&amp;nbsp;when possible—failover groups in paired regions have better performance compared to unpaired regions.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Test your failover procedures&lt;/STRONG&gt;&amp;nbsp;regularly using planned failovers to ensure your disaster recovery plan works as expected.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Monitor replication lag&lt;/STRONG&gt; using `sys.dm_geo_replication_link_status` or the Replication Lag metric in Azure Monitor to ensure your secondaries are synchronized.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Consider your RTO and RPO requirements&lt;/STRONG&gt;&amp;nbsp;when designing your failover group architecture.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Use the read-write listener&lt;/STRONG&gt; (`&amp;lt;fog-name&amp;gt;.database.windows.net`) for write workloads and the &lt;STRONG&gt;read-only listener&lt;/STRONG&gt; (`&amp;lt;fog-name&amp;gt;.secondary.database.windows.net`) for read workloads to take advantage of the automatic endpoint redirection after failovers.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Use customer-managed failover group policy&lt;/STRONG&gt; to ensure your RTO and RPO are in your control.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;Frequently Asked Questions&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;What services tiers are supported for multiple secondaries in failover group?&lt;BR /&gt;&lt;BR /&gt;
&lt;P&gt;The following service tiers are supported:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Standard&lt;/LI&gt;
&lt;LI&gt;General Purpose&lt;/LI&gt;
&lt;LI&gt;Premium&lt;/LI&gt;
&lt;LI&gt;Business Critical&lt;/LI&gt;
&lt;LI&gt;Hyperscale&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;When there is more than one secondary, how does read only endpoint work?&lt;/P&gt;
&lt;P&gt;While creating a failover group with more than one secondary you must designate one of the secondaries as the read only endpoint target.&amp;nbsp; All read only connections will be routed to the designated secondary.&lt;/P&gt;
&lt;P&gt;If a failover group is created with just one secondary, then the read only endpoint will default to the only available secondary.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;If I have created multiple secondaries for failover group, can I update the read only endpoint at any time?&lt;BR /&gt;&lt;BR /&gt;Yes, you can "Edit configuration" in the portal or use PowerShell to change the read-only listener endpoint target.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;How does Auto DR work when multiple secondaries exist for a failover group?&lt;/P&gt;
&lt;P&gt;The primary server (read write endpoint) and secondary server (designated as read only endpoint) will be used as a pair for Auto DR failover and endpoints will be swapped upon failover.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;Learn More&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-sql/database/failover-group-sql-db?view=azuresql" target="_blank" rel="noopener"&gt;Failover groups overview &amp;amp; best practices - Azure SQL Database | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-sql/database/failover-group-configure-sql-db?view=azuresql&amp;amp;tabs=azure-portal%2Cazure-powershell-manage&amp;amp;pivots=azure-sql-single-db" target="_blank" rel="noopener"&gt;Configure a failover group for Azure SQL Database | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview?view=azuresql" target="_blank" rel="noopener"&gt;Active Geo-Replication - Azure SQL Database | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-sql/database/business-continuity-high-availability-disaster-recover-hadr-overview?view=azuresql" target="_blank" rel="noopener"&gt;Business continuity overview - Azure SQL Database | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="http://learn.microsoft.com/en-us/powershell/module/az.sql/new-azsqldatabasefailovergroup?view=azps-15.2.0" target="_blank" rel="noopener"&gt;PowerShell - New Failover Group&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="http://learn.microsoft.com/en-us/powershell/module/az.sql/set-azsqldatabasefailovergroup?view=azps-15.2.0" target="_blank" rel="noopener"&gt;PowerShell - Modify Failover Group&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="http://learn.microsoft.com/en-us/powershell/module/az.sql/switch-azsqldatabasefailovergroup?view=azps-15.2.0" target="_blank" rel="noopener"&gt;PowerShell - Perform a failover&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 30 Jan 2026 16:52:54 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/multiple-secondaries-for-failover-groups-is-now-in-public/ba-p/4489005</guid>
      <dc:creator>mhyon</dc:creator>
      <dc:date>2026-01-30T16:52:54Z</dc:date>
    </item>
    <item>
      <title>Why ledger verification is non-negotiable</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/why-ledger-verification-is-non-negotiable/ba-p/4485290</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Data integrity isn’t just a buzzword, it’s the backbone of trust in any database system. With&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/sql/relational-databases/security/ledger/ledger-overview?view=sql-server-ver16&amp;amp;preserve-view=true" target="_blank" rel="noopener"&gt;the&amp;nbsp;ledger functionality&amp;nbsp;in Azure SQL and SQL Server&lt;/A&gt;, organizations have a powerful way to ensure their data hasn’t been tampered with. But here’s the catch: &lt;STRONG&gt;&lt;U&gt;many customers implement ledger tables yet skip the critical step of running the ledger verification procedure&lt;/U&gt;&lt;/STRONG&gt;. This oversight can leave your data vulnerable and your compliance posture shaky.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-ccp-props="{}"&gt;What is a database digest?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;Ledger is a feature that allows SQL Server, Azure SQL Database or Azure SQL Managed Instance to cryptographically link transactions in a tamper-evident manner. Think of it as a blockchain-like mechanism inside your database: every transaction is hashed and chained, creating a block. The hash of the latest block in the database ledger is called &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/sql/relational-databases/security/ledger/ledger-digest-management?view=sql-server-ver16&amp;amp;preserve-view=true" target="_blank" rel="noopener"&gt;the database digest&lt;/A&gt;. It represents the state of all ledger tables in the database at the time when the block was generated. These digests can be stored externally, such as in &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/storage/blobs/immutable-storage-overview" target="_blank"&gt;immutable storage&lt;/A&gt; or &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/confidential-ledger/overview" target="_blank"&gt;Azure Confidential Ledger&lt;/A&gt;, to prevent tampering, providing an independent proof of integrity.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;&lt;SPAN data-ccp-props="{}"&gt;How does ledger verification work?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;The &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/sql/relational-databases/security/ledger/ledger-database-verification?view=sql-server-ver16" target="_blank" rel="noopener"&gt;ledger verification&lt;/A&gt; procedure compares the current state of your ledger tables against the stored digests. It recalculates hashes and validates the chain to confirm that no unauthorized changes have occurred. Without this step, you’re essentially trusting the ledger without verifying it, a dangerous assumption in environments where compliance and security matter.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can launch the verification by running the following stored procedure:&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;DECLARE @digest_locations NVARCHAR(MAX) = (SELECT * FROM sys.database_ledger_digest_locations FOR JSON AUTO, INCLUDE_NULL_VALUES); 
SELECT @digest_locations as digest_locations; 
BEGIN TRY 
        EXEC sys.sp_verify_database_ledger_from_digest_storage @digest_locations; 
        SELECT 'Ledger verification succeeded.' AS Result; 
END TRY 
BEGIN CATCH 
        THROW; 
END CATCH&lt;/LI-CODE&gt;
&lt;H2&gt;Why skipping verification is risky&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Many organizations assume that enabling ledger tables is enough. It’s not. If you don’t run verification:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Tampering&amp;nbsp;goes&amp;nbsp;undetected:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;A malicious actor could alter historical data without triggering alarms.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Compliance&amp;nbsp;gaps:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Regulatory frameworks often require proof of integrity, not just theoretical guarantees.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;False&amp;nbsp;sense of&amp;nbsp;security:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Ledger without verification is like encryption without key management, half a solution.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;SPAN data-ccp-props="{}"&gt;Benefits of regular verification&lt;/SPAN&gt;&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Assurance of data integrity:&lt;/STRONG&gt; Confirms that your ledger is intact and trustworthy.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Audit readiness:&lt;/STRONG&gt; Provides verifiable evidence for compliance audits.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Early detection:&lt;/STRONG&gt; Identifies anomalies before they become catastrophic breaches.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Call to action&lt;/H2&gt;
&lt;P&gt;If you’re using ledger tables in SQL Server or Azure SQL, &lt;U&gt;&lt;STRONG&gt;make verification part of your operational routine&lt;/STRONG&gt;&lt;/U&gt;. Schedule it. Automate it. Treat it as essential, not optional. Your data, your compliance, and your reputation depend on it.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 13 Jan 2026 10:28:01 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/why-ledger-verification-is-non-negotiable/ba-p/4485290</guid>
      <dc:creator>PieterVanhove</dc:creator>
      <dc:date>2026-01-13T10:28:01Z</dc:date>
    </item>
    <item>
      <title>2025 Year in Review: What’s new across SQL Server, Azure SQL and SQL database in Fabric</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/2025-year-in-review-what-s-new-across-sql-server-azure-sql-and/ba-p/4477514</link>
      <description>&lt;P&gt;What a year 2025 has been for SQL! ICYMI and are looking for some hype, might I recommend you start with this blog from Priya Sathy, the product leader for all of SQL at Microsoft:&amp;nbsp;&lt;A href="https://www.microsoft.com/en-us/sql-server/blog/2025/11/18/one-consistent-sql-the-launchpad-from-legacy-to-innovation/" target="_blank" rel="noopener"&gt;One consistent SQL: The launchpad from legacy to innovation&lt;/A&gt;. In this blog post, Priya explains how we have developed and continue to develop one consistent SQL which “unifies your data estate, bringing platform consistency, performance at scale, advanced security, and AI-ready tools together in one seamless experience and creates one home for your SQL workloads in the era of AI.”&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For the FIFTH(!!) year in a row (my heart is warm with the number, I love SQL and #SQLfamily, and time is flying), I am sharing my annual Year in Review blog with all the SQL Server, Azure SQL and SQL database in Fabric news this year. Of course, you can catch weekly episodes related to what’s new and diving deeper on the Azure SQL YouTube channel at&amp;nbsp;&lt;A href="https://aka.ms/AzureSQLYT" target="_blank" rel="noopener"&gt;aka.ms/AzureSQLYT&lt;/A&gt;. This year, in addition to Data Exposed (52 new episodes and over 70K views!). We saw many new series related to areas like GitHub Copilot, SSMS, VS Code, and Azure SQL Managed Instance land in the channel, in addition to Data Exposed.&lt;/P&gt;
&lt;H2&gt;Microsoft Ignite announcements&lt;/H2&gt;
&lt;P&gt;Of course, if you’re looking for the latest announcements from Microsoft Ignite, Bob Ward and I compiled this slide of highlights.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Comprehensive list of 2025 updates&lt;/H2&gt;
&lt;P&gt;You can read this blog (or use AI to reference it later) to get all the updates and references from the year (so much happened at Ignite but before it too!). Here’s all the updates from the year:&lt;/P&gt;
&lt;H3&gt;SQL Server, Arc-enabled SQL Server, and SQL Server on Azure VMs&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Generally Available&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/sql-server-2025-is-now-generally-available/4470570" target="_blank" rel="noopener"&gt;SQL Server 2025 is Now Generally Available&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/general-availability-announcement-of-backuprestore-capabilities-in-sql-server-20/4467065" target="_blank" rel="noopener"&gt;Backup/Restore capabilities in SQL Server 2025&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/sql-server-2025-deeply-integrated-and-feature-rich-on-linux/4471068" target="_blank" rel="noopener"&gt;SQL Server 2025: Deeply Integrated and Feature-rich on Linux&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/resource-governor---a-new-beginning/4470025" target="_blank" rel="noopener"&gt;Resource Governor for Standard Edition&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/reimagining-data-excellence-sql-server-2025-accelerated-by-pure-storage/4470810" target="_blank" rel="noopener"&gt;Reimagining Data Excellence: SQL Server 2025 Accelerated by Pure Storage&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/security-update-for-sql-server-2022-rtm-cu21/4469060" target="_blank" rel="noopener"&gt;Security Update for SQL Server 2022 RTM CU21&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/cumulative-update-22-for-sql-server-2022-rtm/4469670" target="_blank" rel="noopener"&gt;Cumulative Update #22 for SQL Server 2022 RTM&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/whats-new-in-the-backuprestore-area-in-sql-server-2025/4474613" target="_blank" rel="noopener"&gt;Backup/Restore enhancements in SQL Server 2025&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azurearcblog/unified-configuration-and-governance-for-azure-windows-server-and-linux-server/4469769" target="_blank" rel="noopener"&gt;Unified configuration and governance&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azurearcblog/expanding-azure-arc-for-hybrid-and-multicloud-management/4470656" target="_blank" rel="noopener"&gt;Expanding Azure Arc for Hybrid and Multicloud Management&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azurearcblog/sql-server-enabled-by-azure-arc-is-now-generally-available-in-the-us-government-/4443077" target="_blank" rel="noopener"&gt;US Government Virginia region support&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/storage-performance-analysis?view=azuresql" target="_blank" rel="noopener"&gt;I/O Analysis for SQL Server on Azure VMs&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/unlocking-enterprise-ai-sql-server-2025-and-nvidia-nemotron-rag-accelerate-ai/4470790" target="_blank" rel="noopener"&gt;NVIDIA Nemotron RAG Integration&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Preview&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azurearcblog/accelerate-your-cloud-migration-journey-with-azure-arc-resource-discovery-in-azu/4469975" target="_blank" rel="noopener"&gt;Azure Arc resource discovery in Azure Migrate&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azurearcblog/public-preview-multicloud-connector-support-for-google-cloud/4470700" target="_blank" rel="noopener"&gt;Multicloud connector support for Google Cloud&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Migrations&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Generally Available&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoftdatamigration/sql-server-migration-in-azure-arc-%E2%80%93-generally-available/4471020" target="_blank" rel="noopener"&gt;SQL Server migration in Azure Arc&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoftdatamigration/announcing-the-azure-database-migration-service-hub-experience/4454900" target="_blank" rel="noopener"&gt;Azure Database Migration Service Hub Experience&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoftdatamigration/release-announcement-of-sql-server-migration-assistant-ssma-v10-3/4454953" target="_blank" rel="noopener"&gt;SQL Server Migration Assistant (SSMA) v10.3, including Db2 SKU recommendation (preview)&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoftdatamigration/general-availability---dmss-powershell-azure-cli-and-python-sdk/4461650" target="_blank" rel="noopener"&gt;Database Migration Service: PowerShell, Azure CLI, and Python SDK&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoftdatamigration/release-announcement-of-sql-server-migration-assistant-ssma-v10-4/4469378" target="_blank" rel="noopener"&gt;SQL Server Migration Assistant (SSMA) v10.4, including SQL Server 2025 support, Oracle conversion Copilot&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoftdatamigration/general-availability---schema-migration-support-in-azure-database-migration-serv/4439569" target="_blank" rel="noopener"&gt;Schema migration support in Azure Database Migration Service&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Preview&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azurearcblog/accelerate-your-cloud-migration-journey-with-azure-arc-resource-discovery-in-azu/4469975" target="_blank" rel="noopener"&gt;Azure Arc resource discovery in Azure Migrate&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;Azure SQL Managed Instance&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Generally Available&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/generally-available-azure-sql-managed-instance-next-gen-general-purpose/4470970" target="_blank" rel="noopener"&gt;Next-gen General Purpose Service Tier&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/improved-connectivity-types-in-azure-sql-managed-instance/4462629" target="_blank" rel="noopener"&gt;Improved connectivity types in Azure SQL Managed Instance&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/sqlmi-zr-ga" target="_blank" rel="noopener"&gt;Improved resiliency with zone redundancy for general purpose, improved log rate for business critical&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/ri-pricing-bc-zr" target="_blank" rel="noopener"&gt;Apply reservation discount for zone redundant Business Critical databases&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/sqlmi-free" target="_blank" rel="noopener"&gt;Free offer&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/WindowsNativePrincipalsGA" target="_blank" rel="noopener"&gt;Windows principals use to simplify migrations&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/sqlmi-sep-docs" target="_blank" rel="noopener"&gt;Data exfiltration improvements&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Preview&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/windows-authentication-for-cloud-native-identities-modernizing-azure-sql-managed/4475784" target="_blank" rel="noopener"&gt;Windows Authentication for Cloud-Native Identities&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/introducing-new-update-policy-for-azure-sql-managed-instance/4470231" target="_blank" rel="noopener"&gt;New update policy for Azure SQL Managed Instance&lt;/A&gt; &lt;STRONG style="color: rgb(30, 30, 30);"&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Azure SQL Database&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Generally Available&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/azure-sql-database-ltr-backup-immutability-is-now-generally-available/4471457" target="_blank" rel="noopener"&gt;LTR Backup Immutability&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/how-to-get-a-free-azure-sql-database-or-managed-instance/4471390" target="_blank" rel="noopener"&gt;Free Azure SQL Database Offer updates&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/hs-conversion-geodr-ga" target="_blank" rel="noopener"&gt;Move to Hyperscale while preserving existing geo-replication or failover group settings&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/sqlmi-redirect-default" target="_blank" rel="noopener"&gt;Improve redirect connection type to require only port 1433 and promote to default&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/t-sql/functions/dateadd-transact-sql?view=sql-server-ver17" target="_blank" rel="noopener"&gt;Bigint support in DATEADD for extended range calculations&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/sqlrestart" target="_blank" rel="noopener"&gt;Restart your database from the Azure portal&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/sqldbreplicationlagmetric" target="_blank" rel="noopener"&gt;Replication lag metric&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/ServerAuditRedesign" target="_blank" rel="noopener"&gt;Enhanced server audit and server audit action groups&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/geo-zone-redundant-storage-gzrs-is-now-available-for-additional-azure-sql-databa/4292187" target="_blank" rel="noopener"&gt;Read-access geo-zone redundant storage (RA-GZRS) as a backup storage type for non-Hyperscale&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/hs-conversion-v2-ga" target="_blank" rel="noopener"&gt;Improved cutover experience to Hyperscale&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/sqldbavailmetric" target="_blank" rel="noopener"&gt;SLA-compliant availability metric&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/hs-shrink-ga" target="_blank" rel="noopener"&gt;Use database shrink to reduced allocated space for Hyperscale databases&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/AzureSQLBlog/identify-causes-of-auto-resuming-serverless-workloads-in-azure-sql-database/4452741" target="_blank" rel="noopener" data-lia-auto-title="Identify causes of auto-resuming serverless workloads" data-lia-auto-title-active="0"&gt;Identify causes of auto-resuming serverless workloads&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Preview&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/multiple-geo-replicas-for-azure-sql-hyperscale-is-now-in-public-preview/4462632" target="_blank" rel="noopener"&gt;Multiple geo-replicas for Azure SQL Hyperscale&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/public-preview-backup-immutability-for-azure-sql-database-ltr-backups/4461478" target="_blank" rel="noopener"&gt;Backup immutability for Azure SQL Database LTR backups&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Updates across SQL Server, Azure SQL and Fabric SQL database&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Generally Available&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/general-availability-announcement-regex-support-in-sql-server-2025--azure-sql/4470684" target="_blank" rel="noopener"&gt;Regex Support and fuzzy-string matching&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/geo-replication-and-transparent-data-encryption-key-management/4461808" target="_blank" rel="noopener"&gt;Geo-replication and Transparent Data Encryption key management&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/introducing-optimized-locking-v2/4468745" target="_blank" rel="noopener"&gt;Optimized locking v2&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/azuresqlhubblog" target="_blank" rel="noopener"&gt;Azure SQL hub in the Azure portal&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/unistr-strconcat-blog" target="_blank" rel="noopener"&gt;UNISTR intrinsic function and ANSI SQL concatenation operator (||)&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/azuresql-vector-ga" target="_blank" rel="noopener"&gt;New vector data type&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/json-index" target="_blank" rel="noopener"&gt;JSON index&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/t-sql/data-types/json-data-type?view=azuresqldb-current" target="_blank" rel="noopener"&gt;JSON data type and aggregates&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Preview&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/stream-data-in-near-real-time-from-sql-to-azure-event-hubs---public-preview/4470724" target="_blank" rel="noopener"&gt;Stream data to Azure Event Hubs with Change Event Streaming&lt;/A&gt;&amp;nbsp;(Azure SQL DB Public Preview/Fabric SQL Private Preview)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/announcing-public-preview-of-diskann-in-sql-server-2025/4414683" target="_blank" rel="noopener"&gt;DiskANN vector indexing&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;SQL database in Microsoft Fabric and Mirroring&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Generally Available&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/fabric-databases-a-unified-saas-native-experience-for-modern-data-workloads-generally-available?ft=Databases:category" target="_blank" rel="noopener"&gt;Fabric Databases&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/announcing-sql-database-in-fabric-is-now-generally-available-ga?ft=Databases:category" target="_blank" rel="noopener"&gt;SQL database in Fabric&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/unlocking-enterprise-ready-sql-database-in-microsoft-fabric-auditing-backup-copilot-more?ft=Databases:category" target="_blank" rel="noopener"&gt;Unlocking Enterprise ready SQL database in Microsoft Fabric: ALM improvements, Backup customizations and retention, Copilot enhancements &amp;amp; more update details&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/mirroring-for-sql-server-in-microsoft-fabric-generally-available?ft=Databases:category" target="_blank" rel="noopener"&gt;Mirroring for SQL Server&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/announcing-the-general-availability-ga-of-mirroring-for-azure-sql-managed-instance-in-microsoft-fabric?ft=Databases:category" target="_blank" rel="noopener"&gt;Mirroring for Azure SQL Managed Instance in Microsoft Fabric&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/connect-to-your-sql-database-in-fabric-using-python-notebook?ft=Databases:category" target="_blank" rel="noopener"&gt;Connect to your SQL database in Fabric using Python Notebook&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/updates-to-database-development-tools-for-sql-database-in-fabric?ft=Databases:category" target="_blank" rel="noopener"&gt;Updates to database development tools for SQL database in Fabric&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/accelerating-data-movement-by-using-fast-copy-to-unlock-performance-and-efficiency-during-data-ingestion-from-sql-database-in-fabric?ft=Databases:category" target="_blank" rel="noopener"&gt;Using Fast Copy for data ingestion&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/announcing-copilot-for-sql-analytics-endpoint-in-microsoft-fabric?ft=Databases:category" target="_blank" rel="noopener"&gt;Copilot for SQL analytics endpoint&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog" target="_blank" rel="noopener"&gt;Any updates across Microsoft Fabric that apply to the SQL analytics endpoint are generally supported in mirrored databases and Fabric SQL databases via the SQL analytics endpoint. This includes many exciting areas, like Data Agents. See the Fabric blog to get inspired&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Preview&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/database/sql/data-virtualization" target="_blank" rel="noopener"&gt;Data virtualization support&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/security/security-workspace-level-private-links-set-up?tabs=fabric-portal" target="_blank" rel="noopener"&gt;Workspace level Private Link support&lt;/A&gt;&amp;nbsp;(Private Preview)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/announcing-public-preview-customer-managed-keys-in-fabric-sql-database?ft=Databases:category" target="_blank" rel="noopener"&gt;Customer-managed keys in Fabric SQL Database&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/announcing-public-preview-auditing-for-fabric-sql-database/4466803" target="_blank" rel="noopener"&gt;Auditing for Fabric SQL Database&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/how-to-create-a-sql-database-in-fabric-using-fabric-cli?ft=Databases:category" target="_blank" rel="noopener"&gt;Fabric CLI: Create a SQL database in Fabric&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/creating-sql-database-workload-in-fabric-with-terraform-a-step-by-step-guide?ft=Databases:category" target="_blank" rel="noopener"&gt;SQL database workload in Fabric with Terraform&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/spark-connector-for-sql-databases-preview?ft=Databases:category" target="_blank" rel="noopener"&gt;Spark Connector for SQL databases&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Tools and developer&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://www.microsoft.com/en-us/sql-server/blog/2025/12/05/how-the-microsoft-sql-team-is-investing-in-sql-tools-and-experiences/" target="_blank" rel="noopener"&gt;Blog to Read: How the Microsoft SQL team is investing in SQL tools and experiences&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/announcing-the-release-of-sql-server-management-studio-22-1/4476621" target="_blank" rel="noopener"&gt;SQL Server Management Studio (SSMS) 22.1&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;GitHub Copilot Walkthrough (Preview): Guided onboarding from the Copilot badge.&lt;/LI&gt;
&lt;LI&gt;Copilot right-click actions (Preview): Document, Explain, Fix, and Optimize.&lt;/LI&gt;
&lt;LI&gt;Bring your own model (BYOM) support in Copilot (Preview).&lt;/LI&gt;
&lt;LI&gt;Copilot performance: improved response time after the first prompt in a thread.&lt;/LI&gt;
&lt;LI&gt;Fixes: addressed Copilot “Run ValidateGeneratedTSQL” loop and other stability issues.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/announcing-the-release-of-sql-server-management-studio-22/4468220" target="_blank" rel="noopener"&gt;SQL Server Management Studio (SSMS) 22&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Support for SQL Server 2025&lt;/LI&gt;
&lt;LI&gt;Modern connection dialog as default + Fabric browsing on the Browse tab.&lt;/LI&gt;
&lt;LI&gt;Windows Arm64 support (initial) for core scenarios (connect + query).&lt;/LI&gt;
&lt;LI&gt;GitHub Copilot in SSMS (Preview)&amp;nbsp;is available via the AI Assistance workload in the VS Installer.&lt;/LI&gt;
&lt;LI&gt;T-SQL/UX improvements: open execution plan in new tab, JSON viewer, results grid zooms.&lt;/LI&gt;
&lt;LI&gt;New index support: create JSON and Vector indexes from Object Explorer&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/sql-server-management-studio-ssms-21-is-now-generally-available-ga/4415230" target="_blank" rel="noopener"&gt;SQL Server Management Studio (SSMS) 21&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Installation and automatic updates via Visual Studio Installer.&lt;/LI&gt;
&lt;LI&gt;Workloads/components model: smaller footprint + customizable install.&lt;/LI&gt;
&lt;LI&gt;Git integration is available via the Code tools workload.&lt;/LI&gt;
&lt;LI&gt;Modern connection dialog experience (Preview).&lt;/LI&gt;
&lt;LI&gt;New customization options (e.g., vertical tabs, tab coloring, results in grid NULL styling).&lt;/LI&gt;
&lt;LI&gt;Always Encrypted Assessment in the Always Encrypted Wizard.&lt;/LI&gt;
&lt;LI&gt;Migration assistance via the Hybrid and Migration workload.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/sqlserver/announcing-general-availability-of-the-mssql-python-driver/4470788" target="_blank" rel="noopener"&gt;mssql-python Driver&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;ODBC:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver17" target="_blank" rel="noopener"&gt;Microsoft ODBC Driver 18.5.2.1 for SQL Server&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;OLE DB:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/sql/connect/oledb/release-notes-for-oledb-driver-for-sql-server?view=sql-server-ver17#1941" target="_blank" rel="noopener"&gt;Microsoft OLE DB Driver 19.4.1 for SQL Server&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;JDBC (latest train):&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/sql/connect/jdbc/release-notes-for-the-jdbc-driver?view=sql-server-ver17#1321" target="_blank" rel="noopener"&gt;Microsoft JDBC Driver for SQL Server 13.2.1&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Also updated in 2025: supported JDBC branches received multiple servicing updates (including Oct 13, 2025, security fixes). See the same&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/sql/connect/jdbc/release-notes-for-the-jdbc-driver?view=sql-server-ver17" target="_blank" rel="noopener"&gt;JDBC release notes&lt;/A&gt;&amp;nbsp;for the full list.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;.NET:&amp;nbsp;&lt;A href="https://github.com/dotnet/SqlClient/releases/tag/v6.0.2" target="_blank" rel="noopener"&gt;Microsoft.Data.SqlClient 6.0.2&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Related - some notes on drivers released/updated in 2025 (recap):&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/vscode-mssql-november2025" target="_blank" rel="noopener"&gt;MSSQL extension for VS Code 1.37.0&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;GitHub Copilot integration : Ask/Agent modes, slash commands, onboarding.&lt;/LI&gt;
&lt;LI&gt;Edit Data : interactive grid for editing table data (requires&amp;nbsp;mssql.enableExperimentalFeatures: true).&lt;/LI&gt;
&lt;LI&gt;Data-tier Application dialog : deploy/extract&amp;nbsp;.dacpac&amp;nbsp;and import/export&amp;nbsp;.bacpac&amp;nbsp;(requires&amp;nbsp;mssql.enableExperimentalFeatures: true).&lt;/LI&gt;
&lt;LI&gt;Publish SQL Project dialog : deploy&amp;nbsp;.sqlproj&amp;nbsp;to an existing DB or a local SQL dev container.&lt;/LI&gt;
&lt;LI&gt;Added “What’s New” panel + improved query results grid stability/accessibility.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://aka.ms/vscode-mssql-september2025" target="_blank" rel="noopener"&gt;MSSQL extension for VS Code&amp;nbsp;1.36.0&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Fabric connectivity : browse Fabric workspaces and connect to SQL DBs / SQL analytics endpoints.&lt;/LI&gt;
&lt;LI&gt;SQL database in Fabric provisioning : create Fabric SQL databases from Deployments.&lt;/LI&gt;
&lt;LI&gt;GitHub Copilot slash commands : connection, schema exploration, query tasks.&lt;/LI&gt;
&lt;LI&gt;Schema Compare extensibility: new run command for external extensions/SQL Projects (incl. Update Project from Database support).&lt;/LI&gt;
&lt;LI&gt;Query results in performance/reliability improvements (incremental streaming, fewer freezes, better settings handling).&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/tools/sqlpackage/release-notes-sqlpackage?view=sql-server-ver17#170094-sqlpackage" target="_blank" rel="noopener"&gt;SqlPackage 170.0.94 release notes (April 2025)&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Vector: support for&amp;nbsp;vector&amp;nbsp;data type in Azure SQL Database target platform (import/export/extract/deploy/build).&lt;/LI&gt;
&lt;LI&gt;SQL projects: default compatibility level for Azure SQL Database and SQL database in Fabric set to 170.&lt;/LI&gt;
&lt;LI&gt;Parquet: expanded supported types (including&amp;nbsp;json,&amp;nbsp;xml, and&amp;nbsp;vector) + bcp fallback for unsupported types.&lt;/LI&gt;
&lt;LI&gt;Extract: unpack a&amp;nbsp;.dacpac&amp;nbsp;to a folder via&amp;nbsp;/Action:Extract.&lt;/LI&gt;
&lt;LI&gt;Platform: Remove .NET 6 support; .NET Framework build updated to 4.7.2.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/tools/sqlpackage/release-notes-sqlpackage?view=sql-server-ver17#170161-sqlpackage" target="_blank" rel="noopener"&gt;SqlPackage 170.1.61 release notes (July 2025)&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Data virtualization (Azure SQL DB): added support for data virtualization objects in import/export/extract/publish.&lt;/LI&gt;
&lt;LI&gt;Deployment: new publishing properties&amp;nbsp;/p:IgnorePreDeployScript&amp;nbsp;and&amp;nbsp;/p:IgnorePostDeployScript.&lt;/LI&gt;
&lt;LI&gt;Permissions: support for&amp;nbsp;ALTER ANY EXTERNAL MIRROR&amp;nbsp;(Azure SQL DB + SQL database in Fabric) for exporting mirrored tables.&lt;/LI&gt;
&lt;LI&gt;SQL Server 2025 permissions: support for&amp;nbsp;CREATE ANY EXTERNAL MODEL,&amp;nbsp;ALTER ANY EXTERNAL MODEL, and&amp;nbsp;ALTER ANY INFORMATION PROTECTION.&lt;/LI&gt;
&lt;LI&gt;Fixes: improved Fabric compatibility (e.g., avoid deploying unsupported server objects; fixes for Fabric extraction scripting).&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/sql/tools/sqlpackage/release-notes-sqlpackage?view=sql-server-ver17#170270-sqlpackage" target="_blank" rel="noopener"&gt;SqlPackage 170.2.70 release notes (October 2025)&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;External models: support for external models in Azure SQL Database and SQL Server 2025.&lt;/LI&gt;
&lt;LI&gt;AI functions: support for&amp;nbsp;AI_GENERATE_CHUNKS&amp;nbsp;and&amp;nbsp;AI_GENERATE_EMBEDDINGS.&lt;/LI&gt;
&lt;LI&gt;JSON: support for JSON indexes + functions&amp;nbsp;JSON_ARRAYAGG,&amp;nbsp;JSON_OBJECTAGG,&amp;nbsp;JSON_QUERY.&lt;/LI&gt;
&lt;LI&gt;Vector: vector indexes +&amp;nbsp;VECTOR_SEARCH and expanded&amp;nbsp;vector&amp;nbsp;support for SQL Server 2025.&lt;/LI&gt;
&lt;LI&gt;Regex: support for&amp;nbsp;REGEXP_LIKE.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/DacFx/releases/tag/sdk-1.0.0" target="_blank" rel="noopener"&gt;Microsoft.Build.Sql 1.0.0 (SQL database projects SDK)&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Breaking: .NET 8 SDK required for&amp;nbsp;dotnet build&amp;nbsp;(Visual Studio build unchanged).&lt;/LI&gt;
&lt;LI&gt;Globalization support.&lt;/LI&gt;
&lt;LI&gt;Improved SDK/Templates docs (more detailed README + release notes links).&lt;/LI&gt;
&lt;LI&gt;Code analyzer template defaults&amp;nbsp;DevelopmentDependency.&lt;/LI&gt;
&lt;LI&gt;Build validation: check for duplicate build items.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/DacFx/releases/tag/sdk-2.0.0" target="_blank" rel="noopener"&gt;Microsoft.Build.Sql 2.0.0 (SQL database projects SDK)&lt;/A&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;Added SQL Server 2025 target platform (Sql170DatabaseSchemaProvider).&lt;/LI&gt;
&lt;LI&gt;Updated DacFx version to 170.2.70.&lt;/LI&gt;
&lt;LI&gt;.NET SDK targets imported by default (includes newer .NET build features/fixes; avoids full rebuilds with no changes&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure-data-studio/whats-happening-azure-data-studio?tabs=dev" target="_blank" rel="noopener"&gt;Azure Data Studio retirement announcement (retirement February 28, 2026)&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Anna’s Pick of the &lt;S&gt;&lt;STRONG&gt;Month&lt;/STRONG&gt;&lt;/S&gt;&lt;STRONG&gt; Year&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;It’s hard to pick a highlight representative of the whole year, so I’ll take the cheesy way out: people. I get to work with great people working on a great set of products for great people (like you) solving real world problems for people. So, thank YOU and you’re my pick of the year 🧀&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Until next &lt;STRONG&gt;time… &lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;That’s it for now! We release new episodes on Thursdays and new #MVPTuesday episodes on the last Tuesday of every month at &lt;A href="https://aka.ms/azuresqlyt" target="_blank" rel="noopener"&gt;aka.ms/azuresqlyt&lt;/A&gt;. The team has been producing a lot more video content outside of Data Exposed, which you can find at that link too!&lt;/P&gt;
&lt;P&gt;Having trouble keeping up? Be sure to follow us on twitter to get the latest updates on everything, &lt;A href="https://twitter.com/AzureSQL" target="_blank" rel="noopener"&gt;@AzureSQL&lt;/A&gt;. And if you lose this blog, just remember &lt;A href="https://aka.ms/newsupdate2025" target="_blank" rel="noopener"&gt;aka.ms/newsupdate2025&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;We hope to see you next YEAR, on Data Exposed!&lt;/P&gt;
&lt;P&gt;--Anna and Marisa&lt;/P&gt;</description>
      <pubDate>Thu, 18 Dec 2025 17:08:23 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/2025-year-in-review-what-s-new-across-sql-server-azure-sql-and/ba-p/4477514</guid>
      <dc:creator>Anna Hoffman</dc:creator>
      <dc:date>2025-12-18T17:08:23Z</dc:date>
    </item>
    <item>
      <title>Identify causes of auto-resuming serverless workloads in Azure SQL Database</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/identify-causes-of-auto-resuming-serverless-workloads-in-azure/ba-p/4452741</link>
      <description>&lt;P&gt;&lt;STRONG&gt;We are pleased to announce that telemetry is now available in Azure Monitor activity log to identify the causes of auto-resuming serverless workloads in Azure SQL Database.&amp;nbsp; &lt;/STRONG&gt;Prior to exposing this telemetry, the correlation of specific auto-resume causes with database activity could be time consuming and imperfect with no programmatic solution.&lt;/P&gt;
&lt;H3&gt;Serverless auto-pausing and auto-resuming&lt;/H3&gt;
&lt;P&gt;Serverless in SQL Database automatically scales compute based on workload demand and bills for compute used per second.&amp;nbsp; In the General Purpose tier, serverless also provides an option to automatically pause the database during idle usage periods when only storage related costs are billed.&amp;nbsp; The more a database is idle, the more auto-pausing can help reduce compute costs.&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Automatic resuming occurs when database activity returns or certain management related or system operations are performed.&amp;nbsp; Some examples of auto-resume triggers include logins, vulnerability assessment, modification to security settings like data masking rules, and service updates.&amp;nbsp; A comprehensive description of auto-resume triggers is documented in the &lt;A href="https://learn.microsoft.com/azure/azure-sql/database/serverless-tier-overview?view=azuresql&amp;amp;tabs=general-purpose#auto-resume" target="_blank" rel="noopener"&gt;learning reference for serverless&lt;/A&gt;.&lt;/P&gt;
&lt;H3&gt;Activity log for auto-pause and auto-resume events&lt;/H3&gt;
&lt;P&gt;The Azure Monitor activity log keeps a record of all auto-pause and auto-resume events for serverless databases.&amp;nbsp; Auto-resume causes are reported in activity log for "Resume Databases" operations under the “Caller” property of the "Succeeded" event, and latencies for each event are reported under “EventProperties”.&amp;nbsp; This event can be monitored to quickly and deterministically identify auto-resume causes without resorting to inefficient guesswork.&amp;nbsp;&lt;/P&gt;
&lt;P class=""&gt;&lt;STRONG&gt;&lt;EM class="lia-align-left"&gt;Example of Activity log in Azure portal showing an auto-resume event including the cause and latency&amp;nbsp;&amp;nbsp;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;In this example, the serverless database is auto-resumed in around 38 seconds in order to perform a security related vulnerability assessment.&lt;/P&gt;
&lt;P&gt;Understanding the causes of auto-resuming can help in optimizing database access patterns to minimize auto-resume occurrences, keep the database paused for longer, and reduce compute costs even further.&lt;/P&gt;
&lt;H3&gt;Learn more&lt;/H3&gt;
&lt;P&gt;For more information, please see &lt;A href="https://learn.microsoft.com/azure/azure-sql/database/serverless-tier-overview?view=azuresql&amp;amp;tabs=general-purpose" target="_blank" rel="noopener"&gt;Azure SQL Database serverless&lt;/A&gt; and &lt;A href="https://learn.microsoft.com/azure/azure-monitor/platform/activity-log?tabs=log-analytics" target="_blank" rel="noopener"&gt;Azure Monitor activity log&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Tue, 16 Dec 2025 21:41:52 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/identify-causes-of-auto-resuming-serverless-workloads-in-azure/ba-p/4452741</guid>
      <dc:creator>Morgan_Oslake</dc:creator>
      <dc:date>2025-12-16T21:41:52Z</dc:date>
    </item>
    <item>
      <title>Windows Authentication for Cloud-Native Identities: Modernizing Azure SQL Managed Instance (Preview)</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/windows-authentication-for-cloud-native-identities-modernizing/ba-p/4475784</link>
      <description>&lt;P&gt;Organizations moving to the cloud often face a critical challenge: maintaining seamless authentication for legacy applications without compromising security or user experience. Today, we’re excited to announce &lt;STRONG&gt;support for Windows Authentication for Microsoft Entra principals on Azure SQL Managed Instance&lt;/STRONG&gt;, enabling &lt;STRONG&gt;cloud-native identities&lt;/STRONG&gt; to authenticate using familiar Windows credentials.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why This Matters&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Traditionally, Windows Authentication relied on on-premises Active Directory, making it difficult for businesses adopting a &lt;STRONG&gt;cloud-only strategy&lt;/STRONG&gt; to preserve existing authentication models. With this new capability:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Hybrid Identity Support:&lt;/STRONG&gt; Users synchronized between on-premises AD DS and Microsoft Entra ID can continue using a single set of credentials for both environments.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cloud-Only Identity (Preview):&lt;/STRONG&gt; Identities that exist only in Microsoft Entra ID can now leverage Kerberos-based Windows Authentication for workloads like Azure SQL Managed Instance—without requiring domain controllers.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This means organizations can &lt;STRONG&gt;modernize infrastructure while maintaining compatibility with legacy apps&lt;/STRONG&gt;, reducing friction during migration.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Key Benefits&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Seamless Migration:&lt;/STRONG&gt; Move legacy applications to Azure SQL Managed Instance without rewriting authentication logic.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Passwordless Security:&lt;/STRONG&gt; Combine Windows Authentication with modern credentials like &lt;STRONG&gt;Windows Hello for Business&lt;/STRONG&gt; or &lt;STRONG&gt;FIDO2 keys&lt;/STRONG&gt;, enabling MFA and reducing password-related risks.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cloud-Native Integration:&lt;/STRONG&gt; Microsoft Entra Kerberos acts as a cloud-based Key Distribution Center (KDC), issuing Kerberos tickets for cloud resources such as Azure SQL Managed Instance and Azure Files&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Breaking Barriers to Cloud Migration&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Many enterprises hesitate to migrate legacy apps because they depend on Windows Authentication. By extending this capability to&amp;nbsp;&lt;STRONG&gt;cloud-native identities&lt;/STRONG&gt;, we remove a major barrier—allowing customers to &lt;STRONG&gt;modernize at their own pace&lt;/STRONG&gt; while leveraging familiar authentication models.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Learn More&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/winauth-azuread-overview?view=azuresql" target="_blank"&gt;https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/winauth-azuread-overview?view=azuresql&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/entra/identity/authentication/kerberos#group-sid-limit-in-entra-kerberos-preview" target="_blank"&gt;Microsoft Entra Kerberos Overview&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Sun, 07 Dec 2025 07:26:57 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/windows-authentication-for-cloud-native-identities-modernizing/ba-p/4475784</guid>
      <dc:creator>sravani-saluru</dc:creator>
      <dc:date>2025-12-07T07:26:57Z</dc:date>
    </item>
    <item>
      <title>Whats new in the Backup/Restore area in SQL Server 2025</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/whats-new-in-the-backup-restore-area-in-sql-server-2025/ba-p/4474613</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Over the past several months,&amp;nbsp;we’ve&amp;nbsp;heard from countless customers who are eager for more robust options to protect, compress, and safeguard their SQL Server data. Since introducing these features in public preview, organizations of all sizes have&amp;nbsp;validated&amp;nbsp;their value in real-world workloads and provided invaluable feedback.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Following are &lt;STRONG&gt;three &lt;/STRONG&gt;“hidden gems” (as one of our customers called &amp;nbsp;them), in the Backup/Restore area we announced with SQL Server 2025. &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:278}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Backups on Secondary for Always&amp;nbsp;On&amp;nbsp;Availability Groups&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;ZSTD Compression&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, and &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Immutable Backups for Ransomware Protection&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. These advancements are now ready for production use, built around the needs and requests of the SQL Server&amp;nbsp;customers.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG style="color: rgb(30, 30, 30); font-size: 24px;"&gt;&lt;SPAN data-contrast="auto"&gt;1. Backups on Secondary for SQL Server Always On Availability Groups&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Previously in preview, this feature now reaches GA, allowing you to&amp;nbsp;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;offload backup operations to secondary replicas&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;&amp;nbsp;in Always&amp;nbsp;On&amp;nbsp;Availability Groups. This enhancement&amp;nbsp;optimizes&amp;nbsp;resource&amp;nbsp;utilization&amp;nbsp;and minimizes overhead on primary replicas, ensuring better performance for mission-critical workloads.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What’s New in GA:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Improved reliability and support for production environments.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Key Benefits:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Comprehensive support: Full, differential, and transaction log backups are now fully supported on secondary replicas—not just COPY_ONLY and transaction logs.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Reduced impact on primary replica performance.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Simplified high-availability strategies.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Learn more from the original announcement:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/introducing-backups-on-secondary-for-sql-server-always-on-availability-groups-wi/4422167" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Introducing Backups on Secondary for SQL Server Always On Availability Groups&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt; &lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;2. ZSTD Compression in SQL Server 2025&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The GA of ZSTD compression brings modern, efficient data compression to SQL Server.&amp;nbsp;ZSTD compression introduces industry-leading performance and efficiency, letting you save storage and speed up workloads.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What’s New in GA:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Full production support for ZSTD across key workloads.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Key Benefits:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Faster compression and decompression compared to legacy algorithms.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Lower storage footprint without sacrificing performance.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Choose your algorithm: ZSTD is now a standard option right alongside MS_XPRESS for row, page, and backup compression.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Tunable compression levels: Administrators can select from LOW, MEDIUM, or HIGH to balance resource use and savings.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Ideal for large-scale data environments.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Explore the preview details:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/zstd-compression-in-sql-server-2025/4415418" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;ZSTD Compression in SQL Server 2025&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;3. Backups to immutable storage: A Powerful Shield Against Ransomware&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Your backups are now safer than ever. Thanks to native support for &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;immutability with Azure Blob Storage&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, backup files can be&amp;nbsp;rendered&amp;nbsp;tamper-proof—protecting them from ransomware or even accidental deletion.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Key Benefits:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Strong defense against ransomware and malicious tampering.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Compliance with regulatory requirements for data integrity.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Peace of mind for critical backup strategies.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Read the detailed use-case and how-to: &lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuresqlblog/immutability-a-powerful-shield-against-ransomware-in-sql-environments/4427180" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Immutability: A Powerful Shield Against Ransomware in SQL Environments&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;These features collectively empower organizations to:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Optimize&amp;nbsp;performance and resource&amp;nbsp;utilization.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Reduce operational costs through efficient compression.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Strengthen security posture against evolving threats.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Get Started&amp;nbsp;Today&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;These features are available to all SQL Server 2025 customers. Ready to elevate your data protection, efficiency, and compliance posture?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Access the official SQL Server 2025 documentation for step-by-step guides&amp;nbsp;via&amp;nbsp;visit&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/sql" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Review upgrade guidance and best practices.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Explore real-world configurations and FAQs.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Upgrade now and unlock the next level of resilience, efficiency, and security for your SQL Server workloads!&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 02 Dec 2025 17:39:38 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/whats-new-in-the-backup-restore-area-in-sql-server-2025/ba-p/4474613</guid>
      <dc:creator>Dinakar-Nethi</dc:creator>
      <dc:date>2025-12-02T17:39:38Z</dc:date>
    </item>
    <item>
      <title>Step-by-Step Guide: Route Azure SQL Audit Logs to Multiple Log Analytics Workspaces</title>
      <link>https://techcommunity.microsoft.com/t5/azure-sql-blog/step-by-step-guide-route-azure-sql-audit-logs-to-multiple-log/ba-p/4473665</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Scenario:&lt;/STRONG&gt;&lt;BR /&gt;Many organizations need to route audit logs from Azure SQL Database to more than one Log Analytics workspace. For example, your security team may use Microsoft Sentinel in one workspace, while your application team analyzes logs in another. Azure now makes this possible—here’s how to set it up, and what to watch out for.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why Send Audit Logs to Multiple Workspaces?&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Separation of Duties: Security and application teams can access the logs they need, independently.&lt;/LI&gt;
&lt;LI&gt;Integration with Different Tools: Sentinel may use one workspace for SIEM, while app teams use another for analytics.&lt;/LI&gt;
&lt;LI&gt;Compliance and Regional Needs&lt;STRONG&gt;:&lt;/STRONG&gt; Some organizations must store logs in different regions or workspaces for regulatory reasons.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Step-by-Step Guide&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt; Enable Auditing to Log Analytics Workspace&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI&gt;Go to your Azure SQL Server in the Azure Portal.&lt;/LI&gt;
&lt;LI&gt;Under Security, select Auditing.&lt;/LI&gt;
&lt;LI&gt;Set the audit destination to your primary&amp;nbsp;Log Analytics workspace, Click Save.&lt;img /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Tip:&lt;/STRONG&gt; Enabling auditing here automatically creates a diagnostic setting for the selected workspace.&lt;/P&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;&lt;STRONG&gt; Add Diagnostic Settings for Additional Workspaces&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI&gt;In azure portal search for Diagnostic settings.&lt;/LI&gt;
&lt;LI&gt;Search for your subscription and master database of SQL Server to create diagnostics setting at server level&lt;/LI&gt;
&lt;LI&gt;Click + Add diagnostic setting.&lt;/LI&gt;
&lt;LI&gt;Name your setting (e.g., “AuditToAppWorkspace”).&lt;/LI&gt;
&lt;LI&gt;Under Log, select audit, select SQLSecurityAuditEvents (uncheck “DevOpsAudit” if not needed).&lt;/LI&gt;
&lt;LI&gt;Choose an additional Log Analytics workspace as the destination.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Click Save&lt;/STRONG&gt;.&lt;img /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;create new setting&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; You can repeat this step to send audit logs to as many workspaces as needed.&lt;/P&gt;
&lt;P&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;Example Use Case&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A customer uses:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Workspace A for Microsoft Sentinel (security monitoring)&lt;/LI&gt;
&lt;LI&gt;Workspace B for application analytics&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;By configuring multiple diagnostic settings, both teams receive the audit data they need—no manual exports required.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Summary&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Configuring multiple diagnostic settings allows you to send Azure SQL Database audit logs to several Log Analytics workspaces. This is essential for organizations with different teams or compliance needs. Remember:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Enable auditing first&lt;/LI&gt;
&lt;LI&gt;Add diagnostic settings for each workspace&lt;/LI&gt;
&lt;LI&gt;Monitor for cost and avoid duplicate logs&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;References:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-sql/database/auditing" target="_blank"&gt;https://learn.microsoft.com/en-us/azure/azure-sql/database/auditing&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/diagnostic-settings" target="_blank"&gt;https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/diagnostic-settings&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 28 Nov 2025 06:55:57 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-sql-blog/step-by-step-guide-route-azure-sql-audit-logs-to-multiple-log/ba-p/4473665</guid>
      <dc:creator>sravani-saluru</dc:creator>
      <dc:date>2025-11-28T06:55:57Z</dc:date>
    </item>
  </channel>
</rss>

