65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL 2016 - 新功能

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (22投票s)

2016年7月14日

CPOL

6分钟阅读

viewsIcon

64731

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。配置列时,需要指定加密算法和加密密钥以保护数据。基本上,您需要定义两个密钥:

  1. 用于列数据加密的加密密钥(将用于加密特定列的数据)
  2. 主密钥:用于加密列加密密钥

所以基本上,这是一种双重加密保护,只有程序才能访问它,客户端应用程序将在从数据库获取数据之前自动加密和解密数据。

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

在上面的语法中,FILTERBLOCK 是谓词,它们将 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 安装时安装此功能。

参考

我们无法详细介绍所有功能,也许我很快就会计划逐一介绍它们。

在那之前,您可以享受这篇文章。

建议和疑问随时欢迎。

祝你查询愉快!

© . All rights reserved.