As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
(Opcional) Crie um esquema (usuários avançados)
A criação manual de um esquema é para usuários avançados.
A seguir está uma descrição do formato do arquivo de JSON esquema para arquivos de entrada com ou sem cabeçalhos de coluna. Usuários avançados podem escrever ou modificar diretamente o esquema, se desejarem.
nota
O cliente de criptografia C3R pode ajudá-lo a criar um esquema por meio do processo interativo descrito em Exemplo: gerar um esquema de criptografia com sealedfingerprint, e colunas cleartext ou por meio da criação de um modelo de stub.
Esquemas de tabelas mapeadas e posicionais
A seção a seguir descreve dois tipos de esquemas de tabela:
-
Esquema de tabela mapeada — Esse esquema é usado para criptografar arquivos.csv com uma linha de cabeçalho e arquivos. Apache Parquet
-
Esquema de tabela posicional — Esse esquema é usado para criptografar arquivos.csv sem uma linha de cabeçalho.
O cliente de criptografia C3R pode criptografar um arquivo tabular para uma colaboração. Para fazer isso, ele deve ter um arquivo de esquema correspondente que especifique como a saída criptografada deve ser derivada da entrada.
O cliente de criptografia C3R pode ajudar a gerar um esquema para um INPUT
arquivo executando o comando esquema do cliente de criptografia C3R na linha de comando. Um exemplo de comando éjava
-jar c3r-cli.jar schema --interactive INPUT
.
O esquema especifica as seguintes informações:
-
Quais colunas de origem são mapeadas para quais colunas transformadas no arquivo de saída por meio de seus nomes de cabeçalho (esquemas mapeados) ou posição (esquemas posicionais)
-
Quais colunas-alvo devem permanecer cleartext
-
Quais colunas de destino devem ser criptografadas para SELECT consultas
-
Quais colunas de destino devem ser criptografadas para JOIN consultas
Essas informações são codificadas em um arquivo de JSON esquema específico da tabela, que consiste em um único objeto cujo headerRow
campo é um valor booleano. O valor deve ser true
para Parquet arquivos e arquivos.csv com uma linha de cabeçalho e false
outros.
Esquema de tabela mapeada
O esquema mapeado tem a seguinte forma.
{ "headerRow": true, "columns": [ { "sourceHeader": STRING, "targetHeader": STRING, "type": TYPE, "pad": PAD }, ... ] }
Se headerRow
fortrue
, o próximo campo no objeto serácolumns
, que contém uma matriz de esquemas de colunas que mapeiam cabeçalhos de origem para cabeçalhos de destino (ou seja, JSON objetos que descrevem o que as colunas de saída devem conter).
-
sourceHeader
— O nome doSTRING
cabeçalho da coluna de origem da qual os dados são derivados.nota
A mesma coluna de origem pode ser usada para várias colunas de destino.
Uma coluna do arquivo de entrada não listada como em
sourceHeader
nenhum lugar do esquema não aparece no arquivo de saída. -
targetHeader
— O nome doSTRING
cabeçalho da coluna correspondente no arquivo de saída.nota
Esse campo é opcional para esquemas mapeados. Se esse campo for omitido, o
sourceHeader
será reutilizado para o nome do cabeçalho na saída._fingerprint
Ou_sealed
é anexado se a coluna de saída for uma fingerprint coluna ou sealed coluna, respectivamente. -
type
— A colunaTYPE
de destino no arquivo de saída. Ou seja, uma dascleartext
sealed
, oufingerprint
dependendo de como a coluna será usada na colaboração. -
pad
— Um campo de um objeto de esquema de coluna que só está presente quando oTYPE
ésealed
. Seu valor correspondente dePAD
é um objeto que descreve como os dados devem ser preenchidos antes de serem criptografados.{ "type": PAD_TYPE, "length": INT }
Para especificar o preenchimento de pré-criptografia,
type
elength
são usados da seguinte forma:-
PAD_TYPE
asnone
— Nenhum preenchimento será aplicado aos dados da coluna e olength
campo não é aplicável (ou seja, omitido). -
PAD_TYPE
asfixed
— Os dados da coluna sãolength
preenchidos com os bytes especificados. -
PAD_TYPE
asmax
— Os dados da coluna são preenchidos até o tamanho do byte do valor mais longo, mais bytes adicionais.length
-
Veja a seguir um exemplo de esquema mapeado, com uma coluna de cada 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 } } ] }
Como um exemplo mais complexo, a seguir está um exemplo de arquivo.csv com cabeçalhos.
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
No exemplo de esquema mapeado a seguir, as colunas FirstName
e LastName
são cleartext
colunas. A State
coluna é criptografada como uma fingerprint
coluna e como uma sealed
coluna com um preenchimento denone
. As colunas restantes são omitidas.
{ "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" } } ] }
A seguir está o arquivo.csv que resulta do esquema mapeado.
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=
Esquema de tabela posicional
O esquema posicional tem a seguinte forma.
{ "headerRow": false, "columns": [ [ { "targetHeader": STRING, "type": TYPE, "pad": PAD }, { "targetHeader": STRING, "type": TYPE, "pad": PAD } ], [], ... ] }
Se headerRow
forfalse
, o próximo campo no objeto serácolumns
, que contém uma matriz de entradas. Cada entrada em si é uma matriz de zero ou mais esquemas de colunas posicionais (sem sourceHeader
campo), que são JSON objetos que descrevem o que a saída deve conter.
-
sourceHeader
— O nome doSTRING
cabeçalho da coluna de origem da qual os dados são derivados.nota
Esse campo deve ser omitido nos esquemas posicionais. Em esquemas posicionais, a coluna de origem é inferida pelo índice correspondente da coluna no arquivo do esquema.
-
targetHeader
— O nome doSTRING
cabeçalho da coluna correspondente no arquivo de saída.nota
Esse campo é obrigatório para esquemas posicionais.
-
type
— A colunaTYPE
de destino no arquivo de saída. Ou seja, uma dascleartext
sealed
, oufingerprint
dependendo de como a coluna será usada na colaboração. -
pad
— Um campo de um objeto de esquema de coluna que só está presente quando oTYPE
ésealed
. Seu valor correspondente dePAD
é um objeto que descreve como os dados devem ser preenchidos antes de serem criptografados.{ "type": PAD_TYPE, "length": INT }
Para especificar o preenchimento de pré-criptografia,
type
elength
são usados da seguinte forma:-
PAD_TYPE
asnone
— Nenhum preenchimento será aplicado aos dados da coluna e olength
campo não é aplicável (ou seja, omitido). -
PAD_TYPE
asfixed
— Os dados da coluna sãolength
preenchidos com os bytes especificados. -
PAD_TYPE
asmax
— Os dados da coluna são preenchidos até o tamanho do byte do valor mais longo, mais bytes adicionais.length
nota
fixed
é útil se você souber com antecedência um limite superior no tamanho do byte dos dados da coluna. Um erro é gerado se algum dado nessa coluna for maior que o especificadolength
.max
é conveniente quando o tamanho exato dos dados de entrada é desconhecido, pois funciona independentemente do tamanho dos dados. No entanto,max
requer tempo de processamento adicional porque criptografa os dados duas vezes.max
criptografa os dados uma vez quando lidos no arquivo temporário e uma vez após a entrada de dados mais longa na coluna ser conhecida.Além disso, o comprimento do valor mais longo não é salvo entre as invocações do cliente. Se você planeja criptografar seus dados em lotes ou criptografar novos dados periodicamente, esteja ciente de que os comprimentos de texto cifrado resultantes podem variar entre os lotes.
-
Veja a seguir um exemplo de um esquema posicional.
{ "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 } } ] ] }
Como um exemplo complexo, a seguir está um exemplo de arquivo.csv se ele não tivesse a primeira linha com os cabeçalhos.
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
O esquema posicional tem o seguinte formato.
{ "headerRow": false, "columns": [ [ { "targetHeader": "GivenName", "type": "cleartext" } ], [ { "targetHeader": "Surname", "type": "cleartext" } ], [], [], [ { "targetHeader": "State_Join", "type": "fingerprint" }, { "targetHeader": "State", "type": "sealed", "pad": { "type": "none" } } ], [], [], [], [] ] }
O esquema anterior produz o seguinte arquivo de saída com uma linha de cabeçalho contendo os cabeçalhos de destino especificados.
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=