{"id":10515,"date":"2024-03-20T14:00:13","date_gmt":"2024-03-20T13:00:13","guid":{"rendered":"https:\/\/blog.capdata.fr\/?p=10515"},"modified":"2024-03-15T16:09:15","modified_gmt":"2024-03-15T15:09:15","slug":"le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/","title":{"rendered":"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10515&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10515&#038;title=Le%20chiffrement%20Oracle%20%3A%20Transparent%20Data%20Encryption%20sur%20Oracle%2019c\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Le%20chiffrement%20Oracle%20%3A%20Transparent%20Data%20Encryption%20sur%20Oracle%2019c&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10515\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10517 size-full\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/key_tde.png\" alt=\"\" width=\"577\" height=\"329\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/key_tde.png 577w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/key_tde-300x171.png 300w\" sizes=\"auto, (max-width: 577px) 100vw, 577px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Suite au premier article publi\u00e9 ce mois ci concernant &#8220;<a href=\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-native-network-encryption\/\">native network encryption<\/a>&#8221; , je vous propose, pour ce sujet chiffrement et s\u00e9curit\u00e9, de d\u00e9couvrir le fonctionnement de Transparent Data Encryption (TDE) pour Oracle.<\/p>\n<p>Le sujet TDE a plusieurs fois \u00e9t\u00e9 abord\u00e9 au sein de notre blog, pour la partie PostgreSQL sur <a href=\"https:\/\/blog.capdata.fr\/index.php\/transparent-data-encryption-pour-postgresql\/\">cet article<\/a>, mais \u00e9galement sur une instance de bases de donn\u00e9es SQL Server sur <a href=\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-et-sql-server-episode-2-mise-en-oeuvre-de-tde\/\">ce lien<\/a>.<\/p>\n<p>Je vous invite donc \u00e0 lire, ou relire, les pr\u00e9sentations faites pour ces SGBD en question.<\/p>\n<p>Pour le moment, int\u00e9ressons nous \u00e0 ce que propose Oracle.<\/p>\n<p>&nbsp;<\/p>\n<h2>Pr\u00e9sentation<\/h2>\n<p>&nbsp;<\/p>\n<p>Oracle TDE permet de chiffrer des donn\u00e9es sensibles dans une base de donn\u00e9es Oracle (multitenant ou pas) de fa\u00e7on la plus transparente possible pour l\u2019application. En outre, l\u2019application n\u2019a pas besoin d\u2019embarquer de strat\u00e9gie de chiffrement puisque celle-ci est int\u00e9gralement g\u00e9r\u00e9e cot\u00e9 serveur Oracle.<\/p>\n<p>Les donn\u00e9es, dans les colonnes, sont chiffr\u00e9es une fois inscrites dans les datafiles. Il ne sera donc pas possible de les r\u00e9cup\u00e9rer (via ALTER SYSTEM DUMP DATAFILE) sans avoir la cl\u00e9.<br \/>\nLes syntaxes SQL utilis\u00e9es par l\u2019application restent inchang\u00e9es puisque celles-ci sont directement envoy\u00e9es depuis l\u2019application cliente et chiffr\u00e9es sur le serveur base de donn\u00e9es locale (encryption at rest).<\/p>\n<p>&nbsp;<\/p>\n<p>Oracle TDE utilise, pour son processus, un m\u00e9canisme de cl\u00e9s (master key et cl\u00e9 de cryptage) afin de valider l\u2019ouverture du &#8220;wallet&#8221;, et du chiffrement de la donn\u00e9e.<\/p>\n<p>\u00c0 partir d\u2019Oracle 10gr2, Oracle TDE a la possibilit\u00e9 de traiter l\u2019algorithme de chiffrement sur une colonne de table (un champs adresse ou RIB par exemple).<br \/>\nC\u2019est \u00e0 partir de la version Oracle 11gr1 qu\u2019Oracle TDE peut travailler sur le chiffrement d\u2019un tablespace entier. Ceci a l\u2019avantage de traiter davantage d\u2019objets en m\u00eame temps.<\/p>\n<p>Mais avant d&#8217;aller plus loin sur le fonctionnement de TDE, et comme nous sommes sur Oracle, il convient d&#8217;aller v\u00e9rifier, point de vu licensing, ce que nous devons choisir comme version, pour configurer cette fonctionnalit\u00e9 et \u00eatre en &#8220;r\u00e8gle&#8221; avec Oracle.<\/p>\n<p>Cette fois ci, nous serons bien oblig\u00e9s de nous tourner vers la version Enterprise Edition Oracle, avec en plus, l&#8217;option payante &#8220;Advanced Security&#8221;.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10518 size-full\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/licence.png\" alt=\"\" width=\"839\" height=\"500\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/licence.png 839w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/licence-300x179.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/licence-768x458.png 768w\" sizes=\"auto, (max-width: 839px) 100vw, 839px\" \/><\/p>\n<p>Extrait du site Oracle -&gt; <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/21\/dblic\/Licensing-Information.html#GUID-AB56CEE3-955E-4E56-8B44-6075E889C283\">lien<\/a><\/p>\n<p>Pour une version Oracle 19c, nous choisirons donc de prendre une licence Enterprise Edition. A noter que l&#8217;option &#8220;Advanced Security&#8221; est incluse dans la version Personnal Edition On prem, alors qu&#8217;elle est en &#8220;extra co\u00fbt&#8221; pour une version Enterprise Edition On prem.<\/p>\n<p>&nbsp;<\/p>\n<h3>Les algorithmes de chiffrement<\/h3>\n<p>&nbsp;<\/p>\n<p>Voici la liste des algorithmes utilis\u00e9s par Oracle pour TDE, et ce, avec une instance de bases de donn\u00e9es Oracle 19c<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10519 size-full\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/algo_tde.png\" alt=\"\" width=\"836\" height=\"584\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/algo_tde.png 836w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/algo_tde-300x210.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/algo_tde-768x536.png 768w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/algo_tde-250x175.png 250w\" sizes=\"auto, (max-width: 836px) 100vw, 836px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Oracle TDE travaille par d\u00e9faut, avec l\u2019algorithme Advanced Encryption Standard sur 192 bits, soit AES192 si vous souhaitez chiffrer une colonne. Pour un tablespace, c&#8217;est le m\u00eame algorithme, mais en 128 bits.<\/p>\n<p>D&#8217;autres algorithmes comme ARIA ou GOST pourront \u00eatre choisis \u00e9galement.<\/p>\n<p>Pour le chiffrement sur colonne, Oracle TDE utilisera par d\u00e9faut SALT pour renforcer la s\u00e9curit\u00e9 des donn\u00e9es. Le proc\u00e9d\u00e9 suivant est r\u00e9alis\u00e9 ; une chaine sera ajout\u00e9e de fa\u00e7on al\u00e9atoire dans la donn\u00e9e avant d\u2019\u00eatre chiffr\u00e9e. Cela emp\u00eachera de trouver facilement la valeur d\u2019un caract\u00e8re \u00e0 partir d\u2019un motif de cryptage.<\/p>\n<p>C&#8217;est lors de l&#8217;appel \u00e0 la clause &#8220;ENCRYPT&#8221; que vous pouvez choisir un autre algorithme pour la colonne ou le tablespace.<\/p>\n<p>&nbsp;<\/p>\n<h2>Le fonctionnement<\/h2>\n<p>&nbsp;<\/p>\n<p>Oracle TDE se charge du chiffrement d\u2019une donn\u00e9e dans une colonne de table applicative en utilisant\u00a0 un fonctionnement de type ESM (External Security Module) ce qui permet de g\u00e9n\u00e9rer des cl\u00e9s de chiffrement qui servent lors des op\u00e9rations de cryptage et decryptage.<\/p>\n<p>Ces cl\u00e9s de chiffrement sont stock\u00e9es en interne dans la base de donn\u00e9es. Une cl\u00e9 de chiffrement peut g\u00e9rer une ou plusieurs colonnes de tables applicatives.<\/p>\n<p>Ces m\u00eames cl\u00e9s de chiffrement sont stock\u00e9es en interne dans une colonne du dictionnaire de donn\u00e9es (vues v$encryption\u2026) .<br \/>\nC\u2019est la cl\u00e9 que l\u2019on appelle \u00ab <strong>master key<\/strong> \u00bb qui permet de crypter\/decrypter la colonne du dictionnaire de donn\u00e9es afin d\u2019utiliser ces cl\u00e9s de chiffrement de donn\u00e9es aux personnes autoris\u00e9es.<\/p>\n<p>On peut repr\u00e9senter le m\u00e9canisme via le graphique suivant afin de comprendre le cheminement du processus Oracle TDE :<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10521 size-full\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/tde_process_colonne.png\" alt=\"\" width=\"689\" height=\"477\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/tde_process_colonne.png 689w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/tde_process_colonne-300x208.png 300w\" sizes=\"auto, (max-width: 689px) 100vw, 689px\" \/><\/p>\n<p>Dans tous les cas, il nous faut disposer d\u2019un r\u00f4le <strong>DBA<\/strong> (ou bien du r\u00f4le <strong>SYSKM<\/strong> depuis la version Oracle 12c), afin de manipuler cette \u00ab\u00a0<strong>master key<\/strong>\u00a0\u00bb.<br \/>\nCette cl\u00e9 est stock\u00e9e hors de la base de donn\u00e9es, c\u2019est un r\u00e9pertoire de l\u2019OS (ou ASM depuis la version Oracle 12c) qui portera cette cl\u00e9.<br \/>\nAfin de la s\u00e9curiser encore plus, on utilisera un wallet.<\/p>\n<p>&nbsp;<\/p>\n<h2>Pr\u00e9requis \u00e0 la mise en place d\u2019un wallet (keystore)<\/h2>\n<p>&nbsp;<\/p>\n<p>Pour mettre en place Oracle TDE,\u00a0 nous devons cr\u00e9er un wallet.<br \/>\nCelui-ci sera cr\u00e9er par d\u00e9faut sous \u00ab $ORACLE_BASE\/admin\/$ORACLE_SID\/wallet \u00bb ou bien dans un autre r\u00e9pertoire que nous pourrons sp\u00e9cifier.<\/p>\n<p>Pour notre instance CAPDATADB<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">[oracle@ip-172-44-2-141 admin]$ ls -lrt \/opt\/app\/oracle\/admin\/CAPDATADB\/\r\ntotal 20\r\ndrwxr-x---. 2 oracle dba 4096 Jun 3 2021 scripts\r\ndrwxr-x---. 2 oracle dba 44 Jun 3 2021 xdb_wallet\r\ndrwxr-x---. 2 oracle dba 20 Jun 3 2021 dpdump\r\ndrwxr-x---. 2 oracle dba 34 Jun 3 2021 pfile\r\ndrwxr-x---. 2 oracle dba 12288 Mar 13 16:08 adump\r\ndrwxr-xr-x. 2 oracle dba 6 Mar 13 16:10 wallet<\/pre>\n<p>&nbsp;<\/p>\n<p>Depuis la version Oracle 12c, il est maintenant possible de stocker le wallet (keystore) sur ASM.<\/p>\n<p>La master key communique alors en base directement afin de pouvoir utiliser la cl\u00e9 de cryptage \/ d\u00e9cryptage.<br \/>\nOn peut sch\u00e9matiser de la fa\u00e7on suivante (attention c&#8217;est un vue obsol\u00e8te depuis Oracle 19c) :<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10525 size-full\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/master_key.png\" alt=\"\" width=\"612\" height=\"570\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/master_key.png 612w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/master_key-300x279.png 300w\" sizes=\"auto, (max-width: 612px) 100vw, 612px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Afin de pouvoir cr\u00e9er et administrer un wallet, on parle maintenant de keystore en 12c, nous utilisons 2 m\u00e9thodes;<br \/>\n&#8211; soit l\u2019utilisation de l\u2019outil Oracle Wallet Manager fourni par Oracle,<br \/>\n&#8211; soit passer les commandes directement en base via les syntaxes \u00ab ADMINISTER KEY MANAGEMENT \u00bb.<\/p>\n<p>Depuis la version 19c, il y a eu quelques modifications quant \u00e0 la prise en charge du wallet Oracle.<br \/>\nLa variable &#8220;<strong>ENCRYPTION_WALLET_LOCATION<\/strong>&#8221; n&#8217;est plus utilis\u00e9e pour d\u00e9finir l&#8217;emplacement du r\u00e9pertoire d\u00e9di\u00e9 au wallet.<\/p>\n<p>Nous disposons de 2 nouvelles variables qui sont<\/p>\n<p>&#8211; &#8220;<strong>WALLET_ROOT<\/strong>&#8220;, r\u00e9pertoire par d\u00e9faut d\u00e9di\u00e9 au wallet Oracle.<br \/>\n&#8211; &#8220;<strong>TDE_CONFIGURATION<\/strong>&#8220;, le type d&#8217;emplacement pour TDE. Ce param\u00e8tre s&#8217;appuie sur le param\u00e8tre &#8220;<strong>KEYSTORE_CONFIGURATION<\/strong>&#8220;.<\/p>\n<p>Il est possible de d\u00e9finir ces variables, soit dans le SPFILE.ORA de l&#8217;instance, soit au niveau du SQLNET.ORA du ORACLE_HOME.<\/p>\n<p>Pour notre cas d&#8217;\u00e9tude, nous choisissons de placer ces param\u00e8tres directement dans le spfile.<br \/>\nEn effet, cela a pour avantage de pouvoir activer TDE uniquement pour notre base, et non pas les autres bases du m\u00eame ORACLE_HOME avec l&#8217;option SQLNET.ORA.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; ALTER SYSTEM SET WALLET_ROOT = '\/opt\/app\/oracle\/admin\/CAPDATADB\/wallet' scope=spfile;\r\n\r\nSystem altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Red\u00e9marrer l&#8217;instance pour une prise en compte imm\u00e9diate du param\u00e8tre &#8220;<strong>WALLET_ROOT<\/strong>&#8216;.<\/p>\n<p>Une fois la base red\u00e9marrer, configurer la variable &#8220;<strong>TDE_CONFIGURATION<\/strong>&#8221; qui nous sert \u00e0 sp\u00e9cifier le type de stockage de la cl\u00e9.<br \/>\nDans notre exemple, ce sera un fichier.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; ALTER SYSTEM SET TDE_CONFIGURATION=&quot;KEYSTORE_CONFIGURATION=FILE&quot; scope=both;\r\n\r\nSystem altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>V\u00e9rifier via &#8220;show parameters&#8221; que ces 2 variables sont prises en compte<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; show parameters wallet_root\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nwallet_root                          string      \/opt\/app\/oracle\/admin\/CAPDATADB\/wallet\r\n\r\n\r\nSQL&gt; show parameters tde_configuration\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\ntde_configuration                    string      KEYSTORE_CONFIGURATION=FILE<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Cr\u00e9ation d\u2019un keystore<\/h3>\n<p>&nbsp;<\/p>\n<p>Pour la cr\u00e9ation de la \u2018<strong>master key<\/strong>\u2019, Oracle TDE\u00a0 s\u2019appuie sur le format Public Key Cryptography Standards (PKCS), soit un fichier PKCS#12 sous une extension *.p12.<br \/>\nOn se connecte au serveur de bases de donn\u00e9es sous notre environnement Oracle 19c Enterprise Edition.<\/p>\n<p>Le r\u00e9pertoire choisi pour le stockage de la &#8216;<strong>master key&#8217;<\/strong> est ainsi g\u00e9r\u00e9 automatiquement avec d&#8217;une part &#8220;<strong>WALLET_ROOT<\/strong>&#8221; et d&#8217;autre part le\u00a0 &#8220;<strong>TDE_CONFIGURATION<\/strong>&#8220;.<\/p>\n<p>Nous pouvons le v\u00e9rifier sur cette base en interrogeant la vue &#8220;v$encryption_wallet&#8221;.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select WRL_TYPE,WRL_PARAMETER,STATUS,WALLET_TYPE,WALLET_ORDER,FULLY_BACKED_UP from v$encryption_wallet;\r\n\r\nWRL_TYPE             WRL_PARAMETER                                      STATUS                         WALLET_TYPE          WALLET_OR  FULLY_BAC\r\n-------------------- -------------------------------------------------- ------------------------------ -------------------- ---------  ---------\r\nFILE                 \/opt\/app\/oracle\/admin\/CAPDATADB\/wallet\/tde\/        NOT_AVAILABLE                  UNKNOWN              SINGLE     UNDEFINED<\/pre>\n<p>&nbsp;<\/p>\n<h3>G\u00e9rer le keystore<\/h3>\n<p>&nbsp;<\/p>\n<p>On cr\u00e9e le keystore en utilisant comme password celui de SYS par exemple<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\"> SQL&gt; ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY **********;\r\n\r\nkeystore altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>On peut voir imm\u00e9diatement, dans le r\u00e9pertoire repr\u00e9sent\u00e9 par la variable &#8220;<strong>WALLET_ROOT<\/strong>&#8220;, un nouveau r\u00e9pertoire nomm\u00e9 &#8220;tde&#8221; .<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">[oracle@ip-172-44-2-141 admin]$ ls -l \/opt\/app\/oracle\/admin\/CAPDATADB\/wallet\r\ntotal 0\r\ndrwxr-x---. 2 oracle dba 25 Mar 13 17:35 tde<\/pre>\n<p>&nbsp;<\/p>\n<p>Dans ce r\u00e9pertoire &#8220;tde&#8221;, nous avons bien un fichier *.p12\u00a0 cr\u00e9\u00e9.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">[oracle@ip-172-44-2-141 admin]$ ls -lrt \/opt\/app\/oracle\/admin\/CAPDATADB\/wallet\/tde\r\ntotal 4\r\n-rw-------. 1 oracle dba 2555 Mar 13 17:35 ewallet.p12<\/pre>\n<p>&nbsp;<\/p>\n<p>A partir de la, on peut d\u00e9clarer notre master key dans la base de donn\u00e9es.<br \/>\nLa premi\u00e8re \u00e9tape consiste \u00e0 ouvrir ce nouveau keystore avant de cr\u00e9er la master key.<\/p>\n<p>Celui-ci est pour le moment marqu\u00e9e CLOSED<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select WRL_TYPE,WRL_PARAMETER,STATUS,WALLET_TYPE from v$encryption_wallet;\r\n\r\nWRL_TYPE             WRL_PARAMETER                                      STATUS                         WALLET_TYPE\r\n-------------------- -------------------------------------------------- ------------------------------ --------------------\r\nFILE                 \/opt\/app\/oracle\/admin\/CAPDATADB\/wallet\/tde\/        CLOSED                         UNKNOWN<\/pre>\n<p>&nbsp;<\/p>\n<p>Nous l&#8217;ouvrons via la commande<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY *******;\r\n\r\nkeystore altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>Le wallet est ouvert, mais notre cl\u00e9 n\u2019est toujours pas pr\u00e9sente, \u00ab\u00a0<strong>OPEN_NO_MASTER_KEY\u00a0<\/strong>\u00bb<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select WRL_TYPE,WRL_PARAMETER,STATUS,WALLET_TYPE from v$encryption_wallet;\r\n\r\nWRL_TYPE             WRL_PARAMETER                                      STATUS                         WALLET_TYPE\r\n-------------------- -------------------------------------------------- ------------------------------ --------------------\r\nFILE                 \/opt\/app\/oracle\/admin\/CAPDATADB\/wallet\/tde\/        OPEN_NO_MASTER_KEY             PASSWORD<\/pre>\n<p>&nbsp;<\/p>\n<p>Cette premi\u00e8re \u00e9tape est primordiale pour la mise en place de TDE dans une base de donn\u00e9es.<\/p>\n<p>Afin d\u2019\u00e9viter d\u2019avoir \u00e0 faire cette manipulation \u00e0 chaque red\u00e9marrage de la base, nous avons le choix d&#8217;utiliser le mode AUTO LOGIN pour le keystore.<\/p>\n<p>TDE utilisera le \u00ab\u00a0<strong>Single Sign-On<\/strong>\u00a0\u00bb afin de valider l\u2019ouverture du keystore pour cette base de donn\u00e9es.<br \/>\nEn outre, un fichier comportant l\u2019extension .SSO sera alors cr\u00e9\u00e9 \u00e0 cet effet dans le r\u00e9pertoire<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY *********;\r\n\r\nkeystore altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>V\u00e9rifier la pr\u00e9sence du fichier sso dans le dossier &#8220;tde&#8221;<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">[oracle@ip-172-44-2-141 admin]$ ls -lrt \/opt\/app\/oracle\/admin\/CAPDATADB\/wallet\/tde\r\ntotal 8\r\n-rw-------. 1 oracle dba 2555 Mar 13 17:35 ewallet.p12\r\n-rw-------. 1 oracle dba 2600 Mar 13 17:46 cwallet.sso<\/pre>\n<p>&nbsp;<\/p>\n<h3>La master key<\/h3>\n<p>&nbsp;<\/p>\n<p>La master key est stock\u00e9e dans le keystore pr\u00e9alablement cr\u00e9\u00e9.<br \/>\nUne fois ouvert, le keystore peut accueillir la nouvelle &#8216;<strong>master key<\/strong>&#8216;.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY ***** WITH BACKUP;\r\n\r\nkeystore altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>Pour valider la creation de la master key, on contr\u00f4le les vues \u00ab <strong>v$encryption_wallet<\/strong> \u00bb et \u00ab <strong>v$encryption_keys<\/strong> \u00bb.<\/p>\n<p>La premi\u00e8re vue indiquera le status OPEN du keystore, ainsi que le type SINGLE SIGN ON pour ce key store.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select WRL_TYPE,WRL_PARAMETER,STATUS,WALLET_TYPE,WALLET_ORDER,FULLY_BACKED_UP from v$encryption_wallet;\r\n\r\nWRL_TYPE             WRL_PARAMETER                                       STATUS                         WALLET_TYPE          WALLET_OR        FULLY_BAC\r\n-------------------- --------------------------------------------------  ------------------------------ -------------------- ---------------- ----------------\r\nFILE                 \/opt\/app\/oracle\/admin\/CAPDATADB\/wallet\/tde\/         OPEN                           PASSWORD             SINGLE           NO<\/pre>\n<p>&nbsp;<\/p>\n<p>La seconde requ\u00eate donne les infos sur la master key, son ID, son type et surtout sa date d\u2019activation. On voit ici que la master key est donc active depuis le 13 mars 2024 \u00e0 17h49:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select KEY_ID,KEYSTORE_TYPE,CREATOR_DBNAME,ACTIVATION_TIME,KEY_USE,ORIGIN from v$encryption_keys;\r\n\r\n\r\nKEY_ID KEYSTORE_TYPE\r\n------------------------------------------------------------------------------ -----------------\r\nCREATOR_DBNAME\r\n--------------------------------------------------------------------------------------------------------------------------------\r\nACTIVATION_TIME                                                             KEY_USE    ORIGIN\r\n--------------------------------------------------------------------------- ---------- -----------------------------------------\r\nAVFKfh8jPk\/Rv1rHHavj4rsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA SOFTWARE KEYSTORE\r\nCAPDATADB\r\n13-MAR-24 05.49.58.737772 PM +00:00                                         TDE        LOCAL<\/pre>\n<p>&nbsp;<\/p>\n<p>A noter \u00e9galement que la master key est g\u00e9r\u00e9 en locale (champs ORIGIN=LOCAL), nous verrons par la suite dans quelle mesure ce champs peut avoir une autre valeur.<\/p>\n<p>&nbsp;<\/p>\n<h2>Cas d&#8217;utilisation de TDE<\/h2>\n<p>&nbsp;<\/p>\n<h4>Chiffrement d&#8217;une colonne<\/h4>\n<p>&nbsp;<\/p>\n<p>Depuis Oracle 10gr2, nous pouvons utiliser Oracle TDE pour chiffrer une colonne (en choisissant l\u2019algo de chiffrement si besoin).<\/p>\n<p>On cr\u00e9e une table pour tester le chiffrement. Nous utilisons l&#8217;algorithme AES256.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; connect manu\r\nSQL&gt; create table infos_employes (prenom varchar2(40),  nom varchar2(40),\r\n  adresse varchar2(40) encrypt using 'AES256',\r\n  code_postal number(6) encrypt using 'AES256'); \r\n\r\nTable created.<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; insert into infos_employes values ('Emmanuel','Rami','19 rue Crebillon Nantes','44000');\r\n\r\n1 row created.<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Il s&#8217;agit ensuite de v\u00e9rifier les colonnes chiffr\u00e9es avec leurs algorithmes utilis\u00e9s. Le check d\u2019int\u00e9grit\u00e9 (checksum) est effectu\u00e9 via SHA-1.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select * from dba_encrypted_columns;\r\n\r\nOWNER           TABLE_NAME           COLUMN_NAME          ENCRYPTION_ALG                SAL INTEGRITY_AL\r\n--------------- -------------------- -------------------- ----------------------------- --- ------------\r\nMANU            INFOS_EMPLOYES       ADRESSE              AES 256 bits key              YES SHA-1\r\nMANU            INFOS_EMPLOYES       CODE_POSTAL          AES 256 bits key              YES SHA-1<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Il est possible de modifier une table en ajoutant un chiffrement \u00e0 une colonne,\u00a0 ajouter une colonne chiffr\u00e9e ou m\u00eame d\u00e9chiffr\u00e9e une colonne existante.<br \/>\nOn peut \u00e9galement changer l\u2019algo de chiffrement sur une colonne.<\/p>\n<p>&nbsp;<\/p>\n<h4>Chiffrement d&#8217;un tablespace<\/h4>\n<p>&nbsp;<\/p>\n<p>Depuis la version 11gr1, il est possible d\u2019utiliser TDE sur un tablespace entier. Nous utilisons toujours le m\u00eame algorihme.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; create tablespace CAPDATA_TBS datafile '\/data\/oradata\/CAPDATADB\/capdata_tbs01.dbf' size 100M\r\n  encryption using 'AES256'\r\n  default storage (ENCRYPT);\r\n\r\nTablespace created.<\/pre>\n<p>&nbsp;<\/p>\n<p>La vue &#8220;v$encrypted_tablespace&#8221; nous confirme la prise en charge de ce tablespace<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select T.name,E.ENCRYPTIONALG,E.ENCRYPTEDTS,E.MASTERKEYID,E.BLOCKS_ENCRYPTED,E.BLOCKS_DECRYPTED,E.STATUS \r\n         from v$tablespace t inner join v$encrypted_tablespaces e on (t.ts# = e.tS#);\r\n\r\nNAME                           ENCRYPT ENC MASTERKEYID                      BLOCKS_ENCRYPTED BLOCKS_DECRYPTED STATUS\r\n------------------------------ ------- --- -------------------------------- ---------------- ---------------- ----------\r\nCAPDATA_TBS                    AES256  YES 514A7E1F233E4FD1BF5AC71DABE3E2BB 126              0                NORMAL<\/pre>\n<p>&nbsp;<\/p>\n<p>Comme nous sommes sur un keystore en mode AUTO_LOGIN, un red\u00e9marrage de base ne va pas n\u00e9cessiter une saisie du password du keystore pour l&#8217;ouverture.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; shutdown immediate\r\nDatabase closed.\r\nDatabase dismounted.\r\nORACLE instance shut down.\r\nSQL&gt; startup\r\nORACLE instance started.\r\n\r\nTotal System Global Area 2147481648 bytes\r\nFixed Size 8898608 bytes\r\nVariable Size 436207616 bytes\r\nDatabase Buffers 1694498816 bytes\r\nRedo Buffers 7876608 bytes\r\nDatabase mounted.\r\nDatabase opened.\r\nSQL&gt; select * from manu.infos_employes;\r\n\r\nPRENOM                                   NOM                                      ADRESSE                                  CODE_POSTAL\r\n---------------------------------------- ---------------------------------------- ---------------------------------------- -----------\r\nEmmanuel                                 Rami                                     19 rue Crebillon Nantes                  44000\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>Validation du chiffrement et tests de s\u00e9curit\u00e9<\/h3>\n<p>&nbsp;<\/p>\n<p>Prenons l&#8217;exemple d&#8217;une table non chiffr\u00e9e, que nous appelons &#8220;infos_societe&#8221;, dans laquelle nous ajoutons un ligne exemple.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; create table infos_societes (nom varchar2(40),\r\n  raison varchar2(40),\r\n  adresse varchar2(40),\r\n  code_postal number(6) ); \r\n\r\nTable created.\r\n\r\nSQL&gt; insert into infos_societes values ('Capdata','SA','9 rue de la porte de Buc Versailles','78000');\r\n\r\n1 row created.<\/pre>\n<p>&nbsp;<\/p>\n<p>Ici, nous n&#8217;utilisons pas de chiffrement. Il nous est donc possible potentiellement d&#8217;aller lire la donn\u00e9e directement dans le block Oracle via un &#8220;dump&#8221;.<\/p>\n<p>Tout d&#8217;abord, on rep\u00e8re le ROW_ID de notre ligne ins\u00e9r\u00e9e<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select rowid from manu.infos_societes where NOM='Capdata';\r\n\r\nROWID\r\n------------------\r\nAAASEqAAHAAAAF0AAA<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Puis on cherche le num\u00e9ro de block dans lequel notre ligne est \u00e9crite.<\/p>\n<pre><\/pre>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select DBMS_ROWID.ROWID_BLOCK_NUMBER('AAASEqAAHAAAAF0AAA') &quot;Block number&quot; from DUAL;\r\n\r\nBlock number\r\n------------\r\n372<\/pre>\n<pre><\/pre>\n<p>Ainsi que le FILE_ID du tablespace<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,EXTENT_ID,FILE_ID from dba_extents where SEGMENT_NAME='INFOS_SOCIETES';\r\n\r\nSEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME                EXTENT_ID  FILE_ID\r\n-------------------- ------------------ ------------------------------ ---------- ----------\r\nINFOS_SOCIETES       TABLE              USERS                          0          7<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Il nous reste donc \u00e0 effectuer le dump du block en question<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\"> SQL&gt; alter system dump datafile 7 block 372;\r\n\r\nSystem altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>Puis v\u00e9rifier la trace g\u00e9n\u00e9r\u00e9<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">[oracle@ip-172-44-2-141 trace]$ ls -rtl\r\n.....\r\n-rw-r-----. 1 oracle dba 964 Mar 14 16:56 CAPDATADB_ora_3063.trm\r\n-rw-r-----. 1 oracle dba 13073 Mar 14 16:56 CAPDATADB_ora_3063.trc<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Et si l&#8217;\u00e9dite la trace, nous avons les informations lisibles des donn\u00e9es de la ligne<\/p>\n<p>&nbsp;<\/p>\n<pre>[bach][oracle@ip-172-44-2-141 trace]$ vi CAPDATADB_ora_3063.trc\r\n.......\r\nBlock dump from disk:\r\nbuffer tsn: 4 rdba: 0x01c00174 (7\/372)\r\nscn: 0x2d6b05 seq: 0x01 flg: 0x06 tail: 0x6b050601\r\nfrmt: 0x02 chkval: 0x6336 type: 0x06=trans data\r\nHex dump of block: st=0, typ_found=1\r\nDump of memory from 0x00007F5EAFC45000 to 0x00007F5EAFC47000\r\n7F5EAFC45000 0000A206 01C00174 002D6B05 06010000 [....t....k-.....]\r\n7F5EAFC45010 00006336 00000001 0001212A 002D6B04 [6c......*!...k-.]\r\n7F5EAFC45020 00008000 00320002 01C00170 001A0007 [......2.p.......]\r\n7F5EAFC45030 000003DA 010007DD 003700CA 00002001 [..........7.. ..]\r\n7F5EAFC45040 002D6B05 00000000 00000000 00000000 [.k-.............]\r\n7F5EAFC45050 00000000 00000000 00000000 00000000 [................]\r\n7F5EAFC45060 00000000 00010100 0014FFFF 1F4E1F62 [............b.N.]\r\n7F5EAFC45070 00001F4E 1F620001 00000000 00000000 [N.....b.........]\r\n7F5EAFC45080 00000000 00000000 00000000 00000000 [................]\r\nRepeat 499 times\r\n7F5EAFC46FC0 00000000 012C0000 61430704 74616470 [......,...Capdat]\r\n7F5EAFC46FD0 41530261 72203923 64206575 616C2065 [a.SA#9 rue de la]\r\n7F5EAFC46FE0 726F7020 64206574 75422065 65562063 [ porte de Buc Ve]\r\n7F5EAFC46FF0 69617372 73656C6C 5108C303 6B050601 [rsailles...Q...k]\r\nBlock header dump: 0x01c00174\r\nend_of_block_dump\r\nEnd dump data blocks tsn: 4 file#: 7 minblk 372 maxblk 372[\/bash]\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Reprenons maintenant notre table avec le chiffrement activ\u00e9 \u00e0 savoir la table &#8220;infos_employes&#8221;<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\"> SQL&gt; select rowid from manu.infos_employes where NOM='Rami';\r\n\r\nROWID\r\n------------------\r\nAAASEcAAHAAAAFsAAA<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Rappelons que les colonnes adresse et code postal sont chiffr\u00e9es.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; select DBMS_ROWID.ROWID_BLOCK_NUMBER('AAASEcAAHAAAAFsAAA') &quot;Block number&quot; from DUAL;\r\n\r\nBlock number\r\n------------\r\n364<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Le tablespace est le m\u00eame que la table &#8220;infos_societes&#8221;. Nous pouvons lancer le dump du block de donn\u00e9es.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SQL&gt; alter system dump datafile 7 block 364;\r\n\r\nSystem altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Et lors d&#8217;une tentative de lecture sur la trace g\u00e9n\u00e9r\u00e9e<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">[oracle@ip-172-44-2-141 trace]$ vi CAPDATADB_ora_3131.trc\r\n.....\r\nBlock dump from disk:\r\nbuffer tsn: 4 rdba: 0x01c0016c (7\/364)\r\nscn: 0x2d5c3b seq: 0x01 flg: 0x06 tail: 0x5c3b0601\r\nfrmt: 0x02 chkval: 0xc56d type: 0x06=trans data\r\nHex dump of block: st=0, typ_found=1\r\nDump of memory from 0x00007FC2BF1F4000 to 0x00007FC2BF1F6000\r\n7FC2BF1F4000 0000A206 01C0016C 002D5C3B 06010000 [....l...;\\-.....]\r\n7FC2BF1F4010 0000C56D 00000001 0001211C 002D5BD0 [m........!...[-.]\r\n7FC2BF1F4020 00008000 00320002 01C00168 00110005 [......2.h.......]\r\n7FC2BF1F4030 0000042C 0100019D 000A014D 00002002 [,.......M.... ..]\r\n7FC2BF1F4040 002D5C3B 00000000 00000000 00000000 [;\\-.............]\r\n7FC2BF1F4050 00000000 00000000 00000000 00000000 [................]\r\n7FC2BF1F4060 00000000 00020100 0016FFFF 1E6A1E80 [..............j.]\r\n7FC2BF1F4070 00001E6A 1F0D0002 00001E80 00000000 [j...............]\r\n7FC2BF1F4080 00000000 00000000 00000000 00000000 [................]\r\nRepeat 485 times\r\n7FC2BF1F5F60 8EC02273 4486D297 E07C4F05 9C90F57B [s&quot;.....D.O|.{...]\r\n7FC2BF1F5F70 04012C44 6D6D4508 65756E61 6152046C [D,...Emmanuel.Ra]\r\n7FC2BF1F5F80 8844696D 7068CF63 36DD3BAB 98AD8A29 [miD.c.hp.;.6)...]\r\n7FC2BF1F5F90 09A57855 59F7EC5E 18DDCBC6 22B4D7D7 [Ux..^..Y.......&quot;]\r\n7FC2BF1F5FA0 46B26F31 45302B6F F053AA6D 81ECCB82 [1o.Fo+0Em.S.....]\r\n7FC2BF1F5FB0 F74A0CC2 5735C61A 58C03130 C2BA128F [..J...5W01.X....]\r\n7FC2BF1F5FC0 6193530D 34C00E2B F231A006 9EB73BA2 [.S.a+..4..1..;..]\r\n7FC2BF1F5FD0 DE7291C6 2B5EBC99 02CEA21C E627E11B [..r...^+......'.]\r\n7FC2BF1F5FE0 0620CDFA 810E446B A5D64062 955C5360 [.. .kD..b@..`S\\.]\r\n7FC2BF1F5FF0 0092AA85 8215A721 844747EB 5C3B0601 [....!....GG...;\\]\r\nBlock header dump: 0x01c0016c\r\n 50 67 87 7b f4 69 c8 de e0 a1 49 ad 7e 2e f6 c6 78 e9 56 09 10 ef 78 bd a0\r\n31 d3 10 ba 21 19 8e a3 fe 4d 6b 0d c8 52 a9 7e a5 08 c1 b2 fd 65 a2 ce 87\r\n03 b1 b9 df 03 58 93 e3 32 2c a6 63 19 47 1e ae ff 52\r\ncol 3: [52]\r\nab d0 54 ec ca 0a 6c 64 d5 42 a9 68 ed 3e cb 53 db 11 33 0b 27 38 9b 08 39\r\n50 de 4e a5 9f 39 ea 86 02 f8 73 22 c0 8e 97 d2 86 44 05 4f 7c e0 7b f5 90\r\n9c 44\r\nend_of_block_dump\r\nEnd dump data blocks tsn: 4 file#: 7 minblk 364 maxblk 364<\/pre>\n<p>&nbsp;<\/p>\n<p>Nous r\u00e9cup\u00e9rons le nom et pr\u00e9nom , mais les informations adresse et code postal ne sont pas lisibles directement.<\/p>\n<p>&nbsp;<\/p>\n<h2>Les restrictions<\/h2>\n<p>&nbsp;<\/p>\n<p>Oracle TDE comporte \u00e9galement certaines restrictions, ne pouvant fonctionner sous les conditions suivantes.<\/p>\n<p>Il ne sera pas possible d\u2019utiliser le chiffrage sur une table du sch\u00e9ma SYS, ni m\u00eame chiffrer une colonne avec des type LONG ou LOB.<\/p>\n<p>Pour les colonnes cl\u00e9s primaires ou cl\u00e9s \u00e9trang\u00e8res, il ne sera pas possible d\u2019utiliser le m\u00e9canisme SALT. L\u2019option NO SALT sera alors utiliser. Une erreur sera rencontr\u00e9e si tel est le cas<\/p>\n<p>&nbsp;<\/p>\n<pre><span style=\"color: #993300;\">ORA-28338: cannot encrypt indexed column(s) with salt<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p>Pour chaque donn\u00e9e chiffr\u00e9e sur une colonne, il faudra prendre en compte le fait que celle-ci utilise 20 bytes de plus en raison de l\u2019utilisation du check d\u2019int\u00e9grit\u00e9 (checksum via SHA-1).<\/p>\n<p>&nbsp;<\/p>\n<p>L\u2019utilisation de Oracle TDE n&#8217;est r\u00e9serv\u00e9 qu\u2019aux index de type balanc\u00e9 (B-TREE), de plus, comme le stockage de la donn\u00e9e est chiffr\u00e9e, l\u2019index ne peut trouver de correspondance logique, en outre, il ne sera pas possible d\u2019effectuer du \u00ab range scan \u00bb dans la clause WHERE d\u2019une op\u00e9ration SQL (pas de WHERE T &gt; 1000).<br \/>\nSeuls les pr\u00e9dicats d\u2019\u00e9galit\u00e9 sur une valeur sont possibles (WHERE T=1).<\/p>\n<p>Le seul moyen de faire du range scan sur un index est de chiffr\u00e9 le tablespace et que cet index y soit inclus.<\/p>\n<p>TDE ne g\u00e8re pas non plus les tablespaces de type transportables.<\/p>\n<p>Pour faire un export des donn\u00e9es chiffr\u00e9es , il est indispensable d\u2019utiliser DataPump en passant alors dans la commande expdp le password de la master key :<\/p>\n<p>&nbsp;<\/p>\n<pre><span style=\"color: #993300;\">$ expdp \u00ab\u00a0\u2018\/ as sysdba\u2019\u00a0\u00bb DIRECTORY=&lt;DIR&gt;\u00a0 ENCRYPTION_PASSWORD=*******<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p>Attention \u00e9galement aux performances, les benchmarks que l\u2019on peut trouver concernant TDE indiquent en moyenne des valeurs sup\u00e9rieures de 10 \u00e0 35% en terme de consommation CPU.<\/p>\n<p>&nbsp;<\/p>\n<h2>Pour aller plus loin &#8230;<\/h2>\n<p>&nbsp;<\/p>\n<p>Afin de pouvoir g\u00e9rer une solution de s\u00e9curit\u00e9 globale, Oracle a cr\u00e9\u00e9 une appliance nomm\u00e9e Oracle Key Vault (OKV).<br \/>\nCet outil permet de stocker et centraliser des informations relatives \u00e0 la s\u00e9curit\u00e9 d\u2019un parc informatique, celles-ci pouvant correspondre \u00e0 des wallets mais aussi des keystores java (JKS), des fichiers de type credential ou keystore JCE (java cryptography extension).<\/p>\n<p>&nbsp;<\/p>\n<p>Oracle Key vault fournit donc une plateforme de s\u00e9curit\u00e9 ou l&#8217;on peut centraliser un ensemble de strat\u00e9gies Oracle TDE au sein d\u2019une entreprise.<br \/>\nCette appliance centralise l\u2019ensemble des wallets des serveurs d\u2019une entreprise.<br \/>\nLes informations de connexions ainsi que les requ\u00eates de cryptage\/decryptage transitent via le r\u00e9seau entre le Oracle Key Vault et les serveurs bases de donn\u00e9es.<\/p>\n<p>L\u2019appliance Oracle Key Vault communique avec diff\u00e9rents composants.<br \/>\nCeux-ci pouvant se caract\u00e9riser par\u00a0:<\/p>\n<ul>\n<li>Des composants Oracle TDE (colonnes ou tablespaces crypt\u00e9e)<\/li>\n<li>Des keystores files , ou JCEKS<\/li>\n<li>La management console, qui servira \u00e0 l\u2019administration de OKV<\/li>\n<li>Une appliance backup pour les besoins de sauvegarde de OKV<\/li>\n<li>Les wallets de connexion et Java keystores<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>N&#8217;h\u00e9sitez pas \u00e0 laisser un commentaire.<\/p>\n<p>&nbsp;<\/p>\n<p>\ud83d\ude42<\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10515&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10515&#038;title=Le%20chiffrement%20Oracle%20%3A%20Transparent%20Data%20Encryption%20sur%20Oracle%2019c\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Le%20chiffrement%20Oracle%20%3A%20Transparent%20Data%20Encryption%20sur%20Oracle%2019c&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10515\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>&nbsp; &nbsp; Suite au premier article publi\u00e9 ce mois ci concernant &#8220;native network encryption&#8221; , je vous propose, pour ce sujet chiffrement et s\u00e9curit\u00e9, de d\u00e9couvrir le fonctionnement de Transparent Data Encryption (TDE) pour Oracle. Le sujet TDE a plusieurs&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":32,"featured_media":10516,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-10515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"&nbsp; &nbsp; Suite au premier article publi\u00e9 ce mois ci concernant &#8220;native network encryption&#8221; , je vous propose, pour ce sujet chiffrement et s\u00e9curit\u00e9, de d\u00e9couvrir le fonctionnement de Transparent Data Encryption (TDE) pour Oracle. Le sujet TDE a plusieurs&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-20T13:00:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-15T15:09:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/tde_at_rest.png\" \/>\n\t<meta property=\"og:image:width\" content=\"571\" \/>\n\t<meta property=\"og:image:height\" content=\"393\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Emmanuel RAMI\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel RAMI\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/\"},\"author\":{\"name\":\"Emmanuel RAMI\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae\"},\"headline\":\"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c\",\"datePublished\":\"2024-03-20T13:00:13+00:00\",\"dateModified\":\"2024-03-15T15:09:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/\"},\"wordCount\":3862,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"articleSection\":[\"Oracle\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/\",\"name\":\"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2024-03-20T13:00:13+00:00\",\"dateModified\":\"2024-03-15T15:09:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae\",\"name\":\"Emmanuel RAMI\",\"sameAs\":[\"https:\/\/blog.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/erami\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/","og_locale":"fr_FR","og_type":"article","og_title":"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c - Capdata TECH BLOG","og_description":"&nbsp; &nbsp; Suite au premier article publi\u00e9 ce mois ci concernant &#8220;native network encryption&#8221; , je vous propose, pour ce sujet chiffrement et s\u00e9curit\u00e9, de d\u00e9couvrir le fonctionnement de Transparent Data Encryption (TDE) pour Oracle. Le sujet TDE a plusieurs&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2024-03-20T13:00:13+00:00","article_modified_time":"2024-03-15T15:09:15+00:00","og_image":[{"width":571,"height":393,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2024\/03\/tde_at_rest.png","type":"image\/png"}],"author":"Emmanuel RAMI","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Emmanuel RAMI","Dur\u00e9e de lecture estim\u00e9e":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/"},"author":{"name":"Emmanuel RAMI","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae"},"headline":"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c","datePublished":"2024-03-20T13:00:13+00:00","dateModified":"2024-03-15T15:09:15+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/"},"wordCount":3862,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"articleSection":["Oracle"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/","url":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/","name":"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2024-03-20T13:00:13+00:00","dateModified":"2024-03-15T15:09:15+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/le-chiffrement-oracle-transparent-data-encryption-sur-oracle-19c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Le chiffrement Oracle : Transparent Data Encryption sur Oracle 19c"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae","name":"Emmanuel RAMI","sameAs":["https:\/\/blog.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/erami\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/10515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=10515"}],"version-history":[{"count":28,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/10515\/revisions"}],"predecessor-version":[{"id":10551,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/10515\/revisions\/10551"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/10516"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=10515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=10515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=10515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}