SQL 2016 - 新功能






4.78/5 (22投票s)
SQL 2016 新功能列表
引言
SQL Server 2016 于 2016 年 6 月 1 日(终于)发布,初始内部版本号为 13.0.1601.5。Microsoft 构建的 SQL 2016 考虑了很多方面,例如“云优先”、安全性增强、JSON 支持、临时数据库支持、行级安全性、Windows Server 2016 连接、非关系数据库连接(例如 Hadoop)、丰富的视觉效果等。
在本文中,我们将逐一介绍 SQL 2016 的所有新功能。
始终加密
顾名思义,“Always Encrypted”是 SQL 2016 的一项功能,它“始终”将您的敏感数据“加密”,无论是静态存储(本地环境)还是远程(云/Azure)。它有助于保护数据免受可能接触敏感数据的人员(如 DBA、云运维人员、高权限但未经授权的用户)的侵害。
工作原理
您可以为单个列(敏感数据所在的位置)设置 Always Encrypted。配置列时,需要指定加密算法和加密密钥以保护数据。基本上,您需要定义两个密钥:
- 用于列数据加密的加密密钥(将用于加密特定列的数据)
- 主密钥:用于加密列加密密钥
所以基本上,这是一种双重加密保护,只有程序才能访问它,客户端应用程序将在从数据库获取数据之前自动加密和解密数据。
JSON 支持
SQL 2016 直接支持 JSON(JavaScript 对象表示法),SQL 能够读取 JSON 格式的数据,将其加载到表中,并支持 JSON 列中的索引属性。
JSON 数据将存储在 NVARCHAR
类型中。由于 NVARCHAR
类型,应用程序具有以下优势:
- 已存储的 JSON 数据(文本格式)可以轻松迁移到新功能。
- 由于所有 SQL 组件都支持
NVARCHAR
,JSON 也一样。
您可以使用以下语法轻松地从 SQL 中提取 FOR JSON 数据:
SELECT column, expression, column as alias
FROM table1, table2, table3
FOR JSON [AUTO | PATH]
这是一个 SELECT
命令,因此当我们执行上述查询时,SQL 将格式化每一行/单元格的值并将其作为 JSON 对象返回。
SQL 还提供了内置的 JSON 函数。
动态数据屏蔽
这是 SQL 2016 的又一项安全功能。顾名思义,它只是在您的数据上覆盖了一个“掩码”,简而言之,它隐藏了您不想显示的机密数据。它只是避免了敏感数据的泄露。
屏蔽后,权限有限的 SQL 用户将无法查看原始文本,只能看到屏蔽后的文本。SQL 具有预定义的屏蔽函数,您只需将其应用于不同的列,如下所示:
序号 | 函数 | 应用在 | 明文(输入) | 屏蔽文本(输出) |
---|---|---|---|---|
1 | 默认值 | 字符串、数字 | ABCD | xxxx |
2 | 电子邮件 | 电子邮件文本 | test@test.com | txxx@xxxx.com |
3 | 随机 | 数字 | 1234 | 684 |
4 | 自定义字符串 | 文本 | RABBIT | RXXXX |
要将其应用于特定列,只需使用“MASKED WITH
”函数名“ALTER
”列即可,请参阅下面的语法:
//here I used function as Default(), you can change it to any of the above types
ALTER TABLE tablename ALTER COLUMN columnname MASKED WITH (FUNCTION=‚default()‘)
PolyBase
这是一种多连接功能,我们可以在一个点连接到所有关系型和非关系型数据,它帮助您连接 Hadoop 数据库和 Azure Blob 存储。基本上,PolyBase 在 SQL 范围之外的数据之间创建了一个桥梁,在查询 Hadoop 或 Azure 存储时不需要额外的知识或安装。简单来说,您可以将数据导入和导出到 Hadoop 或 Azure 存储。此外,您可以将其与 Microsoft 的商业智能集成。
行级安全性
这是 SQL 2016 的又一项安全功能。它允许您逐行保护数据,简而言之,您可以定义一行,只有特定的 SQL 用户才能查看。因此,根据 SQL 用户访问权限,我们可以限制行级数据,例如,我们可以确保员工只能查看他们部门的数据,即使部门表是同一个。
要实现行级安全性,您需要定义一个带有谓词和函数的安全策略。
安全策略:我们需要为安全创建策略,这里是一个简单的语法:
CREATE SECURITY POLICY fn_security ADD [FILTER | BLOCK] PREDICATE FunctionName ON TableName
在上面的语法中,FILTER
和 BLOCK
是谓词,它们将 FILTER
行并仅显示可供读取的行,或者 BLOCK
行以进行写入操作。
函数:函数是一个简单的用户定义函数,但用于行级安全性语法的用户定义函数有一些限制:
- 不允许数据库修改操作
- 函数中不允许使用
OUTPUT INTO
子句 - 函数不应返回多个结果集
Stretch Database
顾名思义,它为用户提供了灵活性。简而言之,我们可以将数据库的一部分存储在远程(这里,我们可以说云/Azure)。这部分数据可以称为“冷数据”。(这对于需要根据行业要求长期保留事务数据的用户很有用。)所以我们可以说它是一种经济高效的冷数据存储解决方案,您的数据随时可供查询和管理。您可以访问您的数据,而无需更改查询,无论它是在本地还是在 stretch 数据库中。
要进行配置,您需要一个 Azure 帐户和要 stretch 的数据库实例。以下快照将有助于您理解。
多个 TempDB
拥有多个 TempDB 文件始终是一个好习惯,如果您正在处理大量关键数据,直到现在(SQL 2014),您都需要手动将 TempDB 文件添加到您的数据库中,但 SQL 2016 提供了 TempDB 配置设置,您可以在 SQL 安装时配置 TempDB 文件数量。默认文件数为 8 个,默认大小为 64MB。
所以您不再需要手动配置/创建它。
查询存储
直到现在,要检查查询计划和执行 统计信息,我们需要 SQL 中的动态管理视图,但它既不会提供您过去/旧查询执行的查询计划,也不会将其存储在任何地方供您查看,但 SQL 2016 提供了“Query Store”,它可以帮助您查看当前和过去查询的查询计划、统计信息和查询执行情况。
要启用它,只需右键单击数据库(当然,您需要 SQL 2016 SSMS),然后转到属性。您会在左侧看到“Query store”,选择它并点击 Enable 'true
',或者您可以使用查询执行此操作:
ALTER DATABASE [Database1] SET QUERY_STORE = ON
临时表
您想存储 SQL 表的历史记录吗?在更新表后想查看旧记录吗?那么您可以选择此功能。SQL 2016 提供了记录版本功能,它会保留已更改记录的历史记录并维护它以供及时分析。此功能可用于审计、检查数据趋势、意外更新/删除数据等。
工作原理
基本上,系统会为历史记录保留一对表,并在其中添加两个额外的列,分别为“SysStartTime
”和“SysEndTime
”,分别表示行的开始时间和结束时间。实时表包含行的当前记录,而历史表包含行的先前记录。我们可以使用以下查询从历史表中获取数据:
SELECT * FROM table1 FOR SYSTEM_TIME
BETWEEN date1 AND date2
WHERE condition;
R 简介
您是否将 统计信息数据存储在 SQL 中?想使用 R 进行分析吗?您每次都将数据从 SQL 导出到 R 吗?那么在 SQL 2016 中,您的烦恼将得到解决,因为它现在集成了 R。您可以在 SQL 上运行 R 脚本。您需要在 SQL 安装时安装此功能。
参考
我们无法详细介绍所有功能,也许我很快就会计划逐一介绍它们。
在那之前,您可以享受这篇文章。
建议和疑问随时欢迎。
祝你查询愉快!