标签: sql-server-2017

SQL Server 2017 CU10 是否包含 CVE-2018-8273 修补程序?

微软昨天发布了SQL Server 2017 CU10 KB4342123 (14.0.3037.1)。我尝试查看包含修补程序列表,但没有看到任何对最近发布的远程代码执行漏洞修补程序KB4293805 CVE-2018-8273 (14.0.3035.2)安全更新的引用。

我们如何确定 SQL Server 2017 CU10 是否包含安全修补程序 KB4293805 CVE-2018-8273?

CU10 的更高版本号是否足以确定这一点?

注意:我已经在 CU9 上安装了 CVE-2018-8273 修复程序。

sql-server patching sql-server-2017

5
推荐指数
1
解决办法
691
查看次数

托管备份大型数据库到 Azure

这里有一个问题,我需要一些帮助来解决。

托管一个数据库,大约 400Gigs。这让我们有点头疼让它与托管备份到 Azure 存储容器一起工作。

这是我们得到的错误

10/21/2018 12:45:18,spid149,Unknown,Write to backup block blob device https://NAME.blob.core.windows.net/CONTAINER/DB_NAME_20181021120709+02.bak failed. Device has reached its limit of allowed blocks.
Run Code Online (Sandbox Code Playgroud)

设置完成

EXEC managed_backup.sp_backup_config_basic

@database_name = 'DB_NAME',
@enable_backup=1,  
@container_url = 'https://NAME.blob.core.windows.net/CONTAINER',  
@retention_days=30;


USE msdb;  
GO  
EXEC managed_backup.sp_backup_config_schedule   
     @database_name =  'DB_NAME'  
    ,@scheduling_option = 'Custom'  
    ,@full_backup_freq_type = 'Daily'  
    ,@backup_begin_time =  '00:30'  
    ,@backup_duration = '02:00'  
    ,@log_backup_freq = '00:05'  
GO
Run Code Online (Sandbox Code Playgroud)

并且日志备份运行良好,所以我们知道凭证没问题。但是它不会备份数据库,因为它太大了,所以需要拆分。但是怎么做呢?当我像这样运行手动备份时

Use MSDB  
Go  
EXEC managed_backup.sp_backup_on_demand  
 @database_name = 'DB_NAME'  
,@type = 'Database' 
Run Code Online (Sandbox Code Playgroud)

它确实在 Azure 容器中将其分成两部分。那么我如何获得拆分 BAK 文件的自动作业。

我们在 SQL Server 2017 上运行。 …

sql-server backup azure-blob-storage sql-server-2017

5
推荐指数
1
解决办法
666
查看次数

使用 MultiSubnetFailover 提高单个子网的性能

BOL 上,我阅读了以下关于MultiSubnetFailover=True 的内容:

即使可用性组仅跨越单个子网MultiSubnetFailover连接选项也应设置为True。这允许您预先配置新客户端以支持未来跨子网,而无需更改未来客户端连接字符串,并且还优化了单个子网故障转移的故障转移性能

据我了解MultiSubnetFailover,使用此选项设置客户端驱动程序为与侦听器关联的每个 IP 地址设置一个套接字。它们都被并行检查以加快查找在线 IP 的过程,第一个响应将用于连接。在这里,我看到了性能提升。

但是单个子网的性能提升在哪里?只有与侦听器关联的 IP。

sql-server availability-groups sql-server-2017

5
推荐指数
1
解决办法
428
查看次数

我可以控制 SQL Server 使用哪种算法来散列对称密钥密码

在问我的问题之前,我将首先描述问题/原因:

如果您在 SQL 中使用对称密钥来加密数据。这可以设置如下:

CREATE MASTER KEY ENCRYPTION BY PASSWORD='password';
CREATE CERTIFICATE My_Certificate AUTHORIZATION [dbo] WITH SUBJECT = 'My Certificate'
CREATE SYMMETRIC KEY My_Key AUTHORIZATION [dbo] ENCRYPTION BY PASSWORD='CertificatePassword' WITH IDENTITY_VALUE = 'My Key', ALGORITHM = AES_256, KEY_SOURCE = '12345-AABB-1234-BBAA' ENCRYPTION BY CERTIFICATE My_Certificate;My_Certificate
Run Code Online (Sandbox Code Playgroud)

然后可以将其与 de/encryptbykey 函数一起使用以加密数据,反之亦然。

问题是在 SQL Server 2016(或以前版本)上加密的数据如果移动到 SQL Server 2017(重新应用该证书后)将无法访问。

这看起来是 SQL Server 2017 的问题,请参阅:https : //support.microsoft.com/en-us/help/4053407/sql-server-2017-cannot-decrypt-data-encrypted-by-earlier-versions

建议的修复是确保您已安装 CU2 并全局启用跟踪标志 #4631

我的问题是:是否可以(如果可以的话)指定应该使用哪种散列算法。

例如,我可以告诉 SQL 在加密我的证书时使用 sha2_256 吗?

sql-server encryption sql-server-2017 symmetric-key

5
推荐指数
1
解决办法
480
查看次数

SQL Server 2017 上的 HKHostFreezeCkptTrimming

拥有一个 SQL Server 2017 Standard edition box,版本为 14.0.3045.24,带有一个内存优化表。当我们的第 3 方备份完成时,SQL Server 2017 错误日志显示了多条 [INFO] 消息,其中包含HKHostFreezeCkptTrimming()、HKHostBackupDeleteContext()、getMaxUnrecoverableCheckpointID()并具有相同的用户数据库 ID。你们中有人熟悉这些消息吗?这是一个错误还是有这些消息的修复程序?

其他测试表明这些 [INFO] 消息出现在完整、差异、事务日志和手动仅复制备份期间。性能很好,用户也没有抱怨,但考虑到所需的备份量,这些消息正在填满错误日志。

我能做些什么来限制这些消息在错误日志中的输入?或者这是处理额外消息的情况?

sql-server error-log memory-optimized-tables sql-server-2017

5
推荐指数
1
解决办法
438
查看次数

内存优化表索引大小比数据大 10 倍

在我们的一台生产服务器上,我发现索引大小是数据大小的 10 倍。

这些服务器和模式与类似的工作负载相同。

CREATE TABLE [dbo].[process_aggregation_close]
(
    [organization_id] [bigint] NOT NULL,
    [computer_id] [uniqueidentifier] NOT NULL,
    [process_id] [int] NOT NULL,
    .
    .
INDEX [ix_process_aggregation_memory_computer_id_process_id] NONCLUSTERED 
(
    [organization_id] ASC,
    [computer_id] ASC,
    [process_id] ASC
)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY )
GO
Run Code Online (Sandbox Code Playgroud)

表是临时表,它们涉及非常频繁的插入/删除操作。

sys.dm_db_xtp_table_memory_stats

Microsoft SQL Server 2017 CU9 标准版。

所有数据库都处于完全恢复模式。我认为它与checkpoint无关,因为这些表仅是模式持久的。(无论如何,我尝试了一个没有效果的手动检查点)。

这些内存表是暂存的,并且总是存在插入和删除活动。我监控了五个负载相似的 SQL Server。此行为仅发生在一个上。

sql-server memory-optimized-tables sql-server-2017

5
推荐指数
1
解决办法
615
查看次数

窗口函数:Rows Unbounded Preceeding 的目的是什么?

在窗口函数中使用 Rows Unbounded Preceeding 子句的目的是什么?我想我明白它基本上是说在汇总聚合函数时不限制回溯多远,但这与根本不使用该子句有什么不同?

您能否提供一个示例来说明以下之间的区别:

SUM(ColumnA) OVER (PARTITION BY ColumnB ORDER BY ColumnC DESC ROWS UNBOUNDED PRECEEDING)

SUM(ColumnA) OVER (PARTITION BY ColumnB ORDER BY ColumnC DESC)

注意:我的问题是在以下行没有上限的上下文中。

sql-server window-functions sql-server-2017

5
推荐指数
1
解决办法
407
查看次数

仅对匹配前缀的数据库授予 dbcreator

在 Microsoft SQL Server 2017+ 中,我想为单个用户授予dbcreator角色,但只允许她创建名称与固定前缀匹配的数据库。

是否可以使用内置功能或存储过程在数据库级别执行此操作?

trigger sql-server permissions t-sql sql-server-2017

5
推荐指数
1
解决办法
165
查看次数

从 Azure SQL 托管实例备份数据库并还原到本地 SQL Server

我有三个要迁移到 Azure SQL 托管实例的数据库。一个是实用程序数据库,只是通用函数和过程的一小部分集合。一种是用于 Web 应用程序的 OLTP 数据库。第三个是 OLTP 数据库的只读存档,其中包含用于分析和报告的历史数据以及审计表。我需要能够将这些数据库恢复到本地开发和测试服务器。到目前为止,我一直没有成功。

我的第一次尝试是使用备份到 Azure Blob 存储。但是无论我在本地使用什么版本的 SQL Server,我总是收到一个错误,即仅复制备份来自较新版本并且不支持还原。

接下来,我尝试从 SSMS v.18.1 导出数据层应用程序。不幸的是,它永远不会超过出口。我收到数十个错误,读取External references are not supported when creating a package from this platform. 托管实例相对于 Azure SQL DB 的最大优势之一是能够进行跨数据库查询。我有许多链接两个数据库中的表的视图和过程。此外,OLTP 数据库中的某些过程调用实用程序数据库中的函数。由于 MI 不是 Azure SQL 数据库,您会认为这不会成为问题!

搜索谷歌,我在 Stack Overflow 上发现了这个问题。所以我尝试了作为答案提出的 Visual Studio 方法。尽管它似乎可以工作,这意味着它在我的本地计算机上创建了一个多 GB 的文件,但尝试使用 SSMS 导入该文件会给我一个错误,显示为“No data is present in this file.所以然后我尝试使用sqlpackage.exe. 但是该解决方案对我也不起作用,因为它只引用导出模式。如果我尝试导出整个数据库,/Action:Export我会收到与 SSMS 相同的错误消息。

我还检查了这个数据库管理员问题。没有帮助 - 这就是我最初尝试的。如果有人有任何其他想法,我将不胜感激!

restore sql-server-2017 azure-sql-managed-instance

5
推荐指数
1
解决办法
5847
查看次数

恢复证书时 Docker SQL Server 2017 中的权限问题

Docker SQL Server 2017 容器 @latest。使用master数据库。

我面临的错误如下:

[S00019][15208] The certificate, asymmetric key, or private key file is not valid or does not exist; or you do not have permissions for it.

我发现最接近这个确切问题的是Stackoverflow 上的这个问题。然而,答案对我不起作用。这个问题有类似的答案。

我也试过这里这里的说明。

所以通过错误的部分:

  1. 我已经重新创建了两次文件,所以我认为这不是“无效”部分。它显然不是“不存在”的部分(如果我输入了错误的密码,它会告诉我这是错误的密码)。
  2. 我已经备份并恢复了 SMK 和主密钥,没有问题,所以我认为这不是权限问题。这些文件具有完全相同的权限。

无论我尝试什么,我都无法获得要恢复的证书。我已经搜索了GitHub 问题无济于事,所以我不认为这是一个错误。我一定做错了什么。

相关代码:

--on Prod
BACKUP CERTIFICATE sqlserver_backup_cert
TO FILE = '/var/opt/mssql/certs/sqlserver_backup_cert.cer'
WITH PRIVATE KEY (
    FILE = '/var/opt/mssql/certs/sqlserver_backup_cert.key',
    ENCRYPTION BY PASSWORD = 'foobar'
    )
Run Code Online (Sandbox Code Playgroud)
--on Test
CREATE CERTIFICATE …
Run Code Online (Sandbox Code Playgroud)

sql-server linux certificate docker sql-server-2017

5
推荐指数
1
解决办法
225
查看次数