CURRENT_DATABASE 和 CURRENT_SCHEMA 函数:使用策略、视图和 UDFs 确保确定性输出¶
CURRENT_DATABASE 和 CURRENT_SCHEMA 函数的行为如下:
- 变更前:
调用 CURRENT_DATABASE 或 CURRENT_SCHEMA 函数时的返回值不是确定的:
在数据访问策略(如掩码策略或行访问策略)中调用函数时,这些函数将返回以下两个值之一:
包含策略的数据库或架构。
会话中使用的数据库或架构。
如果在视图或 UDF 的定义中调用函数,且函数前面没有 SELECT 关键字,则该函数将返回以下两个值之一:
会话中使用的数据库或架构。
包含 UDF 或该视图的数据库或架构。
- 变更后:
调用 CURRENT_DATABASE 或 CURRENT_SCHEMA 函数时的返回值是确定的:
在数据访问策略(如掩码策略或行访问策略)中调用函数时,这些函数将返回包含受保护表或视图的数据库或架构。
在视图或 UDF 的定义中调用函数时,该函数返回包含 UDF 或视图的数据库或架构。
为尽量减少这些更改的影响,请执行以下操作:
如果您的视图定义或 UDF 使用其中任一函数,且函数前面没有 SELECT 关键字,请仔细检查以确保 UDF 定义对于函数的使用方式正确无误。
如果策略调用上述任一函数,请仔细检查以确保策略的正文是针对包含受保护表的数据库或架构编写的,而不是针对会话使用的数据库或架构编写的。
参考:1325