标签: always-encrypted

在 SQL Server 2016 中,始终加密和透明数据加密有什么区别?

在我撰写本文时,我仍在等待 SQL Server 2016 的正式发布,以便我们可以探索其“始终加密”功能的实用性。

我只想知道 SQL Server 2016 中的 Always Encrypted 和当前可用的透明数据加密之间的具体区别是什么,以便我们可以为未来的项目做出正确的决定。

sql-server transparent-data-encryption sql-server-2016 always-encrypted

41
推荐指数
1
解决办法
2万
查看次数

在 SQL Server 2016 中结合始终加密和列级加密

我们有使用 SQL Server 2016 加密敏感列数据的要求,并选择了 Always Encrypted(AE) 功能来使用确定性方法加密这些列。

由于 AE 确定性加密不允许对这些加密列进行不等式、范围或 LIKE 查询,因此我们尝试使用对称密钥(列级)加密技术对这些类型的列进行加密。

在某些列(不需要任何不等式、范围或 LIKE 查询)上实现 AE 功能并在需要生成不等式、范围或 LIKE 查询的列上实现对称密钥类型加密是否是一个好习惯?

考虑到性能、安全性和维护性,将 AE 加密和列级加密结合在一个表上是一个好习惯吗?

请专家指教。

sql-server encryption sql-server-2016 always-encrypted

8
推荐指数
1
解决办法
2092
查看次数

始终加密和 SSIS - 安全风险

我们有一个使用 SQL Server 2016 的 AlwaysEncrypted 功能的数据库。

我们需要为某些应用程序任务创建 SSIS 包(部署在 SSISDB 上)。

我们有哪些选项可以安全地存储密钥,以便那些 SSIS 包可以使用该密钥来解密数据。假设应用程序 DB 和 SSISDB 在同一台服务器上

或者,将应用程序 DB 和 SSISDB 都放在不同的服务器上是否是强制性/良好的做法?

sql-server ssis sql-server-2016 always-encrypted

6
推荐指数
1
解决办法
459
查看次数

SQL Server Always Encrypted 可以用于临时表吗?

我正在尝试确定是否可以对临时表(Windows 2016 上的 SQL Server 2016 SP1 Enterprise)中的列使用 Always Encrypted。我试过如下:

CREATE TABLE #listofdates (compare_dt datetime2(7) encrypted with (
    COLUMN_ENCRYPTION_KEY = [ColEnc1]
    , ENCRYPTION_TYPE = Deterministic
    , ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
    ) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

消息 33293,级别 16,状态 8,第 3 行
找不到列加密密钥“ColEnc1”,因为它不存在或您没有权限。

我认为此错误具有误导性,因为如果我只是将表名替换为#listofdates另一个没有前导 # 的名称(因此从临时表切换到普通表),则该语句有效。

MS 站点上列出对 Always Encrypted 的限制/限制的部分没有提到临时表。

sql-server temporary-tables sql-server-2016 always-encrypted

6
推荐指数
1
解决办法
1185
查看次数

始终加密:如何插入或更新加密列?

我已在 SQL Server 数据库表的一列上配置了“始终加密”。通过“列加密设置 = 已启用”选项后,我可以从客户端 SSMS 选择和查看数据。

但是当我尝试将数据插入表中时,出现以下错误:

消息 206,级别 16,状态 2,第 1 行操作数类型冲突:varchar 与使用 (encryption_type = 'RANDOMIZED', Encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'TEST' 加密的 varchar(8000) 不兼容)排序规则名称 = 'SQL_Latin1_General_CP1_CI_AS'

我在这里查询简单的插入 TSQL 语句。我需要做出哪些改变才能使其发挥作用?

另外,如果我们想通过应用程序更新或插入加密列,需要对应用程序或应用程序代码进行哪些更改?

sql-server t-sql encryption sql-server-2016 always-encrypted

6
推荐指数
1
解决办法
2万
查看次数

是否可以将数据批量插入到具有使用 Always Encrypted 加密的列的表中?

在 SSMS 中,我们尝试将 csv 文件批量插入到具有使用 SQL Server 2016 的始终加密功能加密的列的表中。

这是我们正在使用的命令:

INSERT INTO membersE
SELECT *
FROM OPENROWSET(
    BULK 'c:\members.csv', 
    FORMATFILE = 'c:\membersEFormat.xml',
    FIRSTROW = 2
    ) m
Run Code Online (Sandbox Code Playgroud)

这将返回尝试插入加密列时出现的典型错误:

MSG 206,第16级,状态2,第6行
操作类型冲突:Varbinary与Varchar(50)与(Encryption_Type ='desirctionistist',Encryption_algorithm_name ='aead_aes_aes_aes_aes_aes_256_cbc_hmac_hmac_hmac_sha_256',column_encryetto ='aead_aes_aes_aes_aes_emcy_yerto ='aead_aes_aes_aes_256 ase_name ='数据库')排序规则名称 = 'Latin1_General_BIN2'

我们知道您无法通过 SSMS 插入加密列,并且您需要使用 .NET 4.6.1+ 客户端,但我们想知道批量插入操作是否也无法实现?

对我有用的示例代码
(满足 Windows10 的要求)

        SqlCommand cmd;
        SqlConnection conn;
        SqlBulkCopy copy;
        SqlDataAdapter da;
        DataTable dt;

        using (conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString))
        {
            conn.Open();

            using (cmd = new SqlCommand("SELECT * FROM members", conn))
            using (copy = new SqlBulkCopy(conn)) …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016 always-encrypted bulk-insert

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

如何在 Always Encrypted 功能中续订或扩展 CMK 证书?

我已经在 SQL Server 2016 中实现了 Always Encrypted 功能。 CMK 的有效期为一年。如何更新或延长有效期?

sql-server sql-server-2016 always-encrypted

4
推荐指数
1
解决办法
2889
查看次数

Always Encrypted 2016 与加密列相比有哪些优势?

我正在阅读 SQL 加密方法,我对 TDE 有很好的了解,然后我阅读了加密列,然后阅读了始终加密。Always Encrypted的描述非常冗长和详细,但带有Encrypted Columns的文本的深度较浅,但在我看来,它似乎在做同样的事情。我想了解2之间的区别,新版本是否有任何优势?

sql-server encryption always-encrypted

3
推荐指数
1
解决办法
2621
查看次数

自签名证书是 SQL Server Always Encrypted 的标准做法吗?

我们正在 2019 年环境中实施 SQL Server Always Encrypted。在过去的几个月里,我们已经完成了几次成功的 POC,但在将解决方案转移到 Prod 时,我希望使用公共可信 CA 来获取证书。但现在,回顾网络上大约 10 个 AE 教程,包括 Microsoft 官方说明,我发现从未提及过使用公共可信 CA。这里甚至有一篇文章询问使用受信任的 CA 证书是否会带来任何好处,并且建议不会。

我正在努力满足我们在全公司范围内推出的所有安全计划,所以我想我正在尝试找到某种我可以指出的标准答案。

我一直在谈论自签名证书如何受到中间人攻击,但我想我开始意识到这仅适用于正在建立的 SQL 连接以及流经该连接的任何数据(因为表中的数据未加密,SSL 对其进行加密)。但对于AE来说,数据库中的数据已经只是一个加密的字符串。

那么,如果始终加密解决方案的本质是在从未创建或存在于保存数据的同一服务器上的自签名证书的情况下完成,是否可以排除任何 MIM 攻击?简单地使用自签名证书是公认的“标准”方式吗?经过深思熟虑,我相信答案是肯定的,但只是想要某种“官方”答案,哈哈。

sql-server certificate always-encrypted

3
推荐指数
1
解决办法
554
查看次数

ssms 2017 中始终加密的 varchar 更新类型冲突

我正在使用 SSMS 17.6 并且我正在尝试始终加密功能。我能够通过声明一个参数然后使用该参数来更新/插入/搜索日期时间字段,例如:

DECLARE @NewValue datetime 
SET @NewValue = '19/05/2018' 
update MyTable set my_ae_column = @NewValue
Run Code Online (Sandbox Code Playgroud)

我正在尝试对设置了 bin2 排序规则的 varchar(30) 字段执行相同的操作,但我仍然得到

操作数类型冲突问题

有什么建议吗?

sql-server always-encrypted sql-server-2017

-2
推荐指数
1
解决办法
950
查看次数