sql - SQL的列级加密在哪里使用?
问题描述
我能够使用以下代码在 SQL 中进行列加密:
USE EncryptionDemonstration
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ThisIsMySampleStrongPassword'
CREATE CERTIFICATE MyServerCertificate WITH SUBJECT = 'This is my Demonstration Certificate'
CREATE SYMMETRIC KEY SSN_Keys
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE MyServerCertificate;
GO
CREATE SYMMETRIC KEY CreditCard_Keys
WITH ALGORITHM = AES_128
ENCRYPTION BY CERTIFICATE MyServerCertificate;
ALTER TABLE Customer
ADD SSN_Encrypted varbinary(128),
CCN_Encrypted varbinary(128)
OPEN SYMMETRIC KEY CreditCard_Keys
DECRYPTION BY CERTIFICATE MyServerCertificate
OPEN SYMMETRIC KEY SSN_Keys
DECRYPTION BY CERTIFICATE MyServerCertificate
UPDATE Customer
SET SSN_Encrypted = EncryptByKey(Key_GUID('SSN_Keys')
, SocialSecurityNumber)
UPDATE Customer
SET CCN_Encrypted = EncryptByKey(Key_GUID('CreditCard_Keys ')
, CreditCardNumber)
GO
OPEN SYMMETRIC KEY SSN_Keys
DECRYPTION BY CERTIFICATE MyServerCertificate
OPEN SYMMETRIC KEY CreditCard_Keys
DECRYPTION BY CERTIFICATE MyServerCertificate
SELECT SocialSecurityNumber, SSN_Encrypted
AS 'Encrypted SSN',
CONVERT(varchar, DecryptByKey(SSN_Encrypted))
AS 'Decrypted SSN'
FROM Customer
SELECT CreditCardNumber, CCN_Encrypted
AS 'Encrypted Credit Card Number',
CONVERT(varchar, DecryptByKey(CCN_Encrypted))
AS 'Decrypted Credit Card Number'
FROM Customer
现在我的问题是,如果可以在此数据库上访问它的任何人都可以运行 DecryptByKey 函数来查看解密值,这对安全性有何帮助?我对数据库主密钥和证书的使用并不完全熟悉,所以请多多包涵。
解决方案
推荐阅读
- css - 网格行高根据网格模板区域的内容:不是砖石
- hierarchical-data - grid.js 显示分层数据
- github-actions - GitHub.com 操作 - npm run build - debug.log
- node.js - Nodejs中的IOredis连接超时错误
- sql - 单行子查询在 HR 模式中的 oracle 中返回多行
- python - 我的 for 循环代码中有什么问题要从我的原始数据中分离并创建一个新的 DataFrame?
- c# - asp.net core 3.1 中的会话管理
- shell - 如何使用给定的 sudo 密码使用 Golang 到 shell 命令
- java - JBoss 虚拟主机和上下文根
- flutter - Flutter 通过通配符后缀获取资产