作为管理员使用隐私域¶
隐私域 定义列中的可能值,类似于数学域。Snowflake 使用隐私域来确定在结果中引入多少噪声。
要在完成本节任务前全面了解隐私域,请参阅 隐私域简介。
最佳实践为数据提供商在向分析师分发数据 之前,为分析师可能想要操作的所有数值列和分类列设置隐私域。
选择隐私域¶
隐私域定义的是列中 可能 的值,而不一定是 实际 值。您可以根据需要缩小或扩展隐私域,使其不包含实际值。例如,您可以执行以下任一操作:
定义一个更广泛的列表以隐藏确切值。由于分析师可以查看隐私域,因此您可能不希望公开列的确切内容。例如,假设某列包含邮政编码的子集。您可能希望扩展隐私域以包括所有可能的邮政编码,从而对某一特定邮政编码是否存在于该数据集中进行模糊化处理。
定义一个较窄的范围以隐藏异常值的存在。例如,如果大多数值在 1 和 50 之间,您可能不希望平均值中包含值 100,因为鉴于平均值异常高,分析师可以推断出 100 的存在。
有关如何处理隐私域外值的信息,请参阅 隐私域外的值。
重要
任何有权查询受隐私保护表的人都能查看该表中某一列的隐私域,因此请谨慎选择您的隐私域。
虽然大多数字段应该具有隐私域,但也有一些重要的例外情况。例如,用户 ID、电子邮件地址、信用卡号和社会安全号等唯一标识符字段 不应 具有隐私域。用户可以看到确切的隐私域,而您通常不希望分析师知道某个特定的标识符是否存在于数据集中。
相比之下,如果标识符字段不是单个实体的唯一标识符字段,且其可能值是公开已知的,如邮政编码、医疗数据中的 ICD 编码和 NAICS 编码,则隐私域应包含其实际值。
设置隐私域¶
您可以将隐私域定义为具有最小值和最大值的数值范围或数值的枚举列表。一般来说,隐私域的类型取决于列的数据类型。如果列的数据类型未在下表中列出,则无法对其设置隐私域。
数据类型 |
隐私域类型 |
---|---|
范围 |
|
枚举列表 |
要设置、更改或删除隐私域,您需要获取表的 OWNERSHIP 权限。您可以在执行以下操作时设置隐私域:
对于每种方法,新隐私域的语法都是相同的。
备注
当删除表时,其隐私域也会被删除。这也适用于 CREATE OR REPLACE 命令。
隐私域语法¶
创建隐私域的语法是:
PRIVACY DOMAIN
{
[ BETWEEN ( <lo_value>, <hi_value> ) ]
| [ IN ( '<value1>, '<value2>', ... ) ]
| [ REFERENCES <table_name>( <col_name> ) ]
}
参数¶
必须指定单个参数。
BETWEEN ( lo_value, hi_value )
创建隐私域,该隐私域是列中可能值的范围,其中
lo_value
是最小值,hi_value
是最大值。IN ( 'value1', 'value2', ... )
创建隐私域,该隐私域是指定值的枚举列表。
IN
参数最多接受 50 个值,每个值最多可包含 100 个字符。如果需要指定包含超过 50 个值的枚举列表,请使用REFERENCES
参数。REFERENCES table_name( col_name )
创建隐私域,该隐私域是枚举列表,由某表中列包含的值组成。
对具有 REFERENCES 隐私域的表进行差异隐私查询的用户,必须对隐私域引用列所在的表具有 SELECT 权限。这意味着,如果您共享引用其他表的受隐私保护的表,最好在同一共享中共享引用的表。
隐私域可以引用其自身;但是,在使用此功能时请务必小心。如果隐私域引用了其自身的列,则枚举列表包含该列中的所有 实际 值,而非该列中的所有 可能 值,这会暴露隐私信息例如,如果
zipcode
列的隐私域引用了其自身,则分析师在查看隐私域时肯定会知道特定邮政编码是否在数据集中。备注
首次创建表时,无法定义一个引用自身的隐私域。首先创建表,然后 使用单独的命令设置隐私域。
引用的列可以包含 16,384 个唯一值。
创建新表时设置隐私域¶
使用 CREATE TABLE 命令创建表时,为列设置隐私域的语法是:
CREATE TABLE <table_name>
( <col_name> <col_type> PRIVACY DOMAIN
{
[ BETWEEN ( <lo_value>, <hi_value> ) ]
| [ IN ( '<value1>', '<value2>', ... ) ]
| [ REFERENCES <table_name>( <col_name> ) ]
}
)
有关更多信息,请参阅 隐私域语法。
添加新列时设置隐私域¶
使用 ALTER TABLE 向现有表中添加新列时,设置隐私域的语法是:
ALTER TABLE <table_name>
ADD COLUMN <col_name> <col_type> PRIVACY DOMAIN
{
[ BETWEEN ( <lo_value>, <hi_value> ) ]
| [ IN ( '<value1>', '<value2>', ... ) ]
| [ REFERENCES <table_name>( <col_name> ) ]
}
有关更多信息,请参阅 隐私域语法。
通过修改列设置隐私域¶
使用 ALTER TABLE ...ALTER COLUMN 命令为表的现有列设置隐私域的语法是:
ALTER TABLE <table_name>
{ ALTER | MODIFY } COLUMN <col1_name> SET PRIVACY DOMAIN
{
[ BETWEEN ( <lo_value>, <hi_value> ) ]
| [ IN ( '<value1>', '<value2>', ... ) ]
| [ REFERENCES <table_name>( <col_name> ) ]
}
有关更多信息,请参阅 隐私域语法。
修改隐私域¶
修改现有隐私域的语法与 在现有列上创建新隐私域 的语法相同。ALTER TABLE ..ALTER COLUMN ...SET PRIVACY DOMAIN 命令会将旧隐私域替换为新隐私域。
移除隐私域¶
使用 ALTER TABLE ...ALTER COLUMN 命令从列中移除隐私域的语法是:
ALTER TABLE <table_name>
{ ALTER | MODIFY } COLUMN <col1_name> UNSET PRIVACY DOMAIN
查看隐私域¶
要查看受隐私保护的表或视图的隐私域,请执行 DESCRIBE TABLE 或 DESCRIBE VIEW 命令。输出的 PRIVACY_DOMAIN 列中显示列的隐私域。
要查看受隐私保护的表的隐私域,您需要对该表拥有 SELECT 权限。
解释隐私域对象¶
列的隐私域作为 JSON 对象返回。JSON 对象的 domain_type
字段指示隐私域是数值范围还是枚举列表。对象中的其余字段取决于 domain_type
字段的值。
隐私域的 JSON 对象可以包括以下字段:
domain_type
指示隐私域的类型。
BETWEEN
隐私域是列中可能值的范围。
IN
隐私域是列中可能值的枚举列表。
REFERENCES
隐私域是列中可能值的枚举列表。该列表来自同一个表或另一个表的列。要查看隐私域的枚举列表,请查询引用列的内容。
low
当
domain_type = BETWEEN
时,指定可能值范围中的最小值。high
当
domain_type = BETWEEN
时,指定可能值范围中的最大值。values
当
domain_type = IN
时,指定可能值的枚举列表,采用数组结构。database
当
domain_type = REFERENCES
时,指定包含 Snowflake 构建可能值的枚举列表时所引用列的数据库。schema
当
domain_type = REFERENCES
时,指定包含 Snowflake 构建可能值的枚举列表时所引用列的架构。table
当
domain_type = REFERENCES
时,指定包含 Snowflake 构建可能值的枚举列表时所引用列的表。column
当
domain_type = REFERENCES
时,指定 Snowflake 构建可能值的枚举列表时所引用的列。要查看隐私域的枚举列表,请查询此列的内容。