Des*_*que 14 azure-sql-database
我在 Azure SQL 实例 (12.0.2000.8) 中有一个表,当我查询它时发现了这种奇怪的行为。

该列被定义为 Integer,但它不响应“WHERE”过滤器,也转换为 varchar 返回奇怪的结果。它只发生在一张表中(到目前为止)。
这里发生了什么?是一个错误吗?难道我做错了什么?我应该删除该表并重新创建它吗?
更多信息:当我查询表时出现问题。如果我使用不同的机器和客户端,我会遇到同样的问题(JDBC 也会发生这种情况)。
排序规则为 SQL_Latin1_General_CP1_CI_AS
谢谢!
Pau*_*ite 32
您对该表进行了动态数据屏蔽,并且用户尚未被授予UNMASK权限。
您在输出中看到屏蔽数据,而不是真实值。
重现:
CREATE TABLE dbo.Test
(
c integer
MASKED WITH (FUNCTION = 'default()')
NOT NULL
);
INSERT dbo.Test
(c)
VALUES
(123);
Run Code Online (Sandbox Code Playgroud)
CREATE USER Bob WITHOUT LOGIN;
GRANT SELECT ON dbo.Test TO Bob;
Run Code Online (Sandbox Code Playgroud)
EXECUTE AS USER = 'Bob';
SELECT
T.c,
c_vc = CONVERT(varchar(11), T.c)
FROM dbo.Test AS T
WHERE
T.c <> 0;
REVERT;
Run Code Online (Sandbox Code Playgroud)
| 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;
Run Code Online (Sandbox Code Playgroud)
| C | c_vc |
|---|---|
| 123 | 123 |
整理:
DROP USER Bob;
DROP TABLE dbo.Test;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2343 次 |
| 最近记录: |