Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
(Facultatif) Créez un schéma (utilisateurs avancés)
La création manuelle d'un schéma est réservée aux utilisateurs expérimentés.
Vous trouverez ci-dessous une description du format de fichier de JSON schéma pour les fichiers d'entrée avec ou sans en-têtes de colonne. Les utilisateurs avancés peuvent directement écrire ou modifier le schéma s'ils le souhaitent.
Note
Le client de chiffrement C3R peut vous aider à créer un schéma par le biais du processus interactif décrit dans Exemple : génération d'un schéma de chiffrement avec des cleartext colonnes sealedfingerprint, et ou par la création d'un modèle de stub.
Schémas de tables cartographiées et positionnelles
La section suivante décrit deux types de schémas de table :
-
Schéma de table mappé — Ce schéma est utilisé pour chiffrer les fichiers .csv avec une ligne d'en-tête et des fichiers. Apache Parquet
-
Schéma de table positionnelle — Ce schéma est utilisé pour chiffrer des fichiers .csv sans ligne d'en-tête.
Le client de chiffrement C3R peut chiffrer un fichier tabulaire pour une collaboration. Pour ce faire, il doit disposer d'un fichier de schéma correspondant qui indique comment la sortie cryptée doit être dérivée de l'entrée.
Le client de chiffrement C3R peut aider à générer un schéma pour un INPUT
fichier en exécutant la commande C3R encryption client schema sur la ligne de commande. Voici un exemple de commandejava
-jar c3r-cli.jar schema --interactive INPUT
.
Le schéma indique les informations suivantes :
-
Quelles colonnes source correspondent à quelles colonnes transformées dans le fichier de sortie par le biais de leur nom d'en-tête (schémas mappés) ou de leur position (schémas positionnels)
-
Quelles colonnes cibles doivent rester cleartext
-
Quelles colonnes cibles doivent être cryptées pour les SELECT requêtes
-
Quelles colonnes cibles doivent être cryptées pour les JOIN requêtes
Ces informations sont codées dans un fichier de JSON schéma spécifique à une table, composé d'un seul objet dont headerRow
le champ est une valeur booléenne. La valeur doit être true
pour Parquet les fichiers et les fichiers .csv avec une ligne d'en-tête, et false
sinon.
Schéma de table mappé
Le schéma mappé a la forme suivante.
{ "headerRow": true, "columns": [ { "sourceHeader": STRING, "targetHeader": STRING, "type": TYPE, "pad": PAD }, ... ] }
Si tel headerRow
est le castrue
, le champ suivant de l'objet contient un tableau de schémas de colonnes qui mappent les en-têtes source aux en-têtes cibles (c'est-à-dire des JSON objets décrivant ce que les colonnes de sortie doivent contenir). columns
-
sourceHeader
— Le nom d'STRING
en-tête de la colonne source dont les données sont dérivées.Note
La même colonne source peut être utilisée pour plusieurs colonnes cibles.
Une colonne du fichier d'entrée qui n'est répertoriée
sourceHeader
nulle part dans le schéma n'apparaît pas dans le fichier de sortie. -
targetHeader
— Le nom d'STRING
en-tête de la colonne correspondante dans le fichier de sortie.Note
Ce champ est facultatif pour les schémas mappés. Si ce champ est omis, il
sourceHeader
est réutilisé comme nom d'en-tête dans la sortie. L'_fingerprint
un ou l'autre_sealed
est ajouté si la colonne de sortie est une fingerprint colonne ou une sealed colonne respectivement. -
type
— CeluiTYPE
de la colonne cible dans le fichier de sortie. C'est-à-dire l'une des optionscleartext
oufingerprint
selon la manière dont la colonne sera utilisée dans le cadre de la collaboration.sealed
-
pad
— Champ d'un objet de schéma de colonne qui n'est présent que lorsqueTYPE
c'est le cassealed
. La valeur correspondante dePAD
est un objet qui décrit la manière dont les données doivent être remplies avant d'être cryptées.{ "type": PAD_TYPE, "length": INT }
Pour spécifier le rembourrage avant le chiffrement,
type
length
ils sont utilisés comme suit :-
PAD_TYPE
asnone
— Aucun remplissage ne sera appliqué aux données de la colonne et lelength
champ n'est pas applicable (c'est-à-dire omis). -
PAD_TYPE
asfixed
— Les données de la colonne sont complétées au nombrelength
d'octets spécifié. -
PAD_TYPE
asmax
— Les données de la colonne sont complétées à la taille de l'octet de la valeur la plus longue plus unlength
octet supplémentaire.
-
Voici un exemple de schéma mappé, avec une colonne de chaque type.
{ "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 } } ] }
À titre d'exemple plus complexe, voici un exemple de fichier .csv avec des en-têtes.
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
Dans l'exemple de schéma mappé suivant, les colonnes FirstName
et LastName
sont des cleartext
colonnes. La State
colonne est cryptée en tant que fingerprint
colonne et en tant que sealed
colonne avec un rembourrage denone
. Les autres colonnes sont omises.
{ "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" } } ] }
Le fichier .csv qui résulte du schéma mappé est le suivant.
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=
Schéma de tableau positionnel
Le schéma positionnel a la forme suivante.
{ "headerRow": false, "columns": [ [ { "targetHeader": STRING, "type": TYPE, "pad": PAD }, { "targetHeader": STRING, "type": TYPE, "pad": PAD } ], [], ... ] }
Si headerRow
tel est le casfalse
, le champ suivant de l'objet estcolumns
, qui contient un tableau d'entrées. Chaque entrée est elle-même un tableau de zéro ou plusieurs schémas de colonnes positionnels (aucun sourceHeader
champ), qui sont JSON des objets décrivant ce que la sortie doit contenir.
-
sourceHeader
— Le nom d'STRING
en-tête de la colonne source dont les données sont dérivées.Note
Ce champ doit être omis dans les schémas de position. Dans les schémas positionnels, la colonne source est déduite par l'index correspondant de la colonne dans le fichier de schéma.
-
targetHeader
— Le nom d'STRING
en-tête de la colonne correspondante dans le fichier de sortie.Note
Ce champ est obligatoire pour les schémas de position.
-
type
— CeluiTYPE
de la colonne cible dans le fichier de sortie. C'est-à-dire l'une des optionscleartext
oufingerprint
selon la manière dont la colonne sera utilisée dans le cadre de la collaboration.sealed
-
pad
— Champ d'un objet de schéma de colonne qui n'est présent que lorsqueTYPE
c'est le cassealed
. La valeur correspondante dePAD
est un objet qui décrit la manière dont les données doivent être remplies avant d'être cryptées.{ "type": PAD_TYPE, "length": INT }
Pour spécifier le rembourrage avant le chiffrement,
type
length
ils sont utilisés comme suit :-
PAD_TYPE
asnone
— Aucun remplissage ne sera appliqué aux données de la colonne et lelength
champ n'est pas applicable (c'est-à-dire omis). -
PAD_TYPE
asfixed
— Les données de la colonne sont complétées au nombrelength
d'octets spécifié. -
PAD_TYPE
asmax
— Les données de la colonne sont complétées à la taille de l'octet de la valeur la plus longue plus unlength
octet supplémentaire.Note
fixed
est utile si vous connaissez à l'avance la limite supérieure de la taille en octets des données de la colonne. Une erreur est générée si les données de cette colonne sont plus longues que celles spécifiéeslength
.max
est pratique lorsque la taille exacte des données d'entrée est inconnue, car elle fonctionne quelle que soit la taille des données. Cependant,max
cela nécessite un temps de traitement supplémentaire car il chiffre les données deux fois.max
chiffre les données une fois lorsqu'elles sont lues dans le fichier temporaire et une fois que l'entrée de données la plus longue dans la colonne est connue.De plus, la longueur de la valeur la plus longue n'est pas enregistrée entre les appels du client. Si vous prévoyez de chiffrer vos données par lots, ou de chiffrer régulièrement de nouvelles données, sachez que la longueur du texte chiffré peut varier d'un lot à l'autre.
-
Voici un exemple de schéma positionnel.
{ "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 } } ] ] }
À titre d'exemple complexe, voici un exemple de fichier .csv s'il ne contient pas la première ligne avec les en-têtes.
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
Le schéma positionnel se présente sous la forme suivante.
{ "headerRow": false, "columns": [ [ { "targetHeader": "GivenName", "type": "cleartext" } ], [ { "targetHeader": "Surname", "type": "cleartext" } ], [], [], [ { "targetHeader": "State_Join", "type": "fingerprint" }, { "targetHeader": "State", "type": "sealed", "pad": { "type": "none" } } ], [], [], [], [] ] }
Le schéma précédent produit le fichier de sortie suivant avec une ligne d'en-tête contenant les en-têtes cibles spécifiés.
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=