AnalyticDB for PostgreSQLは、動的データマスキング機能とさまざまなマスキング機能を提供します。 この機能を使用すると、テーブルの列をマスクし、特定のユーザーのマスキングポリシーを設定できます。 異なるマスキング関数を使用して、マスクされたデータを異なるユーザに示すことができる。 これにより、機密データが保護され、データセキュリティが向上します。 このトピックでは、動的データマスキング機能の使用方法について説明します。
背景情報
データマスキングは、機密データが不正なユーザーに明らかにされるのを防ぐことによってデータベースのプライバシーを保護するデータ匿名化方法です。 動的データマスキングは、カスタムマスキングポリシーを使用して、元のデータを変更することなく、機密データの非特権ユーザーへの公開を効率的に制限します。
動的データマスキング機能を使用するには、機密列ごとにマスキング関数を設定する必要があります。 AnalyticDB for PostgreSQLは、ほとんどのデータマスキングシナリオに適した一般的なマスキング関数を提供し、カスタムマスキング関数を設定できます。 機密列にマスキング関数を設定すると、列値のクエリ結果がマスキング関数の出力として他のユーザーに表示されます。 例えば、携帯電話番号13900001111は、平文でデータベースに格納される。 テーブル所有者やRDS_SUPERUSER権限を持つデータベースアカウントなどの特権ユーザーは元の値を表示できますが、他のユーザーはマスクされた結果のみを表示できます。 例: 139 **** 1111
CREATE REDACTION POLICYステートメントを使用して、テーブルの特定の重要な列にマスキング関数を設定し、マスキング条件を決定する式を指定できます。 マスキングポリシーを作成したら、ALTER REDACTION policyステートメントを使用してポリシーを変更するか、DROP REDACTION POLICYステートメントを使用してポリシーを削除します。 REDACTION_POLICIESおよびREDACTION_COLUMNSシステムビューを使用して、マスキングポリシーとマスクされた列に関する情報を照会できます。
前提条件
V6.6以降のAnalyticDB for PostgreSQL V6.0インスタンス、またはV7.0.3以降のAnalyticDB for PostgreSQL V7.0インスタンスが作成されます。 AnalyticDB For PostgreSQLインスタンスのマイナーバージョンを照会および更新する方法については、「マイナーエンジンバージョンの照会」および「マイナーエンジンバージョンの更新」をご参照ください。
サーバーレスモードのAnalyticDB for PostgreSQLインスタンスは、動的データマスキングをサポートしていません。
制限事項
RDS_SUPERUSER権限を持つテーブル所有者とデータベースアカウントのみが、マスキングポリシーを作成、変更、削除できます。
RDS_SUPERUSER権限を持つテーブル所有者とデータベースアカウントは、マスキングポリシーに関係なく、常にプレーンテキストデータを表示できます。
COPY TOまたはINSERT INTOステートメントを使用して、マスクされたデータをエクスポートできます。 しかし、マスクされたデータに対する計算操作は、データマスキングが不可逆であるため無意味である。標準テーブルに対しては動的データマスキングポリシーを作成できますが、システムテーブル、外部テーブル、一時テーブル、未ログテーブル、ビュー、またはマテリアライズドビューに対しては作成できません。
各マスキングポリシーは、テーブルに対応する。 各マスキングポリシーは、テーブルのすべてのマスクされた列に使用するマスキング関数を定義します。 テーブルのさまざまな列に対して、さまざまなマスキング関数とマスキングルールを設定できます。 各列に1つのマスキング関数のみを設定できます。
マスクされたデータに対する計算操作は無意味です。 必要な機密列に対してのみマスキングを実行することを推奨します。
使用法
還元ポリシーの作成
CREATE REDACTION POLICYステートメントを使用して、テーブルのマスキングポリシーを作成できます。
構文
CREATE REDACTION POLICY <policy_name> ON <table_name>
[ WHEN (<when_expression>) ]
[ ADD COLUMN <column_name> WITH <mask_function_name> ( [ argument [, ...] ] )] [, ... ];Parameters
パラメーター | 説明 |
policy_name | マスキングポリシーの名前。 |
table_name | マスキングポリシーを作成するテーブルの名前。 |
WHEN (<when_expression>) | マスキングポリシーが有効になる式を定義します。 マスキングポリシーは、式がtrueに設定されている場合にのみ有効です。 WHERE句を使用してマスキングポリシーの有効ユーザーの範囲を指定する場合、次の制限が適用されます。
|
column_name | テーブル内でマスクする列の名前。 |
mask_function_name | マスキング関数の名前。 マスキング関数は、マスクされた列の処理方法を決定します。 マスキング関数の戻り値は、マスクされた列と同じ型でなければなりません。 |
引数 | マスキング関数の引数。 説明 AnalyticDB for PostgreSQLは、さまざまなマスキング関数を提供します。 SQLまたはPL/pgSQLを使用して、カスタムマスキング関数を設定することもできます。 |
例
テーブルを作成します。 テーブルの1つの列をマスクするカスタム関数を作成します。 bobにのみ有効なマスキングポリシーを設定します。
-- Create a table.
CREATE TABLE test_mask(id INT, name TEXT);
-- Create a custom function.
CREATE OR REPLACE FUNCTION mask_text(input_text text) RETURNS text AS $$
BEGIN
RETURN REPEAT('*', CHAR_LENGTH(input_text));
END;
$$ LANGUAGE plpgsql IMMUTABLE;
-- Configure a masking policy.
CREATE REDACTION POLICY test_mask_policy ON test_mask
WHEN (CURRENT_USER = 'bob')
ADD COLUMN name WITH mask_text(name);AnalyticDB for PostgreSQLの組み込みマスキング機能を使用して、マスキングポリシーを設定することもできます。 この例では、WHEN式をtrueに設定します。これは、マスキングポリシーがすべてのユーザーに対して有効になることを指定します。 組み込みマスキング関数の詳細については、このトピックの「付録: マスキング関数」を参照してください。
CREATE REDACTION POLICY test_mask_policy ON test_mask
WHEN (true)
ADD COLUMN name WITH mask_full_str(name);ALTER REDACTIONポリシー
ALTER REDACTION POLICYステートメントを使用して、テーブルのマスキングポリシーを変更できます。
構文
マスキングポリシーが有効になる式を変更します。
ALTER REDACTION POLICY <policy_name> ON <table_name> WHEN (<new_when_expression>);テーブルのマスキングポリシーを有効または無効にします。
ALTER REDACTION POLICY <policy_name> ON <table_name> ENABLE | DISABLE;マスキングポリシーの名前を変更します。
ALTER REDACTION POLICY <policy_name> ON <table_name> RENAME TO <new_policy_name>;マスクされた列を追加、変更、または削除します。
ALTER REDACTION POLICY policy_name ON table_name Action;上記の文では、Actionは次のいずれかの句になります。
ADD COLUMN <column_name> WITH <function_name> ( arguments ) | ALTER COLUMN <column_name> WITH <function_name> ( arguments ) | DROP COLUMN <column_name>
Parameters
パラメーター | 説明 |
policy_name | 変更するマスキングポリシーの名前。 |
table_name | マスキングポリシーを変更するテーブルの名前。 |
new_when_expression | マスキングポリシーが有効になる新しい式。 |
ENABLE | DISABLE | マスキングポリシーを有効にするかどうかを指定します。 有効な値:
|
new_policy_name | 新しいマスキングポリシーの名前。 |
column_name | テーブル内でマスクする列の名前。
|
function_name | マスキング関数の名前。 |
引数 | マスキング関数の引数。 |
例
マスキングポリシーが特定のロールに有効になるように式を変更します。
ALTER REDACTION POLICY mask_emp ON employees WHEN(current_user in ('alice', 'bob'));マスキングポリシーがすべてのユーザーに有効になるように式を変更します。 この場合、テーブルの所有者のみが平文データを表示できます。
ALTER REDACTION POLICY mask_emp ON employees WHEN(1=1);マスキングポリシーを有効または無効にします。
従業員の
ALTER REDACTION POLICY mask_emp ON employees DISABLE; ALTER REDACTION POLICY mask_emp ON employees ENABLE;マスキングポリシーの名前を変更します。
ALTER REDACTION POLICY mask_emp ON employees RENAME TO new_mask_emp;マスクされた列を追加します。
ALTER REDACTION POLICY mask_emp_new ON emp ADD COLUMN name WITH mask_none(name);マスクされた列のマスキング関数を変更します。
ALTER REDACTION POLICY mask_emp_new ON emp ALTER COLUMN name WITH mask_none(name);マスクされた列を削除します。
ALTER REDACTION POLICY mask_emp_new ON emp DROP COLUMN name;
ドロップ還元ポリシー
DROP REDACTION POLICYステートメントを使用して、テーブルのマスキングポリシーを削除できます。
構文
DROP REDACTION POLICY [ IF EXISTS ] <policy_name> ON <table_name>;パラメーター
パラメーター | 説明 |
IF EXISTS | 削除するマスキングポリシーが存在するかどうかを指定します。 マスキングポリシーが存在しない場合、エラーメッセージの代わりにNOTICEが返されます。 |
policy_name | 削除するマスキングポリシーの名前。 |
table_name | マスキングポリシーを削除するテーブルの名前。 |
マスクされたユーザーに適したSQL文
選択
動的データマスキングは、ユーザに対して透過的である。 マスキングポリシーを設定すると、関連する機密列は自動的にマスクされます。 ビジネスロジックを変更する必要はありません。
たとえば、employeesテーブルのphone列にマスキングポリシーを設定します。 phone列のマスキング条件が満たされると、SELECT phone FROM employees; ステートメントは、SELECT mask_func(phone) FROM employees; などのステートメントに自動的に書き換えられます。
マスクされた列に対する等価条件およびJOIN演算などの計算演算は、マスクされた列のマスク結果に対して実行される。 マスクされた列では計算操作を実行しないことを推奨します。 サンプルSELECTステートメント:
CREATE TABLE t1(phone TEXT);
SELECT employees.phone FROM employees JOIN t1 ON t1.phone = employees.phone;上記のSELECTステートメントは、次のステートメントに書き換えられます。
-- Equivalent query after data masking.
SELECT mask_func(employees.phone) FROM employees JOIN t1 ON t1.phone = mask_func(employees.phone);この例では、JOIN操作の結果は期待どおりではありません。 正しい計算結果を確保するために、redaction.scopeパラメーターを指定できます。 詳細については、このトピックの「データマスキングスコープ」を参照してください。
挿入 /更新 /削除
ほとんどの場合、テーブルがユーザーに対してマスクされている場合、ユーザーはテーブルに対するINSERT、UPDATE、またはDELETE権限を持っていません。 これは、テーブルに平文データを書き込んでも、マスキング結果しか得られないためである。 マスクされたユーザーにはSELECT権限のみを付与することを推奨します。
インサート
INSERTステートメントを使用してプレーンテキストデータをテーブルに挿入する場合、テーブルからマスクされたデータのみを照会できます。
-- For example, the phone column of the employees table is masked to the current user. INSERT INTO employees (id, name, ssn, phone, birthday, salary, email) VALUES (1, 'Sally Sample', '020-78-9345', '13900001111', '1961-02-02', 51234.34, 'sally.sample@alibaba.com'); -- Query the table after you perform an INSERT operation. postgres=> SELECT * FROM employees; id | name | ssn | phone | birthday | salary | email ----+--------------+-------------+-------------+------------+------------+-------------------------- 1 | Sally Sample | 020-78-9345 | 139****1111 | 1961-02-02 | $51,234.34 | sally.sample@alibaba.com (1 row)この例では、マスクされたユーザは、平文データがテーブルに書き込まれていても、
電話列のマスク結果を得る。更新
ほとんどの場合、UPDATEステートメントにはWHERE条件の計算が含まれます。 ただし、マスクされた列を含む計算結果は正しくない場合があります。 正しい計算結果を確保するために、redaction.scopeパラメーターを指定できます。 詳細については、このトピックの「データマスキングスコープ」を参照してください。
-- For example, the phone column of the employees table is masked to the current user. postgres=> UPDATE employees SET id = 2 WHERE phone = '13900001111'; UPDATE 0 -- Specify a data masking scope. postgres=> SET redaction.scope = 'query_except_equal'; SET -- Perform an UPDATE operation. postgres=> UPDATE employees SET id = 2 WHERE phone = '13900001111'; UPDATE 1削除
ほとんどの場合、DELETEステートメントにはWHERE条件の計算が含まれます。 マスクされた列を含むDELETEステートメントを実行する場合は、redaction.scopeパラメーターを指定できます。 詳細については、このトピックの「データマスキングスコープ」を参照してください。
-- For example, the phone column of the employees table is masked to the current user. postgres=> DELETE FROM employees WHERE phone = '13900001111'; DELETE 0 postgres=> SET redaction.scope = 'query_except_equal'; SET postgres=> DELETE FROM employees WHERE phone = '13900001111'; DELETE 1
マスキングポリシーの表示
REDACTION_POLICIESおよびREDACTION_COLUMNSシステムビューを使用して、現在のデータベースのマスキングポリシーおよびマスクされた列に関する情報を照会できます。
REDACTION_POLICIESビューには、現在のデータベース内のすべてのマスキングポリシーに関する情報が含まれます。
次の表に、REDACTION_POLICIESビューのフィールドを示します。
項目
データ型
説明
schema_name
name
マスクされたテーブルのスキーマの名前。
table_name
name
マスクされたテーブルの名前。
policy_name
name
マスキングポリシーの名前。
enable
Boolean
マスキングポリシーのステータス。
expression
text
マスキングポリシーの有効性に基づく式。
REDACTION_COLUMNSビューには、現在のデータベースのすべてのマスクされた列に関する情報が含まれます。
次の表に、REDACTION_COLUMNSビューのフィールドを示します。
項目
データ型
説明
table_name
name
マスクされたテーブルの名前。
column_name
name
マスクされた列の名前。
column_type
name
マスクされた列のタイプ。
function_info
text
マスキング関数に関する情報。
データマスキングスコープ
AnalyticDB for PostgreSQLは、queryとquery_except_equalデータマスキングスコープをサポートしています。 redaction.scopeパラメーターを使用して、データマスキングスコープを選択できます。 デフォルトでは、クエリデータのマスキングスコープが使用されます。 AnalyticDB for PostgreSQLは、クエリステートメントに含まれるすべてのマスクされた列をマスクします。
たとえば、SELECT name, email, phone FROM employees WHERE email = 'sally.*** @ alibaba.com '; 文では、email列とphone列はマスクされた列です。 動的データマスキングは、上記のステートメントを、SELECT name, masked(email), masked(phone) FROM employees WHERE masked(email) = 'sally.*** @ alibaba.com '; に等しいクエリステートメントに書き換えます。 これは、UPDATE employees SET email = masked(email); ステートメントを使用して電子メール列を書き直すのと似ています。 マスクされた値は計算操作には適していません。 特定のユーザーの計算要件を満たすには、次のステートメントを実行して、データマスキングスコープをquery_except_equalに設定します。 この場合、等価条件に関与する列はマスクされない。
SET redaction.scope = 'query_except_equal';SET redaction.scope = 'query_except_equ'; ステートメントは、セッションレベルでデータマスキングスコープを設定します。 データベースレベルでデータマスキングスコープを設定するには、ALTER database xxx SET redaction.scope = 'query_except_equal '; ステートメントを実行します。
データマスキングスコープをquery_except_equalに設定すると、WHERE句の電子メール列はマスクされません。 動的データマスキングは、元のクエリステートメントを、SELECT name, masked(email), masked(phone) FROM employees WHERE email = 'sally.sample@alibaba.com '; に等しいクエリステートメントに書き換えます。
例
次の例では、従業員という名前のテーブルが会社に対して作成されます。 アリスはテーブルの所有者です。 bobとeveはテーブルのユーザーです。 このテーブルには、従業員名、携帯電話番号、電子メール、社会保障番号 (SSN) 、給与などのプライバシーデータが含まれています。
管理者アカウントを使用してデータベースに接続した後、alice、bob、eveという名前の3つのロールを作成します。
CREATE ROLE alice PASSWORD 'password'; CREATE ROLE bob PASSWORD 'password'; CREATE ROLE eve PASSWORD 'password';データベースのスキーマ権限をalice、bob、およびeveに付与します。
GRANT ALL ON SCHEMA PUBLIC TO alice,bob,eve;aliceに切り替えます。 employeesという名前のテーブルを作成し、テーブルにデータを挿入します。
SET role alice; CREATE TABLE employees (id SERIAL PRIMARY KEY, name varchar(40) NOT NULL, ssn varchar(11) NOT NULL, phone varchar(11), birthday date, salary money, email varchar(100)); INSERT INTO employees (name, ssn, phone, birthday, salary, email) VALUES ( 'Sally Sample', '020-78-9345', '13900001111', '1961-02-02', 51234.34, 'sally.***@alibaba.com'), ( 'Jane Doe', '123-33-9345', '13900002222', '1963-02-14', 62500.00, 'jane.***@gmail.com'), ( 'Bill Foo', '123-89-9345', '13900003333','1963-02-14', 45350.00, 'william.***@163.com');bobとeveに、従業員テーブルの読み取り許可を付与します。
GRANT SELECT ON employees to bob,eve;mask_empという名前のマスキングポリシーを作成して、aliceがすべての従業員情報を照会できるようにし、bobとeveが電話、給与、および電子メールの列を照会できないようにします。 次の列のマスキング関数を設定します。
phone: キャラクタータイプのものです。 組み込みのマスキング関数mask_partialを使用して、中央の電話番号の4桁をアスタリスク (
*) でマスクします。salary: 数値型の 組み込みのマスキング関数mask_full_numを使用して、給与を0としてマスクします。
email: 文字タイプの 組み込みのマスキング関数mask_emailを使用して、
@の前のコンテンツをマスクします。CREATE REDACTION POLICY mask_emp ON employees WHEN (current_user IN ('bob', 'eve')) ADD COLUMN phone WITH mask_partial(phone, '****', 3, 4), ADD COLUMN salary WITH mask_full_num(salary), ADD COLUMN email WITH mask_email(email);
bobとeveに切り替えて、従業員テーブルを照会します。
SET ROLE bob; SELECT * FROM employees; id | name | ssn | phone | birthday | salary | email ----+--------------+-------------+-------------+------------+--------+-------------------------- 2 | Jane Doe | 123-33-9345 | 139****1111 | 1963-02-14 | $0.00 | xxxxxxxx@gmail.com 3 | Bill Foo | 123-89-9345 | 139****2222 | 1963-02-14 | $0.00 | xxxxxxxxxxx@163.com 1 | Sally Sample | 020-78-9345 | 139****3333 | 1961-02-02 | $0.00 | xxxxxxxxxxxx@alibaba.com (3 rows) SET ROLE eve; SELECT * FROM employees; id | name | ssn | phone | birthday | salary | email ----+--------------+-------------+-------------+------------+--------+-------------------------- 1 | Sally Sample | 020-78-9345 | 139****1111 | 1961-02-02 | $0.00 | xxxxxxxxxxxx@alibaba.com 2 | Jane Doe | 123-33-9345 | 139****2222 | 1963-02-14 | $0.00 | xxxxxxxx@gmail.com 3 | Bill Foo | 123-89-9345 | 139****3333 | 1963-02-14 | $0.00 | xxxxxxxxxxx@163.com (3 rows)bobがすべての従業員情報を照会できるようにするには、mask_empマスキングポリシーを変更します。
SET ROLE alice; ALTER REDACTION POLICY mask_emp ON employees WHEN(current_user = 'bob');bobとeveに切り替えて、従業員テーブルを照会します。
SET ROLE bob; SELECT * FROM employees; id | name | ssn | phone | birthday | salary | email ----+--------------+-------------+-------------+------------+------------+-------------------------- 2 | Jane Doe | 123-33-9345 | 13900001111 | 1963-02-14 | $62,500.00 | jane.***@gmail.com 3 | Bill Foo | 123-89-9345 | 13900002222 | 1963-02-14 | $45,350.00 | william.***@163.com 1 | Sally Sample | 020-78-9345 | 13900003333 | 1961-02-02 | $51,234.34 | sally.***@alibaba.com (3 rows) SET ROLE eve; SELECT * FROM employees; id | name | ssn | phone | birthday | salary | email ----+--------------+-------------+-------------+------------+--------+-------------------------- 1 | Sally Sample | 020-78-9345 | 139****1111 | 1961-02-02 | $0.00 | xxxxxxxxxxxx@alibaba.com 2 | Jane Doe | 123-33-9345 | 139****2222 | 1963-02-14 | $0.00 | xxxxxxxx@gmail.com 3 | Bill Foo | 123-89-9345 | 139****3333 | 1963-02-14 | $0.00 | xxxxxxxxxxx@163.com (3 rows)REDACTION_POLICIESおよびREDACTION_COLUMNSシステムビューを使用して、mask_empマスキングポリシーに関する情報を照会します。SELECT * FROM redaction_policies; schema_name | table_name | policy_name | enable | expression -------------+------------+-------------+--------+---------------------------------- public | employees | mask_emp | t | ("current_user"() = 'eve'::name) (1 row) SELECT * FROM redaction_columns; table_name | column_name | column_type | function_info ------------+-------------+-------------+----------------------------------------- employees | phone | varchar | mask_partial(phone, '****'::text, 3, 4) employees | salary | money | mask_full_num(salary) employees | email | varchar | mask_email(email) (4 rows)文字タイプのssn列を
###-#-####としてマスクするには、mask_regexpマスキング関数を使用するか、カスタムマスキング関数を設定します。 この例では、SQLを使用してmask_ssnという名前のカスタムマスキング関数を設定します。 マスクされた列を追加するときは、マスク関数名と引数を指定します。SET ROLE alice; CREATE FUNCTION mask_ssn() RETURNS varchar AS $$ SELECT '###-##-####'::varchar; $$ LANGUAGE SQL; ALTER REDACTION POLICY mask_emp ON employees ADD COLUMN ssn WITH mask_ssn(); SET ROLE eve; SELECT * FROM employees; id | name | ssn | phone | birthday | salary | email ----+--------------+-------------+-------------+------------+--------+-------------------------- 1 | Sally Sample | ###-##-#### | 139****1111 | 2001-01-01 | $0.00 | xxxxxxxxxxxx@alibaba.com 2 | Jane Doe | ###-##-#### | 139****2222 | 2001-01-01 | $0.00 | xxxxxxxx@gmail.com 3 | Bill Foo | ###-##-#### | 139****3333 | 2001-01-01 | $0.00 | xxxxxxxxxxx@163.com (3 rows)employeesテーブルにデータマスキングが必要ない場合は、mask_empマスキングポリシーを削除します。
SET ROLE alice; DROP REDACTION POLICY mask_emp ON employees;
付録: マスキング関数
関数 | 説明 | パラメーター | 戻り値タイプ |
mask_none (列anyelement) | データマスキングを実行しません。 この関数は内部テストにのみ使用されます。 | column: 任意のデータ型です。 | 列引数のデータ型と同じ |
mask_tonull (列anyelement) | すべてのデータをNULLにマスクします。 | column: 任意のデータ型です。 | NULL |
mask_full_num (列anyelement) | すべての数値を0としてマスクします。 | column: INT、BIGINT、FLOAT、numericなどの数値型です。 | 列引数のデータ型と同じ |
mask_full_str (列anyelement) | すべての文字を | column: TEXT、VARCHAR、CHARなどの固定長または可変長の文字型です。 | 列引数のデータ型と同じ |
mask_full_time (カラムanyelement) | すべての時間データを | column: TIMEまたはTIME WITH TIME ZONEタイプの | 列引数のデータ型と同じ |
mask_full_timestamp (列anyelement) | すべてのタイムスタンプと日付データを | column: DATE、TIMESTAMP、またはTIMESTAMP WITH TIME ZONEタイプの | 列引数のデータ型と同じ |
mask_full_bytea() | すべてのBYTEAデータを固定のBYTEA値にマスクします。 | なし | BYTEA |
mask_email (列anyelement、文字charデフォルト 'x') | メールアドレスをマスクします。 |
| 列引数のデータ型と同じ |
mask_shuffle (列anyelement) | 無秩序な方法でデータを返します。 戻り値は元のデータと同じ長さです。 | column: TEXT、VARCHAR、CHARなどの固定長または可変長の文字型です。 | 列引数のデータ型と同じ |
mask_random (列anyelement) | 元のデータと同じ長さのランダムな文字列を返します。 | column: TEXT、VARCHAR、CHARなどの固定長または可変長の文字型です。 | 列引数のデータ型と同じ |
mask_regexp(column anyelement, reg text, replace_text text, pos INTEGER default 0, reg_len INTEGER default -1) | 正規表現を使用してデータを置き換えます。 |
| 列引数のデータ型と同じ |
mask_partial(column anyelement, padding text, prefix INTEGER, suffix INTEGER) | データを部分的にマスクします。 |
| 列引数のデータ型と同じ |
例1: mask_regexp関数を使用して、数値記号 (
#) の付いた文字列の数値をマスクします。SELECT mask_regexp('$27412.45earned'::text, '[\d+]', '#'); mask_regexp ---------------------- $#####.##earned (1 row)例2:
mask_partial関数を使用して、数字記号 (#) の付いた文字列の中央の数字をマスクします。SELECT mask_partial('$27412.45earned'::text, '###.##', 5, 1); mask_partial -------------------- $###.##earned (1 row)