{"id":17366,"date":"2024-03-19T17:11:48","date_gmt":"2024-03-19T21:11:48","guid":{"rendered":"https:\/\/www.iri.com\/blog\/?p=17366"},"modified":"2024-05-22T15:47:53","modified_gmt":"2024-05-22T19:47:53","slug":"masking-floating-pii-in-database-columns","status":"publish","type":"post","link":"https:\/\/www.iri.com\/blog\/data-protection\/masking-floating-pii-in-database-columns\/","title":{"rendered":"Masking Floating PII in Database Columns"},"content":{"rendered":"<p><i>Calling DarkShield from FieldShield: Reaching the DarkShield API with a <\/i><i>Field-Level Transformation Function<\/i><\/p>\n<h4><strong>Overview\u00a0<\/strong><\/h4>\n<p><span style=\"font-weight: 400;\">It is now possible to use an <\/span><a href=\"https:\/\/www.iri.com\/products\/darkshield\"><span style=\"font-weight: 400;\">IRI DarkShield<\/span><\/a><span style=\"font-weight: 400;\"> function <\/span><i><span style=\"font-weight: 400;\">from within<\/span><\/i><span style=\"font-weight: 400;\"> an <\/span><a href=\"https:\/\/www.iri.com\/products\/fieldshield\"><span style=\"font-weight: 400;\">IRI FieldShield<\/span><\/a><span style=\"font-weight: 400;\"> job to find and mask one or more instances of PII floating inside the text of specified columns. This feature allows you to leverage the best of both <\/span><a href=\"https:\/\/www.iri.com\/products\/iri-data-protector\"><span style=\"font-weight: 400;\">data masking tools<\/span><\/a><span style=\"font-weight: 400;\"> in certain use cases, particularly when the functional extensibility of FieldShield through SortCL scripting is required. <span id='easy-footnote-1-17366' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/www.iri.com\/blog\/data-protection\/masking-floating-pii-in-database-columns\/#easy-footnote-bottom-1-17366' title='See &lt;a href=&quot;https:\/\/www.iri.com\/company\/faqs\/190&quot;&gt;this FAQ&lt;\/a&gt; comparing the FieldShield and DarkShield tools for database masking.'><sup>1<\/sup><\/a><\/span><\/span><\/p>\n<p><span style=\"font-weight: 400;\">This new combination works through a new SortCL field-level transformation <\/span><a href=\"https:\/\/www.iri.com\/solutions\/data-transformation\/custom\"><span style=\"font-weight: 400;\">function<\/span><\/a><span style=\"font-weight: 400;\"> called <\/span><i><span style=\"font-weight: 400;\">darkshield_api_mask<\/span><\/i><span style=\"font-weight: 400;\">. The function<\/span> <span style=\"font-weight: 400;\">can search and mask the contents of semi-structured or unstructured data within a relational database (RDB) column or flat-file field by making requests to the <\/span><a href=\"https:\/\/docs.google.com\/document\/d\/1nbXGwdEa7z-njSS8ERxFk7v0F_8dkwxTfl7RKSkt8KY\/edit?usp=sharing\"><span style=\"font-weight: 400;\">Plankton (DarkShield RPC) API<\/span><\/a><span style=\"font-weight: 400;\">.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The function has four required arguments, and one optional argument:\u00a0<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The name of a field<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The name of an existing File Search Context (FSC)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The name of an existing File Mask Context (FMC)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The URL of a running instance of the DarkShield API.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">(Optional) A <\/span><a href=\"http:\/\/www.iana.org\/assignments\/media-types\/media-types.xhtml\"><span style=\"font-weight: 400;\">content-type<\/span><\/a><span style=\"font-weight: 400;\"> to include in the request. The DarkShield API does automatic content-type detection, so this is only necessary when DarkShield\u2019s automatic detection is unable to discern the content type, such as in the case of an HL7 message, which cannot be distinguished from plain text.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">The DarkShield function call will send the contents of the field (column value) to the endpoint provided by the <\/span><i><span style=\"font-weight: 400;\">DarkShield-Files<\/span><\/i><span style=\"font-weight: 400;\"> plugin of the DarkShield API for searching and masking a file in one pass. It will then return the masked contents based on search matchers, masking rules, filters, and configuration options defined in the file search and file mask contexts referenced by the function.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This article explains how to configure those settings and shows sample FieldShield job script invocations of the function.<\/span><\/p>\n<h4><strong>Prerequisites<\/strong><\/h4>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A running license of IRI FieldShield or Voracity<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A running instance of the <\/span><a href=\"https:\/\/docs.google.com\/document\/d\/1nbXGwdEa7z-njSS8ERxFk7v0F_8dkwxTfl7RKSkt8KY\/edit?usp=sharing\"><span style=\"font-weight: 400;\">DarkShield API<\/span><\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">IRI CoSort build tag 240105 or later<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Text search contexts and mask contexts must be set up (with names) to define search matching methods and pair each matcher with a masking rule. Separate file search contexts and file mask contexts must also be specified. A file search context can add file-type-specific search methods or options, such as JSON path matchers. See this <\/span><a href=\"https:\/\/www.iri.com\/blog\/data-protection\/darkshield-rpc-api\/\"><span style=\"font-weight: 400;\">article <\/span><\/a><span style=\"font-weight: 400;\">for more details on search and mask contexts, and this <\/span><a href=\"https:\/\/www.iri.com\/blog\/data-protection\/darkshield-files-rpc-api\/\"><span style=\"font-weight: 400;\">article<\/span><\/a> <span style=\"font-weight: 400;\">for more details on file search and mask contexts, which are separate pairs of contexts. Both pairs of contexts are part of the request body sent to the DarkShield API through endpoints like <em>\/api\/darkshield\/searchContext.create<\/em> and<em>\/api\/darkshield\/files\/fileMaskContext.create<\/em>.<\/span><\/li>\n<\/ol>\n<h4><strong>Limitations<\/strong><\/h4>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">SortCL currently has an addressable record (row) length limit of 64KB, so any data beyond that position cannot be mapped to a field, nor thus masked in FieldShield.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">This function currently supports only textual data (free text, XML, JSON, etc.). There is some simple escaping\/unescaping of newlines currently implemented.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">If base 64 encoding\/decoding were to be used instead, it would be possible to handle binary data. However, PDFs and images often would likely run up against the record length limit.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">If your RDB has longer rows or binary data in BLOB or CLOB columns for example, forgo FieldShield in favor of DarkShield, and use the <\/span><a href=\"https:\/\/www.iri.com\/blog\/data-protection\/finding-and-masking-pii-in-relational-databases-with-the-darkshield-rdb-wizard\/\"><span style=\"font-weight: 400;\">DarkShield RDB search\/mask job wizard<\/span><\/a><span style=\"font-weight: 400;\">, or write a program to call the <\/span><a href=\"https:\/\/www.iri.com\/blog\/data-protection\/iri-darkshield-rdb-rpc-api\/\"><span style=\"font-weight: 400;\">DarkShield-RDB RPC API<\/span><\/a><span style=\"font-weight: 400;\"> to mask all the DB data the same way.\u00a0<\/span><\/p>\n<h4><strong>FieldShield Job Script Examples Utilizing the Field-Level DarkShield Function\u00a0<\/strong><\/h4>\n<h5><span style=\"font-weight: 400;\">1. Masking an Unstructured Text File<\/span><\/h5>\n<h6><span style=\"font-weight: 400;\">This example takes an unstructured text file and sends each line as text to be searched and masked by the DarkShield API. The length of each line must not exceed 64 KB. <\/span><\/h6>\n<h6><span style=\"font-weight: 400;\">Unmasked Input File<\/span><\/h6>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-17374\" src=\"\/blog\/wp-content\/uploads\/2024\/03\/unmasked-input-300x66.png\" alt=\"\" width=\"491\" height=\"108\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/unmasked-input-300x66.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/unmasked-input.png 638w\" sizes=\"(max-width: 491px) 100vw, 491px\" \/><\/p>\n<h6><span style=\"font-weight: 400;\">FieldShield Job Script<\/span><\/h6>\n<pre><span style=\"font-weight: 400;\">\/INFILE=example.txt<\/span>\r\n<span style=\"font-weight: 400;\">\/FIELD=(FIELD1, SEPARATOR=\"\\t\", position=1)<\/span>\r\n<span style=\"font-weight: 400;\">\/REPORT<\/span>\r\n<span style=\"font-weight: 400;\">\/OUTFILE=output<\/span>\r\n<span style=\"font-weight: 400;\">\/FIELD=(FIELD1_mask=darkshield_api_mask(FIELD1, \"FSC\", \"FMC\", \"http:\/\/localhost:8959\/api\/darkshield\/files\/fileSearchContext.mask\", \"text\/plain\"), position=1, separator=\"\\t\")<\/span>\r\n<span style=\"font-weight: 400;\"># FSC- File Search Context name<\/span>\r\n<span style=\"font-weight: 400;\"># FMC- File Mask Context name<\/span>\r\n<span style=\"font-weight: 400;\"># URL of DarkShield API endpoint<\/span>\r\n<span style=\"font-weight: 400;\"># Optional content-type<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">This job uses these <\/span><span style=\"font-weight: 400;\"><em>file<\/em> search and file mask contexts already created (defined as follows):<\/span><\/p>\n<h6><span style=\"font-weight: 400;\">Files API Search Context<\/span><\/h6>\n<pre><span style=\"font-weight: 400;\">{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cFSC\u201d,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"matchers\": [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cSearchContext\u201d,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"searchContext\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0}<\/span><\/pre>\n<h6><span style=\"font-weight: 400;\">Files API Mask Context<\/span><\/h6>\n<pre><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cFMC\u201d,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"rules\": [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cMaskContext\u201d,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"maskContext\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0}<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">These file API contexts above reference the search and mask contexts from the <em>base<\/em>\u00a0API below to define a search matcher for SSNs and email addresses (based on regular expression patterns), and a hashing rule for emails and a partial string redaction rule for SSNs:<\/span><\/p>\n<h6><span style=\"font-weight: 400;\">Base API Search Context<\/span><\/h6>\n<pre><span style=\"font-weight: 400;\">\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cSearchContext,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"matchers\": [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"SsnMatcher\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"pattern\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"pattern\": \"\\b(\\d{3}[-]?\\d{2}[-]?\\d{4})\\b\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"EmailMatcher\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"pattern\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"pattern\": \"\\b[\\w._%+-]+@[\\w.-]+\\.[A-Za-z]{2,4}\\b\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0}<\/span><\/pre>\n<h6><span style=\"font-weight: 400;\">Base API Mask Context<\/span><\/h6>\n<pre><span style=\"font-weight: 400;\">\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cMaskContext\u201d,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"rules\": [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"HashEmailRule\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"cosort\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"expression\": \"hash_sha2(${EMAIL})\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"RedactSsnRule\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"cosort\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"expression\": \"replace_chars(${SSN},'*',1,3,'*',5,2)\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"ruleMatchers\": [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"EmailRuleMatcher\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"name\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"rule\": \"HashEmailRule\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"pattern\": \"EmailMatcher\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"SsnRuleMatcher\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"name\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"rule\": \"RedactSsnRule\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"pattern\": \"SsnMatcher\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0}<\/span><\/pre>\n<h6><span style=\"font-weight: 400;\">Masked Output File<\/span><\/h6>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-17375 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2024\/03\/masked-output-300x57.png\" alt=\"\" width=\"584\" height=\"111\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/masked-output-300x57.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/masked-output-768x146.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/masked-output.png 828w\" sizes=\"(max-width: 584px) 100vw, 584px\" \/><\/p>\n<h5><span style=\"font-weight: 400;\">2. Masking PII in an XML Column of a RDB Table<\/span><\/h5>\n<p><span style=\"font-weight: 400;\">This example reads data from a database table with a column that contains XML, and writes the masked data to a target table in another schema with the same structure.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The \u2018datum\u2019 column contains the XML. This column has the DarkShield function applied, which will send the data from that column to the DarkShield API for searching and masking. The XML content-type allows for file-type-specific search matchers and filters like <\/span><a href=\"https:\/\/www.w3schools.com\/xml\/xml_xpath.asp\"><span style=\"font-weight: 400;\">XML paths<\/span><\/a><span style=\"font-weight: 400;\"> to be used.<\/span><\/p>\n<h6><span style=\"font-weight: 400;\">Source Table<\/span><\/h6>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-17376\" src=\"\/blog\/wp-content\/uploads\/2024\/03\/source-table-300x25.png\" alt=\"\" width=\"708\" height=\"59\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/source-table-300x25.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/source-table-768x64.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/source-table.png 1000w\" sizes=\"(max-width: 708px) 100vw, 708px\" \/><\/p>\n<h6><\/h6>\n<h6><span style=\"font-weight: 400;\">FieldShield Job Script<\/span><\/h6>\n<pre><span style=\"font-weight: 400;\">\/INFILES=\"devonk.tester2;DSN=localSQLSERVER;EUID=qq0zq\/IvfdnDyH1FLfcytw==;EPWD=m9xgjH0iJvBAGf7oyn418Q==;\"<\/span>\r\n<span style=\"font-weight: 400;\">\/PROCESS=ODBC<\/span>\r\n<span style=\"font-weight: 400;\">\/ALIAS=LOCALSQLSERVER_dbo_transactions<\/span>\r\n<span style=\"font-weight: 400;\">\/FIELD=(ID, TYPE=ASCII, POSITION=1, SEPARATOR=\"\\t\", ODEF=\"ID\")<\/span>\r\n<span style=\"font-weight: 400;\">\/FIELD=(XML_COL, TYPE=ASCII, POSITION=2, SEPARATOR=\"\\t\", ODEF=\"datum\")<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\/REPORT<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\/OUTFILE=out # direct mapping of input table to a flat file (no value changes)<\/span>\r\n<span style=\"font-weight: 400;\">\r\n\/OUTFILE=\"dbo.xml_masked;DSN=localSQLSERVER;EUID=qq0zq\/IvfdnDyH1FLfcytw==;EPWD=m9xgjH0iJvBAGf7oyn418Q==;\"<\/span>\r\n<span style=\"font-weight: 400;\">\/PROCESS=ODBC<\/span>\r\n<span style=\"font-weight: 400;\">\/CREATE<\/span>\r\n<span style=\"font-weight: 400;\">\/FIELD=(ID, TYPE=NUMERIC, PRECISION=0, POSITION=1, SEPARATOR=\"\\t\", ODEF=\"ID\")<\/span>\r\n<span style=\"font-weight: 400;\">\/FIELD=(XML_MASKED=darkshield_api_mask(XML_COL, \"FileSearchContext\", \"FileMaskContext\", \"http:\/\/localhost:8959\/api\/darkshield\/files\/fileSearchContext.mask\", \"application\/xml\"), TYPE=ASCII, POSITION=2, SEPARATOR=\"\\t\", ODEF=\"datum\")<\/span><\/pre>\n<p><span style=\"font-weight: 400;\"><br \/>\nOnce again, both sets of contexts are needed; i.e., first the file search and mask contexts, and then the base search and mask contexts they reference. <\/span><span style=\"font-weight: 400;\">The <\/span><i><span style=\"font-weight: 400;\">search context<\/span><\/i><span style=\"font-weight: 400;\"> in this case specifies the discovery of phone numbers and emails through matches to regular expression patterns. The <\/span><i><span style=\"font-weight: 400;\">mask context <\/span><\/i><span style=\"font-weight: 400;\">pairs each search matcher to a <\/span><a href=\"https:\/\/www.iri.com\/solutions\/data-masking\/static-data-masking\"><span style=\"font-weight: 400;\">data masking rule<\/span><\/a><span style=\"font-weight: 400;\">; in this case phone numbers are paired to a format-preserving encryption masking rule, while emails are paired with a hashing rule.<\/span><\/p>\n<h6><span style=\"font-weight: 400;\">Files API Search Context<\/span><\/h6>\n<pre><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0{<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Name\": \u201cFileSearchContext\u201d,<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"matchers\": [<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cSearchContext\u201d,<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"searchContext\"<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"NameMatcher\",<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"jsonPath\",<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"jsonPath\": \"$..name\"<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"NameMatcher\",<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"xmlPath\",<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"xmlPath\": \"\/\/name\"<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0}<\/span><\/i><\/pre>\n<h6><span style=\"font-weight: 400;\">Files API Mask Context<\/span><\/h6>\n<pre><i><span style=\"font-weight: 400;\">\u00a0{<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cFileMaskContext\u201d,<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"rules\": [<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cMaskContext\u201d,<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"maskContext\"<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"configs\": {<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"json\": {<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"prettyPrint\": true<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/i>\r\n<i><span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0}<\/span><\/i><\/pre>\n<h6><span style=\"font-weight: 400;\">Base API Search Context<\/span><\/h6>\n<pre><span style=\"font-weight: 400;\">\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cSearchContext\u201d,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"matchers\": [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"EmailMatcher\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"pattern\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"pattern\": \"\\\\b[\\\\w._%+-]+@[\\\\w.-]+\\\\.[A-Za-z]{2,4}\\\\b\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"PhoneMatcher\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"pattern\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"pattern\": \"\\\\b(\\+?1?([ .-]?)?)?(\\\\(?([2-9]\\d{2})\\\\)?([ .-]?)?)([2-9]\\\\d{2})([ .-]?)(\\\\d{4})(?: #?[eE][xX][tT]\\\\.? \\\\d{2,6})?\\\\b\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"NameMatcher\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"ner\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"modelUrl\": \u201chttp:\/\/opennlp.sourceforge.net\/models-1.5\/en-ner-person.bin\u201d,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"sentenceDetectorUrl\": \u201chttp:\/\/opennlp.sourceforge.net\/models-1.5\/en-sent.bin\u201d,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"tokenizerUrl\": \u201chttp:\/\/opennlp.sourceforge.net\/models-1.5\/en-token.bin\u201d<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0}<\/span><\/pre>\n<h6><span style=\"font-weight: 400;\">Base API Mask Context<\/span><\/h6>\n<pre><span style=\"font-weight: 400;\">\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \u201cMaskContext\u201d,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"rules\": [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"HashRule\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"cosort\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"expression\": \"hash_sha2(${INPUT})\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"FpeRule\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"cosort\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"expression\": \"enc_fp_aes256_alphanum(${INPUT})\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"ruleMatchers\": [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"FpeRuleMatcher\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"name\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"rule\": \"FpeRule\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"pattern\": \"PhoneMatcher|NameMatcher\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"HashRuleMatcher\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"name\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"rule\": \"HashRule\",<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"pattern\": \"EmailMatcher\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0}<\/span><\/pre>\n<h6><span style=\"font-weight: 400;\">Target Table<\/span><\/h6>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-17377 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2024\/03\/target-table-300x35.png\" alt=\"\" width=\"711\" height=\"83\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/target-table-300x35.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/target-table-1024x118.png 1024w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/target-table-768x89.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/target-table.png 1081w\" sizes=\"(max-width: 711px) 100vw, 711px\" \/><\/p>\n<h4><strong>Using the IRI Workbench Rule Dialog<\/strong><\/h4>\n<p><span style=\"font-weight: 400;\">It is also possible to apply the DarkShield API call as a field-level data masking rule (<a href=\"https:\/\/www.iri.com\/blog\/data-protection\/iri-data-classification\/\">associated with a data class<\/a>) automatically applied to multiple tables or files through the data rule dialog in IRI Workbench:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-17386 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2024\/03\/MaskingRuleDialog.png\" alt=\"\" width=\"511\" height=\"710\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/MaskingRuleDialog.png 511w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/MaskingRuleDialog-216x300.png 216w\" sizes=\"(max-width: 511px) 100vw, 511px\" \/><\/p>\n<p>Selecting the DarkShield API Call option will open up the specification options in this dialog page:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-17387 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2024\/03\/FS-DSdialog.png\" alt=\"\" width=\"834\" height=\"710\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/FS-DSdialog.png 834w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/FS-DSdialog-300x255.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/FS-DSdialog-768x654.png 768w\" sizes=\"(max-width: 834px) 100vw, 834px\" \/><\/p>\n<p>As you move through the argument blanks, a description of what to enter is provided, as shown above. Note that File Search and File Mask contexts names automatically subsume your previously defined base (text) API search and mask contexts so they do not have to be respecified here.<\/p>\n<h4><strong>End Notes<\/strong><\/h4>\n<p><span style=\"font-weight: 400;\">Other possible common applications of this function not demonstrated here (but following a similar framework) include masking unstructured text like notes or emails in a database column, masking JSON in a database column, or masking only portions of a field.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A bad response from any request sent to the DarkShield API by this field-level function will result in an error code being assigned to the external transform structure (CE_EXT_ABORT) that gets propagated to the sortcl executable. An error message will appear at runtime in the FieldShield (SortCL) console.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you are interested in using the FieldShield or DarkShield data masking tools, separately or in combination, email <\/span><a href=\"mailto:info@iri.com\"><span style=\"font-weight: 400;\">info@iri.com<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Calling DarkShield from FieldShield: Reaching the DarkShield API with a Field-Level Transformation Function Overview\u00a0 It is now possible to use an IRI DarkShield function from within an IRI FieldShield job to find and mask one or more instances of PII floating inside the text of specified columns. This feature allows you to leverage the best<\/p>\n<div><a class=\"btn-filled btn\" href=\"https:\/\/www.iri.com\/blog\/data-protection\/masking-floating-pii-in-database-columns\/\" title=\"Masking Floating PII in Database Columns\">Read More<\/a><\/div>\n","protected":false},"author":119,"featured_media":17382,"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],"tags":[1494,1305,1762,1778,1738,520,1777],"class_list":["post-17366","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-protection","tag-darkshield-api","tag-data-masking-tools","tag-database-data-discovery","tag-database-data-masking","tag-floating-pii","tag-iri-fieldshield","tag-masking-pii-in-an-xml-column"],"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>Masking Floating PII in Database Columns - IRI<\/title>\n<meta name=\"description\" content=\"Calling DarkShield from FieldShield: Reaching the DarkShield API with a Field-Level Transformation Function.\u00a0It is now possible to use an IRI DarkShield function from within an IRI FieldShield job to find and mask one or more instances of PII floating inside the text of specified columns. This feature allows you to leverage the best of both data masking tools in certain use cases, particularly when the functional extensibility of FieldShield through SortCL scripting is required.\" \/>\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-transformation2\/masking-floating-pii-in-database-columns\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Masking Floating PII in Database Columns\" \/>\n<meta property=\"og:description\" content=\"Calling DarkShield from FieldShield: Reaching the DarkShield API with a Field-Level Transformation Function.\u00a0It is now possible to use an IRI DarkShield function from within an IRI FieldShield job to find and mask one or more instances of PII floating inside the text of specified columns. This feature allows you to leverage the best of both data masking tools in certain use cases, particularly when the functional extensibility of FieldShield through SortCL scripting is required.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/\" \/>\n<meta property=\"og:site_name\" content=\"IRI\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-19T21:11:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-22T19:47:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1110\" \/>\n\t<meta property=\"og:image:height\" content=\"532\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Devon Kozenieski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Devon Kozenieski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 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-transformation2\/masking-floating-pii-in-database-columns\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/\"},\"author\":{\"name\":\"Devon Kozenieski\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/de972c035aaeecfc40a3ae2ea5ff7ba1\"},\"headline\":\"Masking Floating PII in Database Columns\",\"datePublished\":\"2024-03-19T21:11:48+00:00\",\"dateModified\":\"2024-05-22T19:47:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/\"},\"wordCount\":1116,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png\",\"keywords\":[\"Darkshield API\",\"data masking tools\",\"database data discovery\",\"database data masking\",\"Floating PII\",\"IRI FieldShield\",\"masking PII in an XML column\"],\"articleSection\":[\"Data Masking\/Protection\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/\",\"url\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/\",\"name\":\"Masking Floating PII in Database Columns - IRI\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png\",\"datePublished\":\"2024-03-19T21:11:48+00:00\",\"dateModified\":\"2024-05-22T19:47:53+00:00\",\"description\":\"Calling DarkShield from FieldShield: Reaching the DarkShield API with a Field-Level Transformation Function.\u00a0It is now possible to use an IRI DarkShield function from within an IRI FieldShield job to find and mask one or more instances of PII floating inside the text of specified columns. This feature allows you to leverage the best of both data masking tools in certain use cases, particularly when the functional extensibility of FieldShield through SortCL scripting is required.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#primaryimage\",\"url\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png\",\"contentUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png\",\"width\":1110,\"height\":532},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.iri.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Masking Floating PII in Database Columns\"}]},{\"@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\/de972c035aaeecfc40a3ae2ea5ff7ba1\",\"name\":\"Devon Kozenieski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e4c421588c1a85dd9a76146fe15528f7?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e4c421588c1a85dd9a76146fe15528f7?s=96&d=blank&r=g\",\"caption\":\"Devon Kozenieski\"},\"url\":\"https:\/\/www.iri.com\/blog\/author\/devonk\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Masking Floating PII in Database Columns - IRI","description":"Calling DarkShield from FieldShield: Reaching the DarkShield API with a Field-Level Transformation Function.\u00a0It is now possible to use an IRI DarkShield function from within an IRI FieldShield job to find and mask one or more instances of PII floating inside the text of specified columns. This feature allows you to leverage the best of both data masking tools in certain use cases, particularly when the functional extensibility of FieldShield through SortCL scripting is required.","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-transformation2\/masking-floating-pii-in-database-columns\/","og_locale":"en_US","og_type":"article","og_title":"Masking Floating PII in Database Columns","og_description":"Calling DarkShield from FieldShield: Reaching the DarkShield API with a Field-Level Transformation Function.\u00a0It is now possible to use an IRI DarkShield function from within an IRI FieldShield job to find and mask one or more instances of PII floating inside the text of specified columns. This feature allows you to leverage the best of both data masking tools in certain use cases, particularly when the functional extensibility of FieldShield through SortCL scripting is required.","og_url":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/","og_site_name":"IRI","article_published_time":"2024-03-19T21:11:48+00:00","article_modified_time":"2024-05-22T19:47:53+00:00","og_image":[{"width":1110,"height":532,"url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png","type":"image\/png"}],"author":"Devon Kozenieski","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Devon Kozenieski","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#article","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/"},"author":{"name":"Devon Kozenieski","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/de972c035aaeecfc40a3ae2ea5ff7ba1"},"headline":"Masking Floating PII in Database Columns","datePublished":"2024-03-19T21:11:48+00:00","dateModified":"2024-05-22T19:47:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/"},"wordCount":1116,"commentCount":0,"publisher":{"@id":"https:\/\/www.iri.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png","keywords":["Darkshield API","data masking tools","database data discovery","database data masking","Floating PII","IRI FieldShield","masking PII in an XML column"],"articleSection":["Data Masking\/Protection"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/","url":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/","name":"Masking Floating PII in Database Columns - IRI","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#primaryimage"},"image":{"@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png","datePublished":"2024-03-19T21:11:48+00:00","dateModified":"2024-05-22T19:47:53+00:00","description":"Calling DarkShield from FieldShield: Reaching the DarkShield API with a Field-Level Transformation Function.\u00a0It is now possible to use an IRI DarkShield function from within an IRI FieldShield job to find and mask one or more instances of PII floating inside the text of specified columns. This feature allows you to leverage the best of both data masking tools in certain use cases, particularly when the functional extensibility of FieldShield through SortCL scripting is required.","breadcrumb":{"@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#primaryimage","url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png","contentUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png","width":1110,"height":532},{"@type":"BreadcrumbList","@id":"https:\/\/www.iri.com\/blog\/data-transformation2\/masking-floating-pii-in-database-columns\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.iri.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Masking Floating PII in Database Columns"}]},{"@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\/de972c035aaeecfc40a3ae2ea5ff7ba1","name":"Devon Kozenieski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e4c421588c1a85dd9a76146fe15528f7?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e4c421588c1a85dd9a76146fe15528f7?s=96&d=blank&r=g","caption":"Devon Kozenieski"},"url":"https:\/\/www.iri.com\/blog\/author\/devonk\/"}]}},"jetpack_featured_media_url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2024\/03\/Featured-image-Masking-Floating-PII-in-Database-Columns.png","_links":{"self":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/17366"}],"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\/119"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/comments?post=17366"}],"version-history":[{"count":15,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/17366\/revisions"}],"predecessor-version":[{"id":17534,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/17366\/revisions\/17534"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media\/17382"}],"wp:attachment":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media?parent=17366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/categories?post=17366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/tags?post=17366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}