Sensitive Data Masking

Once you mark information that must not be exposed—national ID numbers, phone numbers, account numbers—any teammate who connects with a masked role sees it hidden, replaced on the server. Two kinds are provided: column masking, which hides an entire column, and pattern masking, which hides only the parts of a value that match a regular expression. The real value is never sent to the client, so it can't be recovered even by inspecting the browser.

How it works

Sensitive data masking is role-based. When you set a role as a "masking target" in the project, designated sensitive data is hidden on the server before it reaches teammates connecting with that role. The owner (OWNER) and full-permission roles always see the original values.

Both of the following settings are required:

  • ① Masked roles — which roles have values hidden from them (set in project settings)
  • ② What to hide — designate which columns to hide (column masking), or register which patterns to hide (pattern masking)

Values are hidden on the server. Masked roles never receive the original value, so there's no way to reveal it.

Sensitive data masking is available only in online team projects. It does not apply in offline (personal) mode.

There are two kinds of masking. Column masking hides an entire designated column (steps 1–2), while pattern masking hides only the parts of a value that match a regular expression (see below). When you set a role as a masking target, both apply together.

Step 1 · Configure masked roles

Configuring masked roles

Under Role Permissions in project settings, turn on "Sensitive Data Masking" for a role to make it a masking target. At least one role must have masking enabled before you can designate columns.

RoleCan be maskedDescription
Owner (OWNER)No (always original)The project owner always sees full values and is excluded from masking.
Full-permission roleNo (always original)A role granted full permissions is never masked.
Manager · DBA · MemberYesWith masking on, a role sees designated sensitive columns as ****.

Role hierarchy and automatic inheritance

Masking follows a trust hierarchy, ordered Manager > DBA > Member. Masking a higher role automatically masks the lower roles too, on the principle that a lower role must never see more than a higher one. (e.g. masking Manager also masks DBA and Member.)

TIP

Once you save the masking settings, they take effect immediately in any ERD, table editor, or result view that's already open—no need to reopen the project.

Step 2 · Mark sensitive columns

Marking a sensitive column

Right-click the column you want to hide and choose "Mark as sensitive" or "Unmark sensitive" from the context menu. Marked columns show a lock (shield) icon. Designations are saved to the server instantly and shared with every project member.

You can designate columns in these places.

  • ERD table node — right-click a column on a table in the canvas
  • Table editor — right-click in the column list
  • Object detail (view) column list — view columns can be designated the same way

Designate / unmark permissions (asymmetric)

ActionWho can do itReason
Designate (add)Owner, or a role that is not a masking targetBecause it hides values rather than exposing them, it's allowed fairly broadly. Masking-target roles, however, cannot designate columns.
Unmark (remove)Owner onlyUnmarking exposes the value to masking targets. Only the owner may decide to reverse that exposure.
Designation menu on a non-text column

Only text-type columns can be designated. In tables and ERDs, only text types such as VARCHAR and TEXT are eligible. Numeric types like DECIMAL and INT, as well as date and boolean types, are not, so "Mark as sensitive" doesn't appear in the right-click menu for them. Sensitive data—national ID numbers, phone numbers, emails, and the like—is mostly text, and the restriction keeps masked values consistent to edit as plain text.

PK · FK columns cannot be designated. Primary and foreign keys are the basis for editing and joins, so if an already-designated column later becomes a PK/FK, its sensitive designation is removed automatically.

Pattern masking

Where column masking hides a whole designated column, pattern masking scans the content of a value with a regular expression and hides only the matching parts. That means a phone number or ID that appears mid-sentence inside a free-text column such as a memo or note can be masked in place. It complements column masking by catching sensitive data scattered inside text.

Pattern registration button

Registering a pattern

In project settings → Role Permissions, turn on "Sensitive Data Masking" and the Pattern masking item appears. Click Manage Patterns to add one. In the dialog, enter a name · regular expression · masking mode, and type sample text into the preview to see exactly how it will be masked in real time. Registered patterns are shared across the whole project.

Add pattern dialog

Masking modes

ModeWhat it doesExample
PartialKeeps a few leading/trailing characters and hides the rest.010-1234-5678010-****-****
FullHides the entire match.900101-1234567******-*******
TemplateKeeps only certain parts (e.g. the domain) and rebuilds the value (mark parts to keep with $1·$2).hong@example.com***@example.com
TIP

Common patterns (mobile phone, national ID, credit card, email) can be filled in with one click using the Quick start buttons in the dialog.

Its scope and editing behavior are the same as column masking. Values are hidden on the server and carried into SQL results, AI results, and exports; editing a column where a pattern actually matched starts with an empty value.

Applies to text values only. Because it works on content, without surrounding context it may hide unintended values (such as numbers that look like amounts). Check with the preview before saving, and narrow the scope by including nearby words in the regex (e.g. "salary") if needed.

Where masking applies

Masking applied

For masking-target roles, sensitive column values come through as **** across all of the paths below.

  • SQL editor result grid
  • AI query results — the AI model also receives only ****, never the original.
  • Result export — files exported as CSV, Excel, etc. also store the masked value.
  • Preview panel

Editing a masked cell

Editing a masked cell

A masked cell does not show the original, so opening the editor starts with an empty value. Saving without entering anything leaves the value unchanged; entering a new value runs an UPDATE with it. In other words, the old value is never revealed even while editing. Note that a masked column used as a primary key (PK) cannot be edited.

What gets masked

Not only the value of a sensitive column queried directly, but also results derived from it (a substring, a concatenation with another value, etc.) are hidden as much as possible. When in doubt, it errs toward preventing exposure.

Notes & limits

  • Works only in online team projects; it does not apply in offline (personal) mode.
  • The owner and full-permission roles are never masked under any circumstances.
  • If no role is a masking target, column designation is disabled.
  • PK · FK columns are automatically excluded from designation.
  • Only the owner can unmark a designation.
  • Pattern masking hides parts of text values based on their content, and applies together with column masking whenever a role is a masking target.