Sicurezza di una tabella temporale

Si applica a: SQL Server 2016 (13.x) e versioni successive Database SQL di Azure Istanza gestita di SQL di Azure

Per comprendere il tema della sicurezza in riferimento alle tabelle temporali, si devono conoscere i principi di sicurezza che riguardano le tabelle temporali. Dopo aver compreso questi principi è possibile procedere approfondendo il tema della sicurezza in relazione 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 Descrizione
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 di cronologia indipendentemente dalle autorizzazioni effettive per la tabella corrente o di cronologia. 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. Il controllo deve essere abilitato in modo esplicito per la tabella di cronologia. Dopo l'abilitazione, il controllo sulla tabella di cronologia acquisisce regolarmente tutti i tentativi diretti di accesso ai dati (indipendentemente dal fatto che siano riusciti o meno).

SELECT con l'estensione per query temporali mostra che la tabella di cronologia è stata interessata da tale operazione.

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

Le operazioni DML sulla tabella corrente indicano che la tabella di cronologia è stata interessata, ma additional_information fornisce il contesto necessario (DML risultante da SYSTEM_VERSIONING).

1 Se si dispone dell'autorizzazione ALTER per la tabella corrente e la tabella di cronologia e si rilascia una colonna nella tabella corrente, è eliminata anche la colonna associata nella tabella di cronologia, anche se SYSTEM_VERSIONING è ON.

Eseguire operazioni sullo schema

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

Operazioni ALTER sullo schema non consentite

Operazione Tabella corrente Tabella di cronologia
DROP TABLE Non consentito Non consentito
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 Non consentito N/D
ALTER TABLE...ADD PERIOD N/D Non consentito

Operazioni ALTER TABLE consentite

Operazione Corrente Cronologia
ALTER TABLE...REBUILD Consentita (in modo indipendente) Consentita (in modo indipendente)
CREATE INDEX Consentita (in modo indipendente) Consentita (in modo indipendente)
CREATE STATISTICS Consentita (in modo indipendente) Consentita (in modo indipendente)

Sicurezza dell'istruzione CREATE per le tabelle temporali

Funzionalità Creare una nuova tabella di cronologia Riutilizzare una tabella di cronologia esistente
È necessaria l'autorizzazione Autorizzazione CREATE TABLE nel database

Autorizzazione ALTER negli schemi in cui vengono create le tabelle corrente e di cronologia
Autorizzazione CREATE TABLE nel database

Autorizzazione ALTER nello schema in cui verrà creata la tabella corrente.

Autorizzazione CONTROL nella tabella di cronologia specificata come parte dell'istruzione CREATE TABLE per la creazione della tabella temporale.
Controllo Dal controllo risulta che gli utenti hanno tentato di creare due oggetti. L'operazione potrebbe non riuscire a causa della mancanza di autorizzazioni per creare una tabella nel database o a causa della mancanza di autorizzazioni per la modifica degli schemi per 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 dell'istruzione ALTER SET (SYSTEM_VERSIONING ON/OFF) per le tabelle temporali

Funzionalità Creare una nuova tabella di cronologia Riutilizzare una tabella di cronologia esistente
È necessaria l'autorizzazione Autorizzazione CONTROL nel database.

Autorizzazione CREATE TABLE nel database.

Autorizzazione ALTER negli schemi in cui viene creata la tabella di cronologia.
Autorizzazione CONTROL nella tabella originale modificata.

Autorizzazione CONTROL nella tabella di cronologia specificata come parte dell'istruzione ALTER TABLE.
Controllo Il controllo indica che la tabella temporale è stata modificata e contemporaneamente è stata creata la tabella di cronologia. 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 di cronologia o a causa della mancanza di autorizzazioni per la modifica della 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 è invariata per le istruzioni SELECT senza effetti sulla tabella di cronologia. Per le istruzioni SELECT che interessano la tabella di cronologia, l'autorizzazione SELECT è richiesta sia per la tabella corrente che per la tabella di cronologia.