预定义的数据掩蔽函数
pg_columnmask 扩展提供了用 C 语言(执行速度更快)编写的内置实用程序函数,可用作 pg_columnmask 策略的掩蔽表达式。
mask_text
一个使用可配置的可见性选项掩蔽文本数据的函数。
参数:
| 参数 | DataType | 描述 |
|---|---|---|
input |
TEXT |
要掩蔽的原始文本字符串 |
mask_char |
CHAR(1) |
用于掩蔽的字符(默认值:“X”) |
visible_prefix |
INT |
输入文本开头将保持未掩蔽状态的字符数(默认值:0) |
visible_suffix |
INT |
输入文本末尾将保持未掩蔽状态的字符数(默认值:0) |
use_hash_mask |
BOOLEAN |
如果为 TRUE,则使用基于哈希的掩蔽,而不是 mask_char(默认值:FALSE) |
例 :使用不同的掩蔽选项
使用默认“X”字符掩蔽整个输入字符串
postgres=> SELECT pgcolumnmask.mask_text('Hello World'); mask_text ------------- XXXXXXXXXXX
使用 mask_char 参数通过不同的字符来掩蔽文本输入
postgres=> SELECT pgcolumnmask.mask_text('Hello World', '*'); mask_text ------------- ***********
使用 visible_prefix 和 visible_suffix 参数来控制文本开头和结尾处有多少个字符保持未掩蔽状态
postgres=> SELECT pgcolumnmask.mask_text('Hello World', '*', 5, 1); mask_text ------------- Hello*****d
当 use_hash_mask 为 true 时,使用随机字符掩蔽输入字符串而忽略 mask_char 参数,但 visible_prefix 和 visible_suffix 仍然有效
postgres=> SELECT pgcolumnmask.mask_text('Hello World', '*', 2, 2, true); mask_text ------------- Hex36dOHild
mask_timestamp
| 参数 | DataType | 描述 |
|---|---|---|
ts_to_mask |
TIMESTAMP |
要掩蔽的原始时间戳 |
mask_part |
TEXT |
指定要掩蔽时间戳的哪个部分(默认值:“全部”)。有效值:“年”、“月”、“日”、“小时”、“分钟”、“秒”、“全部” |
mask_value |
TIMESTAMP |
要用于掩蔽的时间戳值(默认值:“1900-01-01 00:00:00”) |
例 使用 mask_timestamps
这些示例演示了将时间戳完全掩蔽为默认值、部分掩蔽特定时间戳组成部分(仅限年份)以及使用自定义替换值进行掩蔽。
将输入值完全掩蔽为默认时间戳
postgres=> SELECT pgcolumnmask.mask_timestamp('2023-06-15 14:30:00'); mask_timestamp --------------------- 1900-01-01 00:00:00
仅掩蔽时间戳的一部分,例如仅掩蔽年份
postgres=> SELECT pgcolumnmask.mask_timestamp('2023-06-15 14:30:00', 'year'); mask_timestamp --------------------- 1900-06-15 14:30:00
要更改时间戳的掩蔽值,请使用 mask_value 参数
postgres=> SELECT pgcolumnmask.mask_timestamp('2023-06-15 14:30:00', 'all', '2012-12-12 12:12:12'); mask_timestamp --------------------- 2012-12-12 12:12:12
mask_timestamp
一个在保留电子邮件结构的同时掩蔽电子邮件地址的函数。
| 参数 | DataType | 描述 |
|---|---|---|
input |
TEXT |
要掩蔽的原始电子邮件地址 |
mask_char |
CHAR(1) |
用于掩蔽的字符(默认值:“X”) |
mask_local |
BOOLEAN |
如果为 TRUE,则掩蔽电子邮件的本地部分(位于 @ 之前)(默认值:TRUE) |
mask_domain |
BOOLEAN |
如果为 TRUE,则掩蔽电子邮件的域部分(位于 @ 之后)(默认值:TRUE) |
例 使用 mask_email
这些示例演示了完全电子邮件掩蔽、自定义掩蔽字符以及对电子邮件地址的本地部分或域部分进行选择性掩蔽。
完全掩蔽
postgres=> SELECT pgcolumnmask.mask_email('user@example.com'); mask_email ------------------ XXXX@XXXXXXX.com
使用 mask_char 更改用于掩蔽的字符
postgres=> SELECT pgcolumnmask.mask_email('user@example.com', '*'); mask_email ------------------ ****@*******.com
使用 mask_local 和 mask_domain 控制本地和域的掩蔽
postgres=> SELECT pgcolumnmask.mask_email('user@example.com', '*', true, false); mask_email ------------------ ****@example.com postgres=> SELECT pgcolumnmask.mask_email('user@example.com', '*', false, true); mask_email ------------------ user@*******.com