Sicurezza delle tabelle temporali

Si applica a: SQL Server 2016 (13.x) e versioni successive database SQL di Azure AzureSQL Managed InstanceSQL database in Microsoft Fabric

Per proteggere le tabelle temporali, devi comprendere i principi di sicurezza che vi si applicano. Dopo aver compreso questi principi, puoi applicare la sicurezza alle istruzioni CREATE TABLE, ALTER TABLE e SELECT.

Principi di sicurezza

La tabella seguente descrive i principi di sicurezza che riguardano le tabelle temporali:

Principio Description
Abilitare/disabilitare il controllo delle versioni di sistema richiede i privilegi più elevati per gli oggetti interessati Per abilitare e disabilitare SYSTEM_VERSIONING è necessaria l’autorizzazione CONTROL sia per la tabella corrente che per quella di cronologia.
I dati di cronologia non possono essere modificati direttamente Quando SYSTEM_VERSIONING è ON, gli utenti non possono modificare i dati della cronologia, indipendentemente dai loro permessi sulla tabella corrente o sulla tabella storica. Questa limitazione comprende sia le modifiche dei dati che quelle dello schema. 1
Per l'esecuzione di query sui dati di cronologia è richiesta l'autorizzazione SELECT per la tabella di cronologia Un utente con autorizzazione SELECT per la tabella corrente non dispone automaticamente dell'autorizzazione SELECT per la tabella di cronologia.
Il controllo rileva le operazioni che influiscono sulla tabella di cronologia in modi specifici Le impostazioni di controllo della tabella corrente non vengono applicate automaticamente alla tabella di cronologia. Devi abilitare esplicitamente l'audit per la tabella storica. Dopo averlo abilitato, l'audit sulla tabella di cronologia cattura tutti i tentativi diretti di accesso ai dati, indipendentemente dal fatto che abbiano successo o meno.

SELECT con l'estensione della query temporale mostra che l'operazione ha influenzato la tabella storica.

CREATE/ALTER la tabella temporale rivela che il controllo delle autorizzazioni viene eseguito anche sulla tabella cronologica. Il file di controllo contiene record aggiuntivi per la tabella di cronologia.

Le operazioni di manipolazione del linguaggio dati (DML) sulla tabella corrente rivelano che l'operazione ha influenzato la tabella storica, ma additional_information fornisce il contesto necessario (DML è stato il risultato di SYSTEM_VERSIONING).

1 Se hai ALTER il permesso sulla tabella corrente e sulla tabella storica, e inserisci una colonna nella tabella corrente, anche la colonna associata nella tabella storica viene eliminata, anche se SYSTEM_VERSIONING è ON.

Eseguire operazioni sullo schema

Quando SYSTEM_VERSIONING è impostato su ON, le operazioni di modifica dello schema sono limitate.

Operazioni non autorizzate ALTER SCHEMA

Operation Tabella corrente Tabella di cronologia
DROP TABLE Disallowed Disallowed
ALTER TABLE...SWITCH PARTITION Solo SWITCH IN (si veda Partizioni con tabelle temporali) Solo SWITCH OUT (si veda Partizioni con tabelle temporali)
ALTER TABLE...DROP PERIOD Disallowed N/A
ALTER TABLE...ADD PERIOD N/A Disallowed

Operazioni consentite ALTER TABLE

Operation Current History
ALTER TABLE...REBUILD Consentito (indipendentemente) Consentito (indipendentemente)
CREATE INDEX Consentito (indipendentemente) Consentito (indipendentemente)
CREATE STATISTICS Consentito (indipendentemente) Consentito (indipendentemente)

Sicurezza dell'istruzione CREATE per le tabelle temporali

Feature Creare una nuova tabella di cronologia Riutilizzare una tabella di cronologia esistente
Autorizzazione richiesta CREATE TABLE autorizzazione nel database

ALTER autorizzazione sugli schemi in cui si creano le tabelle correnti e cronologiche
CREATE TABLE autorizzazione nel database

ALTER Permesso sullo schema dove crei la tabella corrente.

Autorizzazione CONTROL nella tabella di cronologia specificata come parte dell'istruzione CREATE TABLE per la creazione della tabella temporale.
Audit Dal controllo risulta che gli utenti hanno tentato di creare due oggetti. L'operazione potrebbe fallire per mancanza di permessi per creare una tabella nel database, o per mancanza di permessi per modificare gli schemi di entrambe le tabelle. Il controllo mostra che la tabella temporale è stata creata. L'operazione potrebbe non riuscire a causa della mancanza di autorizzazioni per creare una tabella nel database, a causa della mancanza di autorizzazioni per la modifica dello schema per la tabella temporale o a causa della mancanza di autorizzazioni per la tabella di cronologia.

Sicurezza della dichiarazione ALTER della tabella SET temporale (SYSTEM_VERSIONING)

Feature Creare una nuova tabella di cronologia Riutilizzare una tabella di cronologia esistente
Autorizzazione richiesta Autorizzazione CONTROL nel database.

Autorizzazione CREATE TABLE nel database.

ALTER Permesso sugli schemi dove crei la tabella storica.
CONTROL Permesso sulla tabella originale che modifichi.

Autorizzazione CONTROL nella tabella di cronologia specificata come parte dell'istruzione ALTER TABLE.
Audit Il controllo indica che la tabella temporale è stata modificata e contemporaneamente è stata creata la tabella di cronologia. Questa operazione potrebbe fallire a causa della mancanza di permessi per creare una tabella nel database, della mancanza di permessi per modificare lo schema della tabella storica o della mancanza di permessi per modificare la tabella temporale. Il controllo mostra che la tabella temporale è stata modificata, ma l'operazione ha richiesto l'accesso alla tabella di cronologia. L'operazione può non riuscire a causa della mancanza di autorizzazioni per la tabella di cronologia o per la tabella corrente.

Sicurezza dell'istruzione SELECT

L'autorizzazione SELECT rimane invariata per le istruzioni SELECT che non influiscono sulla tabella di cronologia. Per le istruzioni SELECT che modificano la tabella della cronologia, sono necessarie le autorizzazioni SELECT sia sulla tabella corrente sia sulla tabella della cronologia.