故障转移组辅助实例上的 Azure SQL 托管实例 CLE 的解密问题

2024-04-05

我们有一个带有主实例和辅助实例的 Azure SQL 托管实例故障转移组设置 - 我遇到的问题是我们对某些数据库表列使用单元格(列)级加密 (CLE)。我有限的理解是,这些的解密取决于服务主密钥。我认为问题在于数据库主密钥使用服务主密钥进行加密,然后数据库在实例之间进行同步,但同步不会执行服务器(实例)级别的数据,即服务主密钥......因此在主实例上数据可以被解密,但在故障转移实例上则不能。因此你会得到这样的错误:

执行此操作之前,请在数据库中创建主密钥或在会话中打开主密钥。

如果我在用户数据库上运行以下 SQL,它将解决该问题,直到我进行故障转移,此时我需要再次运行它。因此从故障转移的角度来看并不理想,也意味着我无法将辅助实例用作只读实例。

OPEN MASTER KEY DECRYPTION BY PASSWORD = ‘XXX’ 
ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY
OPEN MASTER KEY DECRYPTION BY PASSWORD = ‘XXX'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY

下面是我能找到的唯一一篇描述该问题的文章(滚动到末尾,其中写着“解密新主副本中的数据”),它通过从主实例备份服务主密钥并将其恢复到主实例来解决该问题。辅助实例,但它是本地设置与我们的 Azure 设置相比,问题是我不知道如何(或者是否可能)在 Azure 中备份和恢复服务主密钥.

https://www.sqlshack.com/column-level-sql-server-encryption-with-sql-server-always-on-availability-groups/ https://www.sqlshack.com/column-level-sql-server-encryption-with-sql-server-always-on-availability-groups/

我确实尝试从主实例备份服务主密钥,以便可以将其恢复到辅助实例,但我看不到在 Azure SQL 托管实例中执行此导出的方法 -https://learn.microsoft.com/en-us/sql/t-sql/statements/backup-service-master-key-transact-sql?view=sql-server-ver15 https://learn.microsoft.com/en-us/sql/t-sql/statements/backup-service-master-key-transact-sql?view=sql-server-ver15…我尝试给它提供 blob 存储位置,这有点牵强,但它不喜欢它:

BACKUP SERVICE MASTER KEY TO FILE = 'https://ourstorage.blob.core.windows.net/database-backups/service_master_key.key' ENCRYPTION BY PASSWORD = 'YYYY';

消息 3078,第 16 级,状态 2,第 69 行 文件名“https://pptefsaaseprd.blob.core.windows.net/database-backups/ase_prod_service_master_key”作为指定设备类型的备份设备名称无效。使用有效的文件名和设备类型重新发出 BACKUP 语句。

我听说过可能会使用 Azure Key Vault,但找不到任何示例,并且最好不想对代码/sql 造成任何重大更改。

为了提供更多上下文,我们当前的存储过程执行如下操作:

       OPEN SYMMETRIC KEY SSN_Key_Surname
          DECRYPTION BY CERTIFICATE Surname;
 
       /* SQL making use of the decrypted column */
 
       CLOSE SYMMETRIC KEY SSN_Key_Surname;

这就是我现在的情况。希望我只是错过了一个简单的步骤——这肯定不是一个不常见的情况吗? IE。如果故障转移组中有 Azure SQL 托管实例,并且采用列级加密,其中数据库主密钥由服务主密钥加密,那么如何配置以便可以在主实例和辅助实例上解密数据?

我想为此工作,您需要能够从主实例备份服务主密钥并将其恢复到辅助实例 - 这在 Azure 中可能吗?


正如预期的那样,我只是错过了此处描述的一个简单步骤https://stackoverflow.com/a/58228431/1450351 https://stackoverflow.com/a/58228431/1450351

数据库主密钥 (DMK) 使用服务主密钥 (SMK) 进行加密,该密钥对于每个 SQL 服务实例都是唯一的,并且您希望采用这种方式。

SQL Server 有另一种解密 DMK 的方法。如果无法使用 SMK 解密 DMK,它将在凭证存储中搜索与同一系列 GUID 匹配的密码。如果它找到与您的数据库匹配的系列 GUID,它将尝试使用存储的密码解密 DMK。如果成功,它将使用 DMK 来加密或解密数据库中的凭证或密钥。

所以使用sp_control_dbmasterkey_password将根据数据库名称和解密主数据库中 DMK 的密码存储系列 GUID。

为保证主备AG故障时DMK仍能正常工作,在辅助数据库上运行 sp_control_dbmasterkey_password 作为将数据库加入 AG 的过程的一部分.

所以关于次要实例我必须在master DB

EXEC sp_control_dbmasterkey_password @db_name = N'MyDatabaseWithCLE',   
    @password = N'XX MY MASTER KEY PASSWORD XX’, @action = N'add';  
GO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

故障转移组辅助实例上的 Azure SQL 托管实例 CLE 的解密问题 的相关文章

  • 从脚本内更改自动热键托盘图标

    如何从 Autohotkey 脚本中将托盘图标更改为 my ico 例如 当脚本暂停时 为此 我在托盘菜单中提出了自己的 暂停脚本 菜单项 SingleInstance ignore Menu Tray Tip AutoCase 0 11
  • IE9-11 检测变换样式:preserve-3d

    我为一个项目制作了一个 3d 类型的菜单 自然 IE 会引起问题 因为 IE10 即使 3d 变换工作 也不支持变换样式 preserve 3d 我尝试了解决方法 通过对 3d 菜单容器的每个子元素应用变换 但至少可以说 动画看起来很糟糕
  • 文本溢出:省略号显示不同的字符

    我这里遇到了一些 CSS 问题 看这张图片 https www flickr com photos 125543025 N07 saved 1 在此图像中 我为文本 INTENSE TRAINING 添加了 CSS 样式 sample st
  • 我们什么时候应该在 Django 中使用“db_index=True”?

    当我们应该定义db index True在模型字段上 我正在尝试优化应用程序并且我想了解更多信息db index 什么情况下我们应该使用它 文档说使用db index True在模型字段上用于加速查找 但在存储和内存方面略有缺点 我们应该使
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • If else 在 Web 网格列中

    如何在 webgrid 列中添加条件 if else grid GetHtml tableStyle table table bordered columns grid Columns grid Column RealName Name g
  • View.post(),以及当Runnables被执行时

    我最初的问题是需要知道我的根的高度和宽度View这样我就可以进行程序化的布局更改 就我的目的而言 我不一定需要在onCreate 对于我来说 以编程方式添加我的孩子就足够了View根布局完成后 因此我很乐意使用onWindowFocusCh
  • Azure Functions 计时器触发器线程安全

    我想知道是否有人知道如果您在 Azure 函数上设置了 Cron 设置 如果其任务执行时间超过 5 分钟 则每 5 分钟运行一次 会发生什么情况 它备份吗 或者我应该实现一个锁定功能 以防止某些东西 例如在循环中 处理先前调用已经处理的数据
  • SimpleIoC - 在缓存中找不到类型:Windows.UI.Xaml.Controls.Frame

    第一次由 SimpleIoC 实例化我的 ViewModel 时 我遇到了以下错误 我相信我已经按应有的方式设置了容器 但由于某种原因 我仍然收到以下错误 任何想法或帮助将非常感激 Microsoft Practices ServiceLo
  • 将 Angular Web 组件 EventEmitter 监听到 javascript

    我在以下工具的帮助下创建了一个小型网络组件本文 https medium com IMM9O web components with angular d0205c9db08f使用角度元素 其中包括 Input and Output 我能够将
  • svn 强制迁移

    我正在考虑将我们的 svn 代码库迁移到 perforce 看看谷歌搜索结果 我确实找到了两个具有相同功能的工具 P4转换ftp ftp perforce com pub perforce tools p4convert docs inde
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles
  • PLS-00103:遇到符号“;”当预期出现以下情况之一时:

    我正在尝试插入用户安全问题的答案 以用于密码重置功能 Ellucian 横幅 v8 提供了一个用于运行此 API 的 API 我对他们的 API 非常陌生 从下面的错误消息来看 我还远远没有正确运行它 任何帮助表示赞赏 我尝试在 Oracl
  • 计算包含字母/数字的行数

    我想要实现的目标很简单 但是解释起来有点困难 我不知道在 postgres 中这是否真的可能 我处于相当基础的水平 SELECT FROM WHERE LEFT JOIN ON HAVING 等等基本的东西 我正在尝试计算包含特定字母 数字
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci

随机推荐