Condividi tramite


Crittografare un database con Transparent Data Encryption in Istanza gestita di SQL abilitata da Azure Arc

Questo articolo descrive come abilitare Transparent Data Encryption in un database creato in un'istanza gestita di SQL abilitata da Azure Arc. In questo articolo il termine istanza gestita fa riferimento a una distribuzione di Istanza gestita di SQL abilitata da Azure Arc.

Prerequisiti

Prima di procedere con questo articolo, è necessario avere un'istanza gestita di SQL abilitata dalla risorsa di Azure Arc creata e connettersi a tale istanza.

Attivare Transparent Data Encryption in un database nell'istanza gestita

L'attivazione di Transparent Data Encryption nell'istanza gestita segue gli stessi passaggi di SQL Server in locale. Seguire i passaggi descritti in Guida a Transparent Data Encryption di SQL Server.

Dopo aver creato le credenziali necessarie, eseguire il backup di tutte le credenziali appena create.

Eseguire il backup delle credenziali Transparent Data Encryption

Quando si esegue il backup delle credenziali dall'istanza gestita, le credenziali vengono archiviate all'interno del contenitore. Per archiviare le credenziali in un volume permanente, specificare il percorso di montaggio nel contenitore. Ad esempio: var/opt/mssql/data. Nell'esempio seguente viene eseguito il backup di un certificato dall'istanza gestita:

Nota

Se il comando kubectl cp viene eseguito da Windows, il comando potrebbe non riuscire quando si usano percorsi di Windows assoluti. Usare percorsi relativi o i comandi specificati di seguito.

  1. Eseguire il backup del certificato dal contenitore per /var/opt/mssql/data.

    USE master;
    GO
    
    BACKUP CERTIFICATE <cert-name> TO FILE = '<cert-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    

    Esempio:

    USE master;
    GO
    
    BACKUP CERTIFICATE MyServerCert TO FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    
  2. Copiare il certificato dal contenitore nel file system.

kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-certificate-path> > <local-certificate-path>

Esempio:

kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
  1. Copiare la chiave privata dal contenitore al file system.
 kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-private-key-path> > <local-private-key-path>

Esempio:

kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
  1. Eliminare il certificato e la chiave privata dal contenitore.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    Esempio:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

Ripristinare una credenziale Transparent Data Encryption in un'istanza gestita

Analogamente a quanto sopra, per ripristinare le credenziali, copiarle nel contenitore ed eseguire il T-SQL corrispondente in un secondo momento.

Nota

Se il comando kubectl cp viene eseguito da Windows, il comando potrebbe non riuscire quando si usano percorsi di Windows assoluti. Usare percorsi relativi o i comandi specificati di seguito.

  1. Copiare il certificato dal file system nel contenitore.
type <local-certificate-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-certificate-path>

Esempio:

type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
  1. Copiare la chiave privata dal file system nel contenitore.
type <local-private-key-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-private-key-path>

Esempio:

type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
  1. Creare il certificato usando percorsi di file da /var/opt/mssql/data.

    USE master;
    GO
    
    CREATE CERTIFICATE <certicate-name>
    FROM FILE = '<certificate-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    

    Esempio:

    USE master;
    GO
    
    CREATE CERTIFICATE MyServerCertRestored
    FROM FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    
  2. Eliminare il certificato e la chiave privata dal contenitore.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    Esempio:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

Transparent Data Encryption