Desenfoque Asked: 2023-04-26 23:46:42 +0800 CST2023-04-26 23:46:42 +0800 CST 2023-04-26 23:46:42 +0800 CST 这是一个错误还是我在创建表时做错了什么? 772 我在 Azure SQL 实例 (12.0.2000.8) 中有一个表,当我查询它时发现了这种奇怪的行为。 该列被定义为整数,但它不响应“WHERE”过滤器,也转换为 varchar 返回奇怪的结果。它只发生在一张表中(到目前为止)。 这里发生了什么?是错误吗?难道我做错了什么?我应该删除表并重新创建它吗? 更多信息:当我查询表时出现问题。如果我使用不同的机器和客户端,我会遇到同样的问题(它也发生在 JDBC 上)。 排序规则是 SQL_Latin1_General_CP1_CI_AS 谢谢! azure-sql-database 1 个回答 Voted Best Answer Paul White 2023-04-27T00:56:56+08:002023-04-27T00:56:56+08:00 您在此表上有动态数据屏蔽,但用户未被授予UNMASK权限。 您在输出中看到的是屏蔽数据,而不是真实值。 重现: CREATE TABLE dbo.Test ( c integer MASKED WITH (FUNCTION = 'default()') NOT NULL ); INSERT dbo.Test (c) VALUES (123); CREATE USER Bob WITHOUT LOGIN; GRANT SELECT ON dbo.Test TO Bob; EXECUTE AS USER = 'Bob'; SELECT T.c, c_vc = CONVERT(varchar(11), T.c) FROM dbo.Test AS T WHERE T.c <> 0; REVERT; C c_vc 0 xxxx 如果我们授予UNMASK,真实数据将变得可见: GRANT UNMASK ON dbo.Test TO Bob; EXECUTE AS USER = 'Bob'; SELECT T.c, c_vc = CONVERT(varchar(11), T.c) FROM dbo.Test AS T WHERE T.c <> 0; REVERT; C c_vc 123 123 整理: DROP USER Bob; DROP TABLE dbo.Test;
您在此表上有动态数据屏蔽,但用户未被授予
UNMASK
权限。您在输出中看到的是屏蔽数据,而不是真实值。
重现:
如果我们授予
UNMASK
,真实数据将变得可见:整理: