Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:Database SQL di Azure
Questo articolo ti mostra come utilizzare la REGEXP_REPLACE funzione di mascheramento per definire regole di mascheramento dinamico dei dati guidate da pattern in database SQL di Azure. Il mascheramento basato su regex ti permette di mascherare dati di stringhe variabili e preservare segmenti specifici che le maschere integrate non possono esprimere.
Importante
Il mascheramento dinamico dei dati basato su regex è attualmente in anteprima pubblica per database SQL di Azure. Le funzionalità di anteprima sono fornite "così com'è" ed escluse dagli accordi di livello di servizio e dalla garanzia limitata. Usa questa funzione solo in ambienti non produttivi. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
Overview
Il mascheramento dinamico dei dati (DDM) in database SQL di Azure nasconde dinamicamente i dati sensibili nei risultati delle query prima che questi vengano inviati all'applicazione. Questa funzione riduce l'esposizione accidentale di informazioni sensibili ed elimina la necessità di aggiungere logica di mascheramento al codice applicativo.
DDM consente agli amministratori e agli sviluppatori di database di definire centralmente regole di mascheramento per colonne sensibili nel database. Gli utenti non privilegiati vedono valori offuscati, mentre i dati effettivi rimangono intatti in archiviazione.
Limitazioni delle funzioni di mascheramento integrate
database SQL di Azure fornisce diverse funzioni di mascheramento integrate: default(), email(), random(), partial(), e datetime(). La maggior parte di queste funzioni applica schemi rigidi che non puoi personalizzare e non sono flessibili per dati a lunghezza variabile.
Ad esempio, la maschera integrata email() produce sempre un formato come aXXX@xxxx.com per un indirizzo email come alice.johnson@example.com. Questa maschera espone solo la prima lettera del nome utente e oscura il nome di dominio. L'output fisso non è utile quando devi mantenere il nome di dominio per i flussi di lavoro aziendali.
Cos'è il mascheramento a base di regex?
Il DDM basato su regex introduce REGEXP_REPLACE come nuova funzione di mascheramento. Utilizzando questa funzione, puoi creare maschere personalizzate guidate da pattern per dati a stringa come numeri di telefono, indirizzi email e numeri di identificazione.
Regex ti permette di definire con precisione quali sottostringhe rivelare o oscurare. Le funzioni integrate non possono esprimere questo tipo di pattern a lunghezza variabile. Questa funzionalità è utile quando si lavora con schemi di dati strutturati come email, numeri di telefono o identificatori. In questi casi, spesso è necessario preservare segmenti visibili specifici mentre si mascherano le parti sensibili, e le maschere integrate sono troppo rigide per i flussi di lavoro aziendali.
Note
- Il modello di autorizzazione è rimasto invariato. Questo miglioramento non introduce nuovi permessi.
- Configuri le maschere regex solo in T-SQL. Il portale Azure non supporta la configurazione della maschera regex in questa versione.
Sintassi
Applica una maschera regex durante la creazione della tabella:
column_name <data_type> MASKED WITH (FUNCTION = 'REGEXP_REPLACE("<pattern_expression>", "<string_replacement>")')
Aggiungi una maschera regex a una colonna esistente:
ALTER TABLE <schema_name>.<table_name>
ALTER COLUMN <column_name>
ADD MASKED WITH (FUNCTION = 'REGEXP_REPLACE("<pattern_expression>", "<string_replacement>")');
Argomenti
pattern_expression
L'espressione regolare da valutare rispetto al valore della colonna. La lunghezza massima è di 8.000 byte.
string_replacement
La stringa di sostituzione applicata a ogni corrispondenza di pattern_expression.
Note
Quando la usi REGEXP_REPLACE come funzione di mascheramento, funzionano solo gli argomenti pattern_expression e string_replacement . La funzione nativa T-SQL REGEXP_REPLACE supporta anche argomenti di inizio, occorrenza e flag , ma non puoi sovrascriverli quando la usi come funzione di mascheramento. I valori fissi sono start = 1, occorrenza = 0 (sostituire tutte le corrispondenze), e flag = 'c' (con distinzione tra maiuscole e minuscole).
La REGEXP_REPLACE funzione di mascheramento supporta colonne di tipo chardi dato , nchar, varchar, o nvarchar, e tipi LOB (varchar(max) e nvarchar(max)) fino a 2 MB.
Tutorial: Configura il mascheramento dinamico dei dati basato su regex
Il seguente tutorial ti mostra come creare maschere regex, inserire dati di campione e verificare l'output mascherato rispetto a quello smascherato per diversi utenti.
Passo 1: Crea una tabella con maschere regex
La seguente istruzione crea una CustomerDetails tabella con due colonne mascherate regex:
-
Maschera telefonica: Cattura il codice paese (ad esempio,
+1,+44,+91) e sostituisce le cifre rimanenti conxxxx. Questo preserva il codice paese per contestualizzare. -
Mascheramento dell'email: Sostituisce la parte del nome utente (prima di
@) con*****, mantenendo il nome di dominio. Ad esempio,alice.johnson@example.comdiventa*****@example.com.
-- Drop the CustomerDetails table if it exists
DROP TABLE IF EXISTS Data.CustomerDetails;
CREATE TABLE Data.CustomerDetails (
ID INT IDENTITY(1,1) PRIMARY KEY,
Name varchar(30),
Phone_Number varchar(30)
MASKED WITH (FUNCTION = 'REGEXP_REPLACE(
"(\+\d{1,3})(?:[ -.]?\d){7,14}",
"(\1)-xxxx")'),
Email varchar(255)
MASKED WITH (FUNCTION = 'REGEXP_REPLACE(
"([a-zA-Z0-9._%+-]+)(@+)([a-zA-Z0-9.-]+)(\.)(\w)",
"*****\2\3\4\5")')
);
Passo 2: Inserire dati campioni
INSERT INTO Data.CustomerDetails (Name, Phone_Number, Email) VALUES
('Alice Johnson', '+1 202-555-0123', 'alice.johnson@example.com'),
('Bob Smith', '+1 415-555-0198', 'bob.smith@contoso.com'),
('Oliver Bennett', '+44 7700 900123', 'oliver.bennett@example.co.uk'),
('Amelia Thompson', '+44 7700 900456', 'amelia.thompson@example.co.uk'),
('Rajeev Mehra', '+91 90000 12345', 'rajeev.mehra@adventure-works.net'),
('John Miller', '+91 98888 45678', 'jon.miller@contoso.net'),
('Lukas Mueller', '+49 151 23456789', 'lukas.mueller@example.de'),
('Daniel Tan', '+65 8123 4567', 'daniel.tan@example.sg'),
('Hiroshi Tanaka', '+81 90 1234 5678', 'hiroshi.tanaka@example.jp');
Passo 3: Interroga come utente privilegiato
Gli utenti con sysadmin, db_owner, o permesso esplicito UNMASK vedono sempre i dati effettivi.
-- As sysadmin or db_owner, you see the real data
SELECT * FROM Data.CustomerDetails;
Risultato atteso: tutti i numeri di telefono e le email appaiono integralmente (ad esempio, +1 202-555-0123, alice.johnson@example.com).
Passo 4: Interroga come utente non privilegiato
Crea un utente di test senza UNMASK permesso e consulta la tabella.
-- Create a test user without UNMASK permission
CREATE USER SupportEngineer WITHOUT LOGIN;
-- Grant SELECT permission on CustomerDetails to SupportEngineer
GRANT SELECT ON Data.CustomerDetails TO SupportEngineer;
-- Query the table as the nonprivileged user
EXECUTE AS USER = 'SupportEngineer';
SELECT * FROM Data.CustomerDetails;
REVERT;
Risultato atteso: I numeri di telefono mostrano solo il prefisso paese (ad esempio, (+1)-xxxx), e le email nascondono il nome utente (ad esempio, *****@example.com).
Passo 5: Concedi UNMASK ed esegui nuovamente la query
Dopo aver assegnato UNMASK, lo stesso utente può ora vedere i valori completi non mascherati. Questo mostra come funziona il controllo degli accessi basato sui permessi di DDM.
-- Grant UNMASK permission to the test user
GRANT UNMASK ON Data.CustomerDetails TO SupportEngineer;
-- Re-run the query as the same user - now sees unmasked data
EXECUTE AS USER = 'SupportEngineer';
SELECT * FROM Data.CustomerDetails;
REVERT;
Aggiungi una maschera regex a una colonna esistente
Per aggiungere una maschera regex a una colonna esistente, usare ALTER TABLE:
ALTER TABLE Data.CustomerDetails
ALTER COLUMN Phone_Number
ADD MASKED WITH (FUNCTION = 'REGEXP_REPLACE(
"(\+\d{1,3})(?:[ -.]?\d){7,14}",
"(\1)-xxxx")');
Verifica la politica di mascheramento tramite metadati
Usa la sys.masked_columns vista di sistema per ispezionare le mascherine configurate. Questa visione include REGEXP_REPLACE le definizioni delle maschere.
SELECT c.name,
tbl.name AS table_name,
c.is_masked,
c.masking_function
FROM sys.masked_columns AS c
JOIN sys.tables AS tbl
ON c.[object_id] = tbl.[object_id]
WHERE is_masked = 1;
Considerations
- Le maschere regex dipendono dal pattern. Valida i tuoi modelli regex su dati rappresentativi prima di applicarli alle colonne di produzione.
- I valori senza corrispondenza restano non mascherati. Un pattern non corrispondente restituisce dati grezzi agli utenti non privilegiati, il che può esporre informazioni sensibili.
- Testa accuratamente con dati rappresentativi. Copri casi limite come valori nulli, stringhe vuote e formati atipici che il tuo regex potrebbe non rilevare.
- Da usare in ambienti non produttivi durante l'anteprima. Valida accuratamente prima di considerare questa funzione per i carichi di lavoro in produzione.
Contenuti correlati
- Maschera dati dinamica
- Inizia con il mascheramento dinamico dei dati SQL Database con il portale Azure
- Permessi di database GRANT (Transact-SQL)
- sys.masked_columns (Transact-SQL)
- ALTER TABLE (Transact-SQL)
- REGEXP_REPLACE (Transact-SQL)
- Espressioni regolari (SQL Server)
- Funzioni delle espressioni regolari (Transact-SQL)