Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
(Facoltativo) Creare uno schema (utenti esperti)
La creazione manuale di uno schema è riservata agli utenti esperti.
Di seguito è riportata una descrizione del formato di file dello schema JSON per i file di input con o senza intestazioni di colonna. Gli utenti esperti possono scrivere o modificare direttamente lo schema, se lo desiderano.
Nota
Il client di crittografia C3R può aiutarti a creare uno schema tramite il processo interattivo descritto in Esempio: generare uno schema di crittografia con sealed, fingerprinte cleartext columns o tramite la creazione di un modello di stub.
Schemi di tabelle mappati e posizionali
La sezione seguente descrive due tipi di schemi di tabelle:
-
Schema di tabella mappato: questo schema viene utilizzato per crittografare i file.csv con una riga di intestazione e Apache Parquet file.
-
Schema della tabella posizionale: questo schema viene utilizzato per crittografare i file.csv senza una riga di intestazione.
Il client di crittografia C3R può crittografare un file tabulare per una collaborazione. A tale scopo, deve disporre di un file di schema corrispondente che specifichi in che modo l'output crittografato deve essere derivato dall'input.
Il client di crittografia C3R può aiutare a generare uno schema per un INPUT
file eseguendo il comando schema del client di crittografia C3R nella riga di comando. Un esempio di comando è. java
-jar c3r-cli.jar schema --interactive INPUT
Lo schema specifica le seguenti informazioni:
-
Quali colonne di origine vengono mappate a quali colonne trasformate nel file di output tramite i nomi di intestazione (schemi mappati) o la posizione (schemi posizionali)
-
Quali colonne di destinazione devono rimanere cleartext
-
Per quali colonne di destinazione devono essere crittografate SELECT queries
-
Per quali colonne di destinazione devono essere crittografate JOIN queries
Queste informazioni sono codificate in un file di schema JSON specifico della tabella, che consiste in un singolo oggetto il cui headerRow
campo è un valore booleano. Il true
valore deve essere per Parquet file e file.csv con una riga di intestazione e altro. false
Schema della tabella mappata
Lo schema mappato ha la forma seguente.
{ "headerRow": true, "columns": [ { "sourceHeader": STRING, "targetHeader": STRING, "type": TYPE, "pad": PAD }, ... ] }
In caso headerRow
affermativotrue
, il campo successivo nell'oggetto ècolumns
, che contiene una matrice di schemi di colonne che mappano le intestazioni di origine alle intestazioni di destinazione (ovvero oggetti JSON che descrivono cosa devono contenere le colonne di output).
-
sourceHeader
— Il nome dell'STRING
intestazione della colonna di origine da cui derivano i dati.Nota
La stessa colonna di origine può essere utilizzata per più colonne di destinazione.
Una colonna del file di input non elencata in
sourceHeader
nessun punto dello schema non viene visualizzata nel file di output. -
targetHeader
— Il nome dell'STRING
intestazione della colonna corrispondente nel file di output.Nota
Questo campo è facoltativo per gli schemi mappati. Se questo campo viene omesso,
sourceHeader
viene riutilizzato come nome dell'intestazione nell'output. O_sealed
viene aggiunto_fingerprint
o se la colonna di output è una fingerprint colonna o sealed colonna rispettivamente. -
type
— La colonnaTYPE
di destinazione nel file di output. Cioè, una dellecleartext
due ofingerprint
dipende da come la colonna verrà utilizzata nella collaborazione.sealed
-
pad
— Un campo di un oggetto dello schema a colonne che è presente solo quandoTYPE
èsealed
. Il valore corrispondente diPAD
è un oggetto che descrive come aggiungere i dati prima di essere crittografati.{ "type": PAD_TYPE, "length": INT }
Per specificare il padding di pre-crittografia,
type
length
vengono utilizzati come segue:-
PAD_TYPE
asnone
: non verrà applicato alcun riempimento ai dati della colonna e illength
campo non è applicabile (ovvero omesso). -
PAD_TYPE
asfixed
— I dati della colonna vengono aggiunti al numero di byte specificatolength
. -
PAD_TYPE
asmax
— I dati della colonna vengono aggiunti alla dimensione della lunghezza in byte del valore più lungo più un byte aggiuntivo.length
-
Di seguito è riportato un esempio di schema mappato, con una colonna di ogni tipo.
{ "headerRow": true, "columns": [ { "sourceHeader": "FullName", "targetHeader": "name", "type": "cleartext" }, { "sourceHeader": "City", "targetHeader": "city_sealed", "type": "sealed", "pad": { "type": "max", "length": 16 } }, { "sourceHeader": "PhoneNumber", "targetHeader": "phone_number_fingerprint", "type": "fingerprint" }, { "sourceHeader": "PhoneNumber", "targetHeader": "phone_number_sealed", "type": "sealed", "pad": { "type": "fixed", "length": 20 } } ] }
Come esempio più complesso, quello che segue è un esempio di file.csv con intestazioni.
FirstName,LastName,Address,City,State,PhoneNumber,Title,Level,Notes Jorge,Souza,12345 Mills Rd,Anytown,SC,703-555-1234,CEO,10, Paulo,Santos,0 Street,Anytown,MD,404-555-111,CIO,9,This is a really long note that could really be a paragraph Mateo,Jackson,1 Two St,Anytown,NY,304-555-1324,COO,9,"" Terry,Whitlock4 N St,Anytown,VA,407-555-8888,EA,7,Secret notes Diego,Ramirez,9 Hollows Rd,Anytown,VA,407-555-1222,SDE I,4,null John,Doe,8 Hollows Rd,Anytown,VA,407-555-4321,SDE I,4,Jane's younger brother Jane,Doe,8 Hollows Rd,Anytown,VA,407-555-4322,SDE II,5,John's older sister
Nel seguente esempio di schema mappato, le colonne e sono colonneFirstName
. LastName
cleartext
La State
colonna viene crittografata come fingerprint
colonna e come sealed
colonna con una spaziatura di. none
Le colonne rimanenti vengono omesse.
{ "headerRow": true, "columns": [ { "sourceHeader": "FirstName", "targetHeader": "GivenName", "type": "cleartext" }, { "sourceHeader": "LastName", "targetHeader": "Surname", "type": "cleartext" }, { "sourceHeader": "State", "targetHeader": "State_Join", "type": "fingerprint" }, { "sourceHeader": "State", "targetHeader": "State", "type": "sealed", "pad": { "type": "none" } } ] }
Di seguito è riportato il file.csv che risulta dallo schema mappato.
givenname,surname,state_fingerprint,state John,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:FQ3n3Ahv9BQQNWQGcugeHzHYzEZE1vapHa2Uu4SRgSAtZ3qObjPA4TcsHt+BOkMKBcnHWI13BeGG/SBqmj7vKpI= Paulo,Santos,01:hmac:CHF4eIrtTNgAooU9v4h9Qjc+txBnMidQTjdjWuaDTTA=,01:enc:KZ5n5GtaXACco65AXk48BQO2durDNR2ULc4YxmMC8NaZZKKJiksU1IwFadAvV4iBQ1Bus5TU5c4biez3bilfTY8= Mateo,Jackson,01:hmac:iIRnjfNBzryusIJ1w35lgNzeY1RQ1bSfq6PDHW8Xrbk=,01:enc:mLKpS5HIOSgphdEsrzhEdIp/eN9nBO2gAbIygt4OFn4LalYn9Xyj/XUWXlmn8zFe2T4kyDTD8kGOvpQEUGxAUFk= Diego,Ramirez,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:rmZhT98Zm+IIGw1UTjMIJP4IrW/AAltBLMXcHvnYfRgmWP623VFQ6aUnhsb2MDqEw4G5Uwg5rKKZepUxx5uKbfk= Jorge,Souza,01:hmac:3BxJdXiFFyZ8HBbYNqqEhBVqhNOd7s2ZiKUe7QiTyo8=,01:enc:vVaqWC1VRbhvkf8gnuR7q0zxVPcvEjuaglYz34+KyyLcGZLpAmsDUc6wZ07f2KvHoOySqRsEU7dG1QfdHYcTSWE= Terry,Whitlock01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:3c9VEWbODO/xbQjdGuccLvI7oZTBdPU+SyrJIyr2kudfAxbuMQ2uRdU/q7rbgyJjxZS8M2U35ILJf/lDgTyg7cM= Jane,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:9RWv46YLveykeNZ/G0NdlYFg+AVdOnu05hHyAYTQkPLHnyX+0/jbzD/g9ZT8GCgVE9aB5bV4ooJIXHGBVMXcjrQ=
Schema della tabella posizionale
Lo schema posizionale ha la forma seguente.
{ "headerRow": false, "columns": [ [ { "targetHeader": STRING, "type": TYPE, "pad": PAD }, { "targetHeader": STRING, "type": TYPE, "pad": PAD } ], [], ... ] }
In caso headerRow
affermativofalse
, il campo successivo nell'oggetto ècolumns
, che contiene una matrice di voci. Ogni voce è a sua volta una matrice di zero o più schemi di colonne posizionali (nessun sourceHeader
campo), che sono oggetti JSON che descrivono cosa deve contenere l'output.
-
sourceHeader
— Il nome dell'STRING
intestazione della colonna di origine da cui derivano i dati.Nota
Questo campo deve essere omesso negli schemi posizionali. Negli schemi posizionali, la colonna di origine viene dedotta dall'indice corrispondente della colonna nel file di schema.
-
targetHeader
— Il nome dell'STRING
intestazione della colonna corrispondente nel file di output.Nota
Questo campo è obbligatorio per gli schemi posizionali.
-
type
— La colonnaTYPE
di destinazione nel file di output. Cioè, una dellecleartext
due ofingerprint
dipende da come la colonna verrà utilizzata nella collaborazione.sealed
-
pad
— Un campo di un oggetto dello schema a colonne che è presente solo quandoTYPE
èsealed
. Il valore corrispondente diPAD
è un oggetto che descrive come aggiungere i dati prima di essere crittografati.{ "type": PAD_TYPE, "length": INT }
Per specificare il padding di pre-crittografia,
type
length
vengono utilizzati come segue:-
PAD_TYPE
asnone
: non verrà applicato alcun riempimento ai dati della colonna e illength
campo non è applicabile (ovvero omesso). -
PAD_TYPE
asfixed
— I dati della colonna vengono aggiunti al numero di byte specificatolength
. -
PAD_TYPE
asmax
— I dati della colonna vengono aggiunti alla dimensione della lunghezza in byte del valore più lungo più un byte aggiuntivo.length
Nota
fixed
è utile se si conosce in anticipo il limite superiore della dimensione in byte dei dati della colonna. Viene generato un errore se i dati in quella colonna sono più lunghi di quellilength
specificati.max
è utile quando la dimensione esatta dei dati di input non è nota perché funziona indipendentemente dalla dimensione dei dati. Tuttavia,max
richiede tempi di elaborazione aggiuntivi perché crittografa i dati due volte.max
crittografa i dati una volta quando vengono letti nel file temporaneo e una volta dopo che è nota l'immissione dei dati più lunga nella colonna.Inoltre, la lunghezza del valore più lungo non viene salvata tra le chiamate del client. Se prevedi di crittografare i dati in batch o di crittografare periodicamente nuovi dati, tieni presente che la lunghezza del testo cifrato risultante potrebbe variare da un batch all'altro.
-
Di seguito è riportato un esempio di schema posizionale.
{ "headerRow": false, "columns": [ [ { "targetHeader": "name", "type": "cleartext" } ], [ { "targetHeader": "city_sealed", "type": "sealed", "pad": { "type": "max", "length": 16 } } ], [ { "targetHeader": "phone_number_fingerprint", "type": "fingerprint" }, { "targetHeader": "phone_number_sealed", "type": "sealed", "pad": { "type": "fixed", "length": 20 } } ] ] }
Come esempio complesso, quello che segue è un esempio di file.csv se non aveva la prima riga con le intestazioni.
Jorge,Souza,12345 Mills Rd,Anytown,SC, 703 -555 -1234,CEO, 10, Paulo,Santos, 0 Street,Anytown,MD, 404-555-111,CIO, 9,This is a really long note that could really be a paragraph Mateo,Jackson, 1 Two St,Anytown,NY, 304-555-1324,COO, 9, "" Terry,Whitlock, 4 N St,Anytown,VA, 407-555-8888,EA, 7,Secret notes Diego,Ramirez, 9 Hollows Rd,Anytown,VA, 407-555-1222,SDE I, 4,null John,Doe, 8 Hollows Rd,Anytown,VA, 407-555-4321,SDE I, 4,Jane's younger brother Jane,Doe, 8 Hollows Rd,Anytown,VA, 407-555-4322,SDE II, 5,John's older sister
Lo schema posizionale ha la forma seguente.
{ "headerRow": false, "columns": [ [ { "targetHeader": "GivenName", "type": "cleartext" } ], [ { "targetHeader": "Surname", "type": "cleartext" } ], [], [], [ { "targetHeader": "State_Join", "type": "fingerprint" }, { "targetHeader": "State", "type": "sealed", "pad": { "type": "none" } } ], [], [], [], [] ] }
Lo schema precedente produce il seguente file di output con una riga di intestazione contenente le intestazioni di destinazione specificate.
givenname,surname,state_fingerprint,state Mateo,Jackson,01:hmac:iIRnjfNBzryusIJ1w35lgNzeY1RQ1bSfq6PDHW8Xrbk=,01:enc:ENS6QD3cMVl9vQEGfe9MNWfR0UOupchswZFr94zOMG5jY/Q8m/Y5SA89dJwKpT5rGPp8e36h6klwDoslpFzGvU0= Jorge,Souza,01:hmac:3BxJdXiFFyZ8HBbYNqqEhBVqhNOd7s2ZiKUe7QiTyo8=,01:enc:LKo0zirq2++XEIIIMNRjAsGMdyWUDwYaum0B+IFP+rUf1BNeZDJjtFe1Z+zbZfXQWwJy52Rt7HqvAb2WIK1oMmk= Paulo,Santos,01:hmac:CHF4eIrtTNgAooU9v4h9Qjc+txBnMidQTjdjWuaDTTA=,01:enc:MyQKyWxJ9kvK1xDQQtXlUNwv3F+yrBRr0xrUY/1BGg5KFgOn9pK+MZ7g+ZNqZEPcPz4lht1u0t/wbTaqzOCLXFQ= Jane,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:Pd8sbITBfb0/ttUB4svVsgoYkDfnDvgkvxzeci0Yxq54rLSwccy1o3/B50C3cpkkn56dovCwzgmmPNwrmCmYtb4= Terry,Whitlock01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:Qmtzu3B3GAXKh2KkRYTiEAaMopYedsSdF2e/ADUiBQ9kv2CxKPzWyYTD3ztmKPMka19dHre5VhUHNpO3O+j1AQ8= Diego,Ramirez,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:ysdg+GHKdeZrS/geBIooOEPLHG68MsWpx1dh3xjb+fG5rmFmqUcJLNuuYBHhHAlxchM2WVeV1fmHkBX3mvZNvkc= John,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:9uX0wZuO7kAPAx+Hf6uvQownkWqFSKtWS7gQIJSe5aXFquKWCK6yZN0X5Ea2N3bn03Uj1kh0agDWoiP9FRZGJA4=