{"id":29389,"date":"2023-11-30T17:13:54","date_gmt":"2023-11-30T16:13:54","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=29389"},"modified":"2025-01-24T10:42:20","modified_gmt":"2025-01-24T09:42:20","slug":"add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/","title":{"rendered":"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API."},"content":{"rendered":"\n<p>by Alexandre Nestor<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-introduction\">Introduction<\/h2>\n\n\n\n<p>Other blogs that I wrote on OKV subject: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.dbi-services.com\/blog\/?p=29293\">Manage ssh public key with Oracle Key Vault (1\/2)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dbi-services.com\/blog\/manage-ssh-keys-with-oracle-key-vault-2-2\/\">Manage ssh public key with Oracle Key Vault (2\/2)<\/a>   <\/li>\n<\/ul>\n\n\n\n<p>The aim of this new post is to describe how to: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Download and configure the REST API <\/li>\n\n\n\n<li>Declare the endpoint into Oracle Key Vault <\/li>\n\n\n\n<li>Enroll the endpoint<\/li>\n\n\n\n<li>Create a wallet for the endpoint<\/li>\n\n\n\n<li>Add Transparent Database Encryption (TDE) directly into Oracle key vault<\/li>\n<\/ul>\n\n\n\n<p>All steps are executed from the database server, using RESTfull API commands, so no connection to Oracle Key vault interface. <\/p>\n\n\n\n<p>As prerequisite, I assume that the Oracle Key Vault is installed, and the RESTfull API is enabled at OKV server, otherwise all commands will fail. <\/p>\n\n\n\n<p>By scripting all commands, this method can be used to full configure a new database server. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-naming-and-conventions\">Naming and conventions<\/h4>\n\n\n\n<p>Oracle Key Vault server is named okvsrv.oracle.com<\/p>\n\n\n\n<p>SADMIN is the System Admin user defined at Oracle Key Vault level. <\/p>\n\n\n\n<p>All commands are made at database server level as <code>oracle<\/code> user (which is in the shell prompt).There is only one command executer as <code>root<\/code>.  <\/p>\n\n\n\n<p>The database server is a Oracle Linux 8 and the database version is 19.20. <\/p>\n\n\n\n<p>The database SID is DBTDEOKV.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-download-the-restfull-api-from-okv-server\">Download  the RESTfull API from OKV server<\/h3>\n\n\n\n<p>The RESTfull API is installed in <code>\/home\/oracle\/okvrestcli<\/code> directory.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ ~]$ mkdir -p $HOME\/okvrestcli\/log\n\n&#x5B;oracle@ ~]$ mkdir $HOME\/okvrestcli\/wallet\n\n&#x5B;oracle@ ~]$ curl -k -O https:\/\/okvsrv.oracle.com:5695\/okvrestclipackage.zip\n\n&#x5B;oracle@ ~]$ unzip okvrestclipackage.zip -d okvrestcli\nArchive:  okvrestclipackage.zip\n   creating: okvrestcli\/lib\/\n   creating: okvrestcli\/bin\/\n  inflating: okvrestcli\/bin\/okv\n  inflating: okvrestcli\/bin\/okv.bat\n   creating: okvrestcli\/conf\/\n  inflating: okvrestcli\/conf\/okvrestcli.ini\n  inflating: okvrestcli\/conf\/okvrestcli_logging.properties\n  inflating: okvrestcli\/lib\/okvrestcli.jar\n<\/pre><\/div>\n\n\n<p>To make the life easier I create an env file to keep all  used variables: <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ ~]$ echo &#039;export OKV_REST_CLI_CONFIG=$HOME\/okvrestcli\/conf&#039; &amp;gt; $HOME\/okvrestcli\/set_okv_rest_api_env.sh\n\n&#x5B;oracle@ ~]$ echo &quot;export JAVA_HOME=\/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_5\/jdk&quot; &amp;gt; $HOME\/okvrestcli\/set_okv_rest_api_env.sh\n\n&#x5B;oracle@ ~]$ echo &#039;export PATH=$PATH:$HOME\/okvrestcli\/bin&#039; &amp;gt;&amp;gt; $HOME\/okvrestcli\/set_okv_rest_api_env.sh\n\n&#x5B;oracle@ ~]$ source $HOME\/okvrestcli\/set_okv_rest_api_env.sh\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-configure-the-restfull-api\">Configure the RESTfull API <\/h3>\n\n\n\n<p>Uncomment line <code>export OKV_RESTCLI_CONFIG=$OKV_RESTCLI_DIR\/conf\/okvrestcli.ini<\/code> in <code>$HOME\/okvrestcli\/bin\/okv<\/code> shell. <\/p>\n\n\n\n<p>For logging change the line <code>java.util.logging.FileHandler.pattern = $HOME\/okvrestcli\/log\/okv%u.log <\/code>in <code>$HOME\/okvrestcli\/conf\/okvrestcli_logging.properties<\/code> file.<\/p>\n\n\n\n<p>For more log traces you can chenge the level of traces, in the same file, to <code>ALL<\/code>.<\/p>\n\n\n\n<p>Finally update <code>$HOME\/okvrestcli\/conf\/okvrestcli.ini<\/code><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;Default]\nlog_property=\/home\/oracle\/okvrestcli\/conf\/okvrestcli_logging.properties\nserver=okvsrv.oracle.com\n#okv_client_config=.\/conf\/okvclient.ora\nuser=sadmin\nclient_wallet=\/home\/oracle\/okvrestcli\/wallet\n<\/pre><\/div>\n\n\n<p>And create the autologin wallet to avoid to enter all the time the <code>sadmin<\/code> user password. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ ~]$ okv admin client-wallet add --client-wallet $HOME\/okvrestcli\/wallet --wallet-user sadmin\nPassword:\n{\n  &quot;result&quot; : &quot;Success&quot;\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-create-and-enroll-the-endpoint\">Create and enroll the endpoint<\/h2>\n\n\n\n<p>The endpoint is the database server itself. Enrolling the endpoint, give the ability to this server (endpoint) to make calls (get TDE keys) from Oracle Key Vault. <\/p>\n\n\n\n<p>An endpoint type <code>ORACLE_DB<\/code> need some directories and variables to be set: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>At database level the <code>WALLET_ROOT<\/code> parameter must be set and and endpoint scripts from OKV will be installed in <code>WALLET_ROOT\/okv<\/code><\/li>\n\n\n\n<li><code>WALLET_ROOT\/tde<\/code> directory will not contain the physical wallet (as the keys are stored in OKV) but in case of auto_login, the cwallet.sso need to be present in this directory. <\/li>\n\n\n\n<li><code>$ORACLE_HOME<\/code> and <code>$ORACLE_BASE<\/code> variables must be defined at the moment of endpoint enrolment. <\/li>\n<\/ul>\n\n\n\n<p>Create directories (<code>\/u01\/app\/oracle\/tde_wallet\/DBTDEOKV<\/code> path will be the <code>WALLET_ROOT<\/code> at the database level) <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ ~]$ mkdir \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\n\n&#x5B;oracle@ ~]$ mkdir \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\n\n&#x5B;oracle@ ~]$ mkdir \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/tde\n\n&#x5B;oracle@ ~]$ mkdir \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/tde_seps\n<\/pre><\/div>\n\n\n<p>At OKV level we are going to set the endpoint name using the database name (<code>DBTDEOKV_DB<\/code>). <\/p>\n\n\n\n<p>First the endpoint is created:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ ~]$ okv admin endpoint create --generate-json &gt; \/tmp\/t.json\n\n&#x5B;oracle@ ~]$ cat \/tmp\/t.json\n{\n  &quot;service&quot; : {\n    &quot;category&quot; : &quot;admin&quot;,\n    &quot;resource&quot; : &quot;endpoint&quot;,\n    &quot;action&quot; : &quot;create&quot;,\n    &quot;options&quot; : {\n      &quot;endpoint&quot; : &quot;DBTDEOKV_DB&quot;,\n      &quot;description&quot; : &quot;DBTDEOKV database&quot;,\n      &quot;platform&quot; : &quot;LINUX64&quot;\n      &quot;type&quot; : &quot;ORACLE_DB&quot;,\n      &quot;subgroup&quot; : &quot;NO SUBGROUP&quot;,\n      &quot;strictIpCheck&quot; : &quot;FALSE&quot;,\n    }\n  }\n}\n\n&#x5B;oracle@ ~]$  okv admin endpoint create --from-json \/tmp\/t.json\n{\n  &quot;result&quot; : &quot;Success&quot;,\n  &quot;value&quot; : {\n    &quot;status&quot; : &quot;PENDING&quot;,\n    &quot;locatorID&quot; : &quot;3DCA30C0-D7DC-42F7-AA1D-07B3A62523A4&quot;\n  }\n}\n<\/pre><\/div>\n\n\n<p>Then is enrolled:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ ~]$ echo $ORACLE_HOME\n\/u01\/app\/odaorahome\/oracle\/product\/19.0.0.0\/dbhome_5\n&#x5B;oracle@ ~]$ echo $ORACLE_BASE\n\/u01\/app\/odaorabase\/oracle\n&#x5B;oracle@ ~]$ echo $ORACLE_SID\nDBTDEOKV\n\n&#x5B;oracle@ ~]$ okv admin endpoint provision --generate-json &gt; \/tmp\/t.json\n&#x5B;oracle@ ~]$ cat \/tmp\/t.json\n{\n  &quot;service&quot; : {\n    &quot;category&quot; : &quot;admin&quot;,\n    &quot;resource&quot; : &quot;endpoint&quot;,\n    &quot;action&quot; : &quot;provision&quot;,\n    &quot;options&quot; : {\n      &quot;endpoint&quot; : &quot;DBTDEOKV_DB&quot;,\n      &quot;location&quot; : &quot;\/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv&quot;,\n      &quot;autoLogin&quot; : &quot;FALSE&quot;\n    }\n  }\n}\n\n&#x5B;oracle@ ~]$ okv admin endpoint provision --from-json \/tmp\/t.json\nEnter Oracle Key Vault endpoint password:      enpoint_password\n{\n  &quot;result&quot; : &quot;Success&quot;\n}\n<\/pre><\/div>\n\n\n<p>The <code>okvclient.jar<\/code> was downloaded in the  <code>\"location\" : \"\/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\"<\/code> path. This is an archive which need to be extracted. At the end the file <code>okvclient.jar <\/code>will be erased so if you need to reinstall the endopoint or you will need to enroll it again. <\/p>\n\n\n\n<p>The word &#8220;<code>enpoint_password<\/code>&#8221; means the password used for this endpoint. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ ~]$ ls \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\nokvclient.jar\n\n&#x5B;oracle@ ~]$ $ORACLE_HOME\/jdk\/bin\/java -jar \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\/okvclient.jar -d \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv -v\nDetected JAVA_HOME: \/u01\/app\/odaorahome\/oracle\/product\/19.0.0.0\/dbhome_5\/jdk\nDetected ORACLE_HOME: \/u01\/app\/odaorahome\/oracle\/product\/19.0.0.0\/dbhome_5\nDetected ORACLE_BASE: \/u01\/app\/odaorabase\/oracle\nUsing OKV_HOME: \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\nPlease set environment variables ORACLE_HOME, ORACLE_BASE, and OKV_HOME\nconsistently across processes.\nEnter new Key Vault endpoint password (&lt;enter&gt; for auto-login):      enpoint_password\nConfirm new Key Vault endpoint password:                             enpoint_password\nThe endpoint software for Oracle Key Vault installed successfully.\nDeleted the file : \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\/okvclient.jar\n\n&#x5B;oracle@ ~]$ ls  \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\/\nbin  conf  csdk  jlib  lib  log  ssl\n\n# execute as root \n&#x5B;root@ ~]# \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\/bin\/root.sh\n<\/pre><\/div>\n\n\n<p>Finally, create an profile, I called it <code>DBTDEOKV<\/code>,  for this endpoint in the RESTfull API, in case when we have several endpoints on the same server. From this moment we can use the parameter &#8211;profile to all RESTfull API calls. If this is the only endpoint on the server we cans use the DEFAULT profile. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n-- create the profile, DBTDEOKV, for REST api for this database \n&#x5B;oracle@ ~]$ cat $HOME\/okvrestcli\/conf\/okvrestcli.ini\n#Provide absolute path for log_property, okv_client_config properties\n&#x5B;Default]\nlog_property=\/home\/oracle\/okvrestcli\/conf\/okvrestcli_logging.properties\nserver=160.210.31.85\nuser=sadmin\nclient_wallet=\/home\/oracle\/okvrestcli\/wallet\n\n&#x5B;DBTDEOKV]\nokv_client_config=\/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\/conf\/okvclient.ora\n\n\n-- list endpoints \n&#x5B;oracle@ ~]$ okv admin endpoint list --profile DBTDEOKV\n{\n  &quot;result&quot; : &quot;Success&quot;,\n  &quot;value&quot; : {\n    &quot;endpoints&quot; : &#x5B; {\n      &quot;commonNameOfCertificateIssuer&quot; : &quot;CA&quot;,\n      &quot;clusterSubgroup&quot; : &quot;No Cluster Subgroup&quot;,\n      &quot;createdBy&quot; : &quot;SADMIN&quot;,\n      &quot;creatorNode&quot; : &quot;okvsrv.oracle.com&quot;,\n      &quot;creationTime&quot; : &quot;2023-11-14 09:40:10&quot;,\n      &quot;defaultWallet&quot; : &quot;&quot;,\n      &quot;description&quot; : &quot;DBTDEOKV database&quot;,\n      &quot;endpoint&quot; : &quot;DBTDEOKV_DB&quot;,\n      &quot;endpointCertificateExpiration&quot; : &quot;2024-11-13 09:40:18&quot;,\n      &quot;enrollmentToken&quot; : &quot;&quot;,\n      &quot;ipAddress&quot; : &quot;160.210.32.20&quot;,\n      &quot;nameStatus&quot; : &quot;ACTIVE&quot;,\n      &quot;platform&quot; : &quot;Linux&quot;,\n      &quot;status&quot; : &quot;Enrolled&quot;,\n      &quot;type&quot; : &quot;Oracle Database&quot;\n.....\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-create-a-wallet-for-the-endpoint\">Create a wallet for the endpoint<\/h3>\n\n\n\n<p>Let&#8217;s create a wallet for this endpoint. The wallet is an virtual wallet as it is located in OKV and not locally on disk. The wallet name will be <code>DBTDEOKV_DB_WALLET<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# add a wallet for this endpoint\n&#x5B;oracle@ ~]$ okv manage-access wallet create --generate-json-input &gt; \/tmp\/t.json\n&#x5B;oracle@ ~]$ cat \/tmp\/t.json\n{\n  &quot;service&quot; : {\n    &quot;category&quot; : &quot;manage-access&quot;,\n    &quot;resource&quot; : &quot;wallet&quot;,\n    &quot;action&quot; : &quot;create&quot;,\n    &quot;options&quot; : {\n      &quot;wallet&quot; : &quot;DBTDEOKV_db_wallet&quot;,\n      &quot;description&quot; : &quot;wallet for DBTDEOKV database&quot;\n    }\n  }\n}\n&#x5B;oracle@ ~]$ okv manage-access wallet create --from-json \/tmp\/t.json\n{\n  &quot;result&quot; : &quot;Success&quot;,\n  &quot;value&quot; : {\n    &quot;status&quot; : &quot;PENDING&quot;,\n    &quot;locatorID&quot; : &quot;71025B76-7773-4F2E-9383-BC3E672AF867&quot;\n  }\n}\n\n# grant access for endpoint to manage the wallet\n&#x5B;oracle@ ~]$ okv manage-access wallet add-access --generate-json-input &gt; \/tmp\/t.json\n&#x5B;oracle@ ~]$ cat \/tmp\/t.json\n{\n  &quot;service&quot; : {\n    &quot;category&quot; : &quot;manage-access&quot;,\n    &quot;resource&quot; : &quot;wallet&quot;,\n    &quot;action&quot; : &quot;add-access&quot;,\n    &quot;options&quot; : {\n      &quot;wallet&quot; : &quot;DBTDEOKV_db_wallet&quot;,\n      &quot;endpoint&quot; : &quot;DBTDEOKV_DB&quot;,\n      &quot;access&quot; : &quot;RM_MW&quot;\n    }\n  }\n}\n&#x5B;oracle@ ~]$  okv manage-access wallet add-access --from-json \/tmp\/t.json\n{\n  &quot;result&quot; : &quot;Success&quot;\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-configure-the-encryption-on-the-database-to-use-okv\">Configure the encryption on the database to use OKV<\/h3>\n\n\n\n<p>For commodity, I create a simple script to list the status of the encryption. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n-- create the script tde.sql for easy usage of the query \n&#x5B;oracle@ ~]$ cat tde.sql\nset pages 200\nset line 300\ncol WRL_PARAMETER format a50\ncol status forma a10\ncol pdb_name  format a20\nselect pdb_id, pdb_name, guid from dba_pdbs;\nselect * from v$encryption_wallet where con_id != 2;\n<\/pre><\/div>\n\n\n<p>The database is a pluggable database and the TDE will be configured in <code>ISOLATED<\/code> mode (each PDB will have it&#8217;s own encryption key).<\/p>\n\n\n\n<p>The PDB wallet root path will be <code>WALLET_ROOT\/<\/code>&lt;<code>pdbguid&gt;<\/code>. <\/p>\n\n\n\n<p>Remember the <code>okv<\/code> endpoint software was installed in <code>WALLET_ROOT\/okv<\/code>. The PDB will search the the okv endpoint software in <code>WALLET_ROOT\/&lt;pdbguid&gt;\/okv<\/code> path. We have two choices:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create another endpoint for each PDB and install the endpoint software in <code>WALLET_ROOT\/&lt;pdbguid&gt;\/okv<\/code> path.<\/li>\n\n\n\n<li>Use the same endpoint for the whole CDB. In this case We can use the same <code>okv<\/code> endpoint software. <\/li>\n<\/ul>\n\n\n\n<p>I choose the second method for simplicity, so I create a database link from <code>WALLET_ROOT\/okv<\/code> to <code>WALLET_ROOT\/&lt;pdbguid&gt;\/okv<\/code> <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nSQL&gt; select pdb_id, pdb_name, guid from dba_pdbs;\n\n    PDB_ID PDB_NAME             GUID\n---------- -------------------- --------------------------------\n         3 PDB1                 0887FBD2D436F52AE0631420D5B4B292\n         2 PDB$SEED             0887DD6BF35FA66EE0631420D5B48934\n\n&#x5B;oracle@ ~]$ mkdir\/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/0887FBD2D436F52AE0631420D5B4B292\n\n&#x5B;oracle@ DBTDEOKV]$ mkdir \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/0887FBD2D436F52AE0631420D5B4B292\/tde\n\n&#x5B;oracle@ ~]$ cd \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/0887FBD2D436F52AE0631420D5B4B292\/\n\n&#x5B;oracle@ 0887FBD2D436F52AE0631420D5B4B292]$ ln -s \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv .\n<\/pre><\/div>\n\n\n<p>Configure the CDB$ROOT database for TDE: <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n-- some usefull best practice parameters for TDE\nSQL&gt; alter system set encrypt_new_tablespaces=&#039;ALWAYS&#039; scope=spfile;\n\nSQL&gt; alter system set tablespace_encryption=&#039;AUTO_ENABLE&#039; scope=spfile;\n\n-- configure the WALLET_ROOT\nSQL&gt; alter system set wallet_root=&#039;\/u01\/app\/oracle\/tde_wallet\/DBTDEOKV&#039; scope=spfile;\n\nSystem altered.\n\n-- restart the database\nSQL&gt; shutdown immediate;\n\nSQL&gt; startup;\n\n-- configure the TDE to use OKV for keys and local FILE for autologin\nSQL&gt; alter system set tde_configuration=&quot;KEYSTORE_CONFIGURATION=OKV|FILE&quot; scope=both;\n\n-- at this level no keystore open \nSQL&gt; @tde.sql\n\nWRL_TYPE   WRL_PARAMETER                            STATUS     WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC     CON_ID\n---------- ---------------------------------------- ---------- -------------------- --------- -------- --------- ----------\nFILE       \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/tde\/ NOT_AVAILA UNKNOWN              SINGLE    NONE     UNDEFINED          1\n                                                    BLE\n\nOKV                                                 CLOSED     UNKNOWN              SINGLE    NONE     UNDEFINED          1\nFILE                                                NOT_AVAILA UNKNOWN              SINGLE    UNITED   UNDEFINED          3\n                                                    BLE\n\nOKV                                                 CLOSED     UNKNOWN              SINGLE    UNITED   UNDEFINED          3\n\n-- open the keystore =&gt; goes to state OPEN_NO_MASTER_KEY\nSQL&gt; administer key management set keystore open identified by &quot;enpoint_password&quot;;\n\nSQL&gt;  @tde.sql\n\nWRL_TYPE   WRL_PARAMETER                            STATUS     WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC     CON_ID\n---------- ---------------------------------------- ---------- -------------------- --------- -------- --------- ----------\nFILE       \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/tde\/ NOT_AVAILA UNKNOWN              SINGLE    NONE     UNDEFINED          1\n                                                    BLE\n\nOKV                                                 OPEN_NO_MA OKV                  SINGLE    NONE     UNDEFINED          1\n                                                    STER_KEY\n\nFILE                                                NOT_AVAILA UNKNOWN              SINGLE    UNITED   UNDEFINED          3\n                                                    BLE\n\nOKV                                                 CLOSED     UNKNOWN              SINGLE    UNITED   UNDEFINED          3\n\n-- create the MEK (Master Encryption Key). Use tag is a best practice\nSQL&gt; administer key management set key using tag &quot;CDB:DBTDEOKV MEK first&quot; identified by &quot;enpoint_password&quot;;\nSQL&gt; @tde.sql\n\nWRL_TYPE   WRL_PARAMETER                            STATUS     WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC     CON_ID\n---------- ---------------------------------------- ---------- -------------------- --------- -------- --------- ----------\nFILE       \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/tde\/ NOT_AVAILA UNKNOWN              SINGLE    NONE     UNDEFINED          1\n                                                    BLE\n\nOKV                                                 OPEN       OKV                  SINGLE    NONE     UNDEFINED          1\nFILE                                                NOT_AVAILA UNKNOWN              SINGLE    UNITED   UNDEFINED          3\n                                                    BLE\n\nOKV                                                 CLOSED     UNKNOWN              SINGLE    UNITED   UNDEFINED          3\n\n--configure the  autologin \nSQL&gt;  administer key management add secret &#039;enpoint_password&#039;  for client &#039;OKV_PASSWORD&#039; to local auto_login keystore &#039;\/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/tde&#039;\n\n-- check \nSQL&gt; !ls \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/tde\ncwallet.sso\n<\/pre><\/div>\n\n\n<p>Configure the PDB for TDE. Applying the TDE configuration at PDB level will automatically switch to <code>ISOLTAED<\/code> mode. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSQL&gt; alter session set container=pdb1;\n\nSQL&gt; alter system set tde_configuration=&quot;KEYSTORE_CONFIGURATION=OKV|FILE&quot; scope=both;\nSQL&gt; @tde\n\nWRL_TYPE   WRL_PARAMETER                            STATUS     WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC     CON_ID\n---------- ---------------------------------------- ---------- -------------------- --------- -------- --------- ----------\nFILE       \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/0887 OPEN_NO_MA LOCAL_AUTOLOGIN      SINGLE    ISOLATED UNDEFINED          3\n           FBD2D436F52AE0631420D5B4B292\/tde\/        STER_KEY\n\nOKV                                                 OPEN_NO_MA OKV                  SINGLE    ISOLATED UNDEFINED          3\n                                                    STER_KEY\n\nSQL&gt; administer key management set key using tag &quot;CDB:DBTDEOKV:PDB1 MEK first&quot; identified by &quot;enpoint_password&quot;;\n\nSQL&gt; @tde\n\nWRL_TYPE   WRL_PARAMETER                            STATUS     WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC     CON_ID\n---------- ---------------------------------------- ---------- -------------------- --------- -------- --------- ----------\nFILE       \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/0887 NOT_AVAILA UNKNOWN              SINGLE    ISOLATED UNDEFINED          3\n           FBD2D436F52AE0631420D5B4B292\/tde\/        BLE\n\nOKV                                                 OPEN       OKV                  SINGLE    ISOLATED UNDEFINED          3\n\n-- configure autologin the client name must be OKV_PASSWORD \nSQL&gt;   administer key management add secret &#039;enpoint_password&#039;  for client &#039;OKV_PASSWORD&#039; to local auto_login keystore &#039;\/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/0887FBD2D436F52AE0631420D5B4B292\/tde&#039;;\n\n-- check\nSQL&gt; !ls \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/0887FBD2D436F52AE0631420D5B4B292\/tde\/\ncwallet.sso\n\n-- reastart to validate\nSQL&gt; shutdown immediate;\nPluggable Database closed.\nSQL&gt; startup;\nPluggable Database opened.\nSQL&gt; @tde\n\nRL_TYPE   WRL_PARAMETER                            STATUS     WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC     CON_ID\n---------- ---------------------------------------- ---------- -------------------- --------- -------- --------- ----------\nFILE       \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/0887 NOT_AVAILA UNKNOWN              SINGLE    ISOLATED UNDEFINED          3\n           FBD2D436F52AE0631420D5B4B292\/tde\/        BLE\n\nOKV                                                 OPEN       OKV                  SINGLE    ISOLATED UNDEFINED          3\n\n<\/pre><\/div>\n\n\n<p>Check if the keys are accessible at OKV level: <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ ~]$ \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/okv\/bin\/okvutil list\nEnter Oracle Key Vault endpoint password:\nUnique ID                               Type            Identifier\n2E1A81B8-E8DA-4FA6-BF6F-28F48B274A7E    Symmetric Key   TDE Master Encryption Key: TAG CDB:DBTDEOKV MEK first\n6010F986-4A55-4F8D-BF22-891DF4DAD290    Symmetric Key   TDE Master Encryption Key: TAG CDB:DBTDEOKV:PDB1 MEK first\n<\/pre><\/div>\n\n\n<p>Make a full restart to validate the whole:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSQL&gt; startup force\n\nSQL&gt; @tde\n\nWRL_TYPE   WRL_PARAMETER                            STATUS     WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC     CON_ID\n---------- ---------------------------------------- ---------- -------------------- --------- -------- --------- ----------\nFILE       \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/tde\/ OPEN_NO_MA LOCAL_AUTOLOGIN      SINGLE    NONE     UNDEFINED          1\n                                                    STER_KEY\n\nOKV                                                 OPEN       OKV                  SINGLE    NONE     UNDEFINED          1\nFILE       \/u01\/app\/oracle\/tde_wallet\/DBTDEOKV\/0887 OPEN_NO_MA LOCAL_AUTOLOGIN      SINGLE    ISOLATED UNDEFINED          3\n           FBD2D436F52AE0631420D5B4B292\/tde\/        STER_KEY\n\nOKV                                                 OPEN       OKV                  SINGLE    ISOLATED UNDEFINED  \n<\/pre><\/div>\n\n\n<p>The autologin file has the status <code>OPEN_NO_MASTER_KEY<\/code>. This can be explained by the fact that autologin <code>cwallet.sso<\/code> file is locally and the key on on OKV server. I cannot say if this is a normall behaviur or is a display bug.  <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p>Even it seems complicated, all the described procedure can be easily scripted and implemented as a post script, for a database server deployment.<\/p>\n\n\n\n<p>Using OKV to keep the keys is one of the best solution. Otherwise you have to do it by your own, as you cannot user Oracle tools like RMAN to backup them. <\/p>\n\n\n\n<p>OKV will keep the track of all keys and theyr dates even if in case of rekey process. <\/p>\n\n\n\n<p>Loosing keys leads to database lost. Even Oracle cannot help.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Configure Oracle Database Server and it&#8217;s Database with OKV using RESTfull API <\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[59],"tags":[],"type_dbi":[],"class_list":["post-29389","post","type-post","status-publish","format-standard","hentry","category-oracle"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API. - dbi 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:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API.\" \/>\n<meta property=\"og:description\" content=\"Configure Oracle Database Server and it&#039;s Database with OKV using RESTfull API\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-30T16:13:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-24T09:42:20+00:00\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API.\",\"datePublished\":\"2023-11-30T16:13:54+00:00\",\"dateModified\":\"2025-01-24T09:42:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/\"},\"wordCount\":847,\"commentCount\":0,\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/\",\"name\":\"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API. - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2023-11-30T16:13:54+00:00\",\"dateModified\":\"2025-01-24T09:42:20+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API. - dbi 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:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/","og_locale":"en_US","og_type":"article","og_title":"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API.","og_description":"Configure Oracle Database Server and it's Database with OKV using RESTfull API","og_url":"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/","og_site_name":"dbi Blog","article_published_time":"2023-11-30T16:13:54+00:00","article_modified_time":"2025-01-24T09:42:20+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API.","datePublished":"2023-11-30T16:13:54+00:00","dateModified":"2025-01-24T09:42:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/"},"wordCount":847,"commentCount":0,"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/","url":"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/","name":"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API. - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2023-11-30T16:13:54+00:00","dateModified":"2025-01-24T09:42:20+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/add-oracle-database-server-to-oracle-key-vault-okv-from-scratch-only-with-restfull-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Add Oracle database server to Oracle Key vault (OKV) from scratch, only with RESTfull API."}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/29389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=29389"}],"version-history":[{"count":18,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/29389\/revisions"}],"predecessor-version":[{"id":36867,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/29389\/revisions\/36867"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=29389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=29389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=29389"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=29389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}