{"id":13614,"date":"2020-04-13T15:02:49","date_gmt":"2020-04-13T19:02:49","guid":{"rendered":"http:\/\/www.iri.com\/blog\/?p=13614"},"modified":"2025-02-11T11:15:28","modified_gmt":"2025-02-11T16:15:28","slug":"real-time-data-masking","status":"publish","type":"post","link":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/","title":{"rendered":"Real-Time Data Masking Using Triggers"},"content":{"rendered":"<p>Previous articles in the IRI blog detailed the <a href=\"https:\/\/www.iri.com\/solutions\/data-masking\/static-data-masking\">static data masking<\/a> of new database data using <a href=\"https:\/\/www.iri.com\/blog\/etl\/db-changes-oracle-mongo\/\">\/INCLUDE logic<\/a> or <a href=\"https:\/\/www.iri.com\/blog\/vldb-operations\/incremental-data-replication-in-iri-workbench\/\">\/QUERY syntax<\/a> in scheduled <a href=\"https:\/\/www.iri.com\/products\/fieldshield\">IRI FieldShield<\/a> job scripts that required changes in column values to detect updates. This article describes a more passive but integrated way to trigger FieldShield masking functions on the basis of SQL events, including in a\u00a0<a href=\"https:\/\/www.iri.com\/solutions\/data-masking\/real-time-data-masking\">real-time data masking<\/a> context; in other words, to mask data as it\u2019s produced or queried in real-time.<\/p>\n<p>More specifically, this article documents the installation and use of stored procedures that call FieldShield data masking library functions to mask PII in Oracle 12c on Windows. It can also serve as a \u2018procedure model\u2019 for other databases and operating systems.<\/p>\n<h5><strong>Minimum Requirements<\/strong><\/h5>\n<ul>\n<li>A version of the Oracle database that is JVM-enabled<\/li>\n<li>Oracle server \/bin must be in the system PATH<\/li>\n<li>ORACLE_HOME environment variable must be set<\/li>\n<li>A licensed copy of IRI FieldShield and its Sandkey <a href=\"https:\/\/www.iri.com\/blog\/vldb-operations\/fieldshield-sdk-2\/\">software development kit<\/a><\/li>\n<li>Oracle Java JRE 8<\/li>\n<li>Microsoft .NET v4.8 Framework<\/li>\n<\/ul>\n<h5><b>Installation<\/b><\/h5>\n<p>Once you have the sandkey.zip folder, extract the <b>sandkey.jar <\/b>and <b>sandkeyFunctions.jar<\/b> files, and the <b>libsandkey.dll<\/b> file that corresponds to your operating system. The <b>libsandkey.dll<\/b> file is in the .zip file\u2019s root folder<\/p>\n<p>Follow these steps after you have the files:<\/p>\n<ul>\n<li>Open a command prompt, navigate to where the files are located, and enter these commands in the format of:<\/li>\n<\/ul>\n<pre>loadjava -r -u &lt;username&gt;\/&lt;password&gt;@&lt;database&gt; &lt;filename&gt;<\/pre>\n<p><a href=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-13619 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-1.png\" alt=\"\" width=\"675\" height=\"123\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-1.png 675w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-1-300x55.png 300w\" sizes=\"(max-width: 675px) 100vw, 675px\" \/><\/a><\/p>\n<p>If you get an error related to CREATE$java$LOB$TABLE while doing this, you likely have insufficient privileges and may need to run the command once as SYSTEM.<\/p>\n<ul>\n<li>Place the<b> libsandkey.dll <\/b>file in the <i>bin <\/i>folder of the Oracle server. Alternatively, add the location of the file to the system path.<\/li>\n<li>Connect to the database as SYSTEM using SQL*Plus, or a similar program, and enter the following query:<\/li>\n<\/ul>\n<pre>select seq, kind, grantee, name, enabled from dba_java_policy where name like \u2018%java.lang.RuntimePermission%\u2019;<\/pre>\n<p><a href=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-13621 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-2.png\" alt=\"\" width=\"673\" height=\"190\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-2.png 673w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-2-300x85.png 300w\" sizes=\"(max-width: 673px) 100vw, 673px\" \/><\/a><\/p>\n<p>Find the policy labeled \u201cjava.lang.RuntimePermission#loadLibrary.*\u201d. In this case, it is number 99. This policy needs to be temporarily disabled in order to grant permission to the Sandkey user in the database.<\/p>\n<ul>\n<li>Now that the policy number is known, issue the following commands to disable the policy, grant permission to a user, and then re-enable the policy:<\/li>\n<\/ul>\n<pre>exec dbms_java.disable_permission(99);\r\n\r\nexec dbms_java.grant_permission( \u2018IRIDEMO\u2019, \u2018SYS:java.lang.RuntimePermission\u2019, \u2018loadLibrary.libsandkey\u2019, \u2018\u2019 );\r\n\r\nexec dbms_java.enable_permission(99);<\/pre>\n<p><a href=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-13622 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-3.png\" alt=\"\" width=\"674\" height=\"231\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-3.png 674w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-3-300x103.png 300w\" sizes=\"(max-width: 674px) 100vw, 674px\" \/><\/a><\/p>\n<p>Make sure that the username is fully capitalized as shown, or the system will not recognize it.<\/p>\n<ul>\n<li>Create the following functions within\u00a0 SQL*Plus by running a script, or by manually inputting these commands:<\/li>\n<\/ul>\n<pre>CREATE FUNCTION enc_aes256 (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2\r\n\r\nAS LANGUAGE JAVA\r\n\r\nNAME 'sandkeyFunctions.Functions.encaes256(java.lang.String, java.lang.String) return java.lang.String';\r\n\r\n\/\r\n\r\nCREATE FUNCTION enc_fp_ascii (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2\r\n\r\nAS LANGUAGE JAVA\r\n\r\nNAME 'sandkeyFunctions.Functions.encfpascii(java.lang.String, java.lang.String) return java.lang.String';\r\n\r\n\/\r\n\r\nCREATE FUNCTION enc_fp_alphanum (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2\r\n\r\nAS LANGUAGE JAVA\r\n\r\nNAME 'sandkeyFunctions.Functions.encfpalphanum(java.lang.String, java.lang.String) return java.lang.String';\r\n\r\n\/\r\n\r\nCREATE FUNCTION dec_aes256 (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2\r\n\r\nAS LANGUAGE JAVA\r\n\r\nNAME 'sandkeyFunctions.Functions.decaes256(java.lang.String, java.lang.String) return java.lang.String';\r\n\r\n\/\r\n\r\nCREATE FUNCTION dec_fp_ascii (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2\r\n\r\nAS LANGUAGE JAVA\r\n\r\nNAME 'sandkeyFunctions.Functions.decfpascii(java.lang.String, java.lang.String) return java.lang.String';\r\n\r\n\/\r\n\r\nCREATE FUNCTION dec_fp_alphanum (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2\r\n\r\nAS LANGUAGE JAVA\r\n\r\nNAME 'sandkeyFunctions.Functions.decfpalphanum(java.lang.String, java.lang.String) return java.lang.String';\r\n\r\n\/<\/pre>\n<ul>\n<li>You can now create stored procedures or triggers using the Sandkey encryption and decryption functions, which are compatible with the same <a href=\"https:\/\/www.iri.com\/solutions\/data-masking\/static-data-masking\/encrypt\">static data encryption<\/a> functions in the utility versions of IRI FieldShield, IRI DarkShield, and IRI CellShield.<\/li>\n<\/ul>\n<h5><b>Use Case: PL\/SQL Trigger<\/b><\/h5>\n<p>Here is an example that uses a Sandkey encryption function to automatically encrypt data as it is inserted in the EMPLOYEES table:<\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-13623 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png\" alt=\"\" width=\"501\" height=\"310\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png 501w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4-300x186.png 300w\" sizes=\"(max-width: 501px) 100vw, 501px\" \/><\/a><\/p>\n<p>This trigger uses the enc_fp_ascii (ASCII <a href=\"https:\/\/www.iri.com\/solutions\/data-masking\/static-data-masking\/encrypt\/format-preserving-encryption\">format preserving encryption<\/a>) function to encrypt the LAST_NAME of the new employee, and the enc_fp_alphanum function to encrypt the PHONE_NUMBER of the new employee in each inserted row.<\/p>\n<p>Before the data is inserted, the trigger passes the new data as <b>input<\/b>, and password (encryption key value) as <b>pass<\/b>, into the Sandkey encryption functions. The function returns the ciphertext result of each value as <b>output<\/b> to the new row.<\/p>\n<p>In this example, as five new rows were inserted into the table, note how the LAST_NAME and PHONE_NUMBER columns were encrypted with the functions described above.<\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-13624 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-5.png\" alt=\"\" width=\"673\" height=\"191\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-5.png 673w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-5-300x85.png 300w\" sizes=\"(max-width: 673px) 100vw, 673px\" \/><\/a><\/p>\n<p>In fact, once installed, Sandkey masking functions can be used in any way desired within the capabilities of PL\/SQL to support more \u201cdynamic\u201d event drive data masking requirements.<\/p>\n<p>Contact <a href=\"mailto:fieldshield@iri.com\">fieldshield@iri.com<\/a> for help with this approach in your database environment.<\/p>\n<h5><b>Use Case: Decrypted View<\/b><\/h5>\n<p>This example shows the creation of a decrypted view based on the EMPLOYEES table.<\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-6.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-13625 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-6.png\" alt=\"\" width=\"672\" height=\"149\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-6.png 672w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-6-300x67.png 300w\" sizes=\"(max-width: 672px) 100vw, 672px\" \/><\/a><\/p>\n<p>The decrypted view is created similar to how any view would be created, with the exception of how the data columns are called. Individual columns are decrypted using their corresponding functions, in the format of:<\/p>\n<pre>&lt;functionName&gt;(&lt;columnName&gt;, \u2018&lt;password\/key&gt;\u2019) &lt;displayName&gt;<\/pre>\n<p>The creation of a decrypted view allows for designated users to query data from the view, while allowing the actual data in the EMPLOYEES table to remain encrypted. Below is an image of how the view would appear when queried.<\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-7.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-13626 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-7.png\" alt=\"\" width=\"673\" height=\"206\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-7.png 673w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-7-300x92.png 300w\" sizes=\"(max-width: 673px) 100vw, 673px\" \/><\/a><\/p>\n<p>The integration of Sandkey and Oracle allows for greater control over the security of your data through automatic encryption triggers, decrypted views, or custom stored procedures. More generally, using FieldShield masking routines and procedures like PL\/SQL, you can now mask sensitive data in real-time for a variety of database events and use cases.<\/p>\n<p>If you are interested in real-time data masking and replication based on logged-based CDC, see <a href=\"https:\/\/www.iri.com\/solutions\/data-masking\/real-time-data-masking\">this article<\/a>. Either way, please contact <a href=\"mailto:fieldshield@iri.com\">fieldshield@iri.com<\/a> if you are interested in data masking tools or data masking techniques.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Previous articles in the IRI blog detailed the static data masking of new database data using \/INCLUDE logic or \/QUERY syntax in scheduled IRI FieldShield job scripts that required changes in column values to detect updates. This article describes a more passive but integrated way to trigger FieldShield masking functions on the basis of SQL<\/p>\n<div><a class=\"btn-filled btn\" href=\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/\" title=\"Real-Time Data Masking Using Triggers\">Read More<\/a><\/div>\n","protected":false},"author":128,"featured_media":13623,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[8,3],"tags":[14,519,789,842,50,149,977],"class_list":["post-13614","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-protection","category-vldb-operations","tag-data-masking","tag-database","tag-iri-voracity","tag-java","tag-oracle","tag-pii","tag-sql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.4 (Yoast SEO v23.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Real-Time Data Masking Using Triggers - IRI<\/title>\n<meta name=\"description\" content=\"Learn to perform real-time data masking in Oracle via triggers. Install and use a stored IRI FieldShield encryption procedure to protect PII.\" \/>\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.iri.com\/blog\/data-protection\/real-time-data-masking\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Real-Time Data Masking Using Triggers\" \/>\n<meta property=\"og:description\" content=\"Learn to perform real-time data masking in Oracle via triggers. Install and use a stored IRI FieldShield encryption procedure to protect PII.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/\" \/>\n<meta property=\"og:site_name\" content=\"IRI\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-13T19:02:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-11T16:15:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"501\" \/>\n\t<meta property=\"og:image:height\" content=\"310\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Brandon Wood\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brandon Wood\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/\"},\"author\":{\"name\":\"Brandon Wood\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/8ea477e838ffaca83b61c5a39518bc92\"},\"headline\":\"Real-Time Data Masking Using Triggers\",\"datePublished\":\"2020-04-13T19:02:49+00:00\",\"dateModified\":\"2025-02-11T16:15:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/\"},\"wordCount\":795,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png\",\"keywords\":[\"data masking\",\"database\",\"IRI Voracity\",\"Java\",\"Oracle\",\"PII\",\"SQL\"],\"articleSection\":[\"Data Masking\/Protection\",\"VLDB\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/\",\"url\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/\",\"name\":\"Real-Time Data Masking Using Triggers - IRI\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png\",\"datePublished\":\"2020-04-13T19:02:49+00:00\",\"dateModified\":\"2025-02-11T16:15:28+00:00\",\"description\":\"Learn to perform real-time data masking in Oracle via triggers. Install and use a stored IRI FieldShield encryption procedure to protect PII.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#primaryimage\",\"url\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png\",\"contentUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png\",\"width\":501,\"height\":310},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.iri.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Real-Time Data Masking Using Triggers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.iri.com\/blog\/#website\",\"url\":\"https:\/\/www.iri.com\/blog\/\",\"name\":\"IRI\",\"description\":\"Total Data Management Blog\",\"publisher\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.iri.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\",\"name\":\"IRI\",\"url\":\"https:\/\/www.iri.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png\",\"contentUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png\",\"width\":750,\"height\":206,\"caption\":\"IRI\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/8ea477e838ffaca83b61c5a39518bc92\",\"name\":\"Brandon Wood\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/613a1648a86f3d4c6db8ff9ed844dcfd?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/613a1648a86f3d4c6db8ff9ed844dcfd?s=96&d=blank&r=g\",\"caption\":\"Brandon Wood\"},\"url\":\"https:\/\/www.iri.com\/blog\/author\/brandonw\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Real-Time Data Masking Using Triggers - IRI","description":"Learn to perform real-time data masking in Oracle via triggers. Install and use a stored IRI FieldShield encryption procedure to protect PII.","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.iri.com\/blog\/data-protection\/real-time-data-masking\/","og_locale":"en_US","og_type":"article","og_title":"Real-Time Data Masking Using Triggers","og_description":"Learn to perform real-time data masking in Oracle via triggers. Install and use a stored IRI FieldShield encryption procedure to protect PII.","og_url":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/","og_site_name":"IRI","article_published_time":"2020-04-13T19:02:49+00:00","article_modified_time":"2025-02-11T16:15:28+00:00","og_image":[{"width":501,"height":310,"url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png","type":"image\/png"}],"author":"Brandon Wood","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Brandon Wood","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#article","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/"},"author":{"name":"Brandon Wood","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/8ea477e838ffaca83b61c5a39518bc92"},"headline":"Real-Time Data Masking Using Triggers","datePublished":"2020-04-13T19:02:49+00:00","dateModified":"2025-02-11T16:15:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/"},"wordCount":795,"commentCount":0,"publisher":{"@id":"https:\/\/www.iri.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png","keywords":["data masking","database","IRI Voracity","Java","Oracle","PII","SQL"],"articleSection":["Data Masking\/Protection","VLDB"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/","url":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/","name":"Real-Time Data Masking Using Triggers - IRI","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#primaryimage"},"image":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png","datePublished":"2020-04-13T19:02:49+00:00","dateModified":"2025-02-11T16:15:28+00:00","description":"Learn to perform real-time data masking in Oracle via triggers. Install and use a stored IRI FieldShield encryption procedure to protect PII.","breadcrumb":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#primaryimage","url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png","contentUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png","width":501,"height":310},{"@type":"BreadcrumbList","@id":"https:\/\/www.iri.com\/blog\/data-protection\/real-time-data-masking\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.iri.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Real-Time Data Masking Using Triggers"}]},{"@type":"WebSite","@id":"https:\/\/www.iri.com\/blog\/#website","url":"https:\/\/www.iri.com\/blog\/","name":"IRI","description":"Total Data Management Blog","publisher":{"@id":"https:\/\/www.iri.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.iri.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.iri.com\/blog\/#organization","name":"IRI","url":"https:\/\/www.iri.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png","contentUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png","width":750,"height":206,"caption":"IRI"},"image":{"@id":"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/8ea477e838ffaca83b61c5a39518bc92","name":"Brandon Wood","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/613a1648a86f3d4c6db8ff9ed844dcfd?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/613a1648a86f3d4c6db8ff9ed844dcfd?s=96&d=blank&r=g","caption":"Brandon Wood"},"url":"https:\/\/www.iri.com\/blog\/author\/brandonw\/"}]}},"jetpack_featured_media_url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2020\/04\/real-time-masking-4.png","_links":{"self":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/13614"}],"collection":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/users\/128"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/comments?post=13614"}],"version-history":[{"count":15,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/13614\/revisions"}],"predecessor-version":[{"id":18252,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/13614\/revisions\/18252"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media\/13623"}],"wp:attachment":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media?parent=13614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/categories?post=13614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/tags?post=13614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}