实例讲解SQL Server加密功能
作者:joe321 发布时间:2024-01-24 04:05:15
SQL Server中加密是层级的,每一个上层为下提供保护。如图:
实例:
/**
SMK(Service Master Key)在SQL Server安装时生成,由Windows DPAPI(Data Protection API)提供保护
**/
/**创建数据库级别DMK(Database Master Key),受SMK保护**/
create master key encryption by password=N'Passw0rd'
go
/**数据库内的加密对象受DMK保护
支持的对称加密算法:DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128| DESX | AES_128 | AES_192 | AES_256
非对称加密算法:RSA_512 | RSA_1024 | RSA_2048
注意避免使用RC,DESX类算法,2014之后会删除此功能
**/
--1.创建非对称密钥.
create asymmetric key asyc_key_enc
with algorithm=RSA_1024
encryption by password=N'Pass@word'
go
--2.创建对称密钥.
create symmetric key symc_key_enc
with algorithm=Triple_DES
encryption by password=N'Pass@word'
go
--3.创建证书.证书也可被其它方式保护
create certificate cert_ENC
with subject='certificate for ENC',expiry_date='20990101'
go
--4.对称密钥可由以上三种方式提供加密保护
--4.1 由非对称密钥加密
create symmetric key symc_key_enc_byAsyc
with algorithm=AES_128
encryption by asymmetric key asyc_key_enc
go
--4.2 由对称密钥加密
open symmetric key symc_key_enc
decryption by password=N'
Pass@word';
create symmetric key symc_key_enc_bySymc
with algorithm = DES
encryption by symmetric key symc_key_enc
go
--4.3 由证书加密
create symmetric key symc_key_enc_byCert
with algorithm =AES_128
encryption by certificate cert_ENC
go
/**列级数据加密和解密.MSSQL提供以下4对加密/解密函数对列数据加密
EncryptByCert() 和DecryptByCert()—利用证书对数据进行加密和解密
EncryptByAsymKey() and DecryptByAsymKey()—利用非对称密钥对数据进行加密和解密
EncryptByKey() and DecryptByKey()—利用对称密钥对数据进行加密和解密
EncryptByPassphrase() and DecryptByPassphrase()—利用密码字段产生对称密钥对数据进行加密和解密
注意:被加密和解密的数据,必需是varbinary类型
**/
--以ENCRYPTBYKEY为例,其它的大同小异
--对***号IDN进行加密和解密
create table tb(IDN int,Name varchar(20));
insert into tb
values (123456789,'BigBrother'),(090807001,'SpiderMan'),(336655789,'SuperMan')
go
--新增列Ency_IDN存储加密数据,使用之前由非对称密钥加密的对称密钥symc_key_enc_byAsyc来加密数据
alter table tb add Ency_IDN varbinary(128);
go
open symmetric key symc_key_enc_byAsyc
decryption by asymmetric key asyc_key_enc
with password=N'
Pass@word';
update tb
set Ency_IDN=ENCRYPTBYKEY(KEY_GUID('symc_key_enc_byAsyc'),CONVERT(Varbinary,IDN));--加密前要转成varbinary
close symmetric key symc_key_enc_byAsyc --显式关闭对称密钥
go
--解密被加密的列数据
open symmetric key symc_key_enc_byAsyc
decryption by asymmetric key asyc_key_enc
with password=N'
Pass@word';
select IDN,Ency_IDN,convert(int,DECRYPTBYKEY(Ency_IDN))as Decr_IDN
from tb;
close symmetric key symc_key_enc_byAsyc --显式关闭对称密钥
go
1
<br>


猜你喜欢
- 目录什么是pyecharts?pyecharts安装加载折线图的绘制条形图和折线图的结合绘制漏斗图什么是pyecharts?pyechart
- 1.from_unixtime的语法及用法(1)语法:from_unixtime(timestamp ,date_format)即from_
- 本文实例讲述了Javascript获取表单名称(name)的方法。分享给大家供大家参考。具体如下:下面的代码通过表单的name属性获得表单名
- asp之家注:防止表单重复提交的方法,在客户端其实很容易实现,只要使用js让用户第一次点击提交按钮后,把提交按钮设置为disabled,这样
- 1. 正则表达式基础1.1. 简单介绍正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个
- 一、验证计算机服务列表中是否有MySQL服务(1)右击桌面上的计算机图标出现菜单列表选项,选中管理(有多种方式可以打开计算机本地服务列表,这
- vue+element表格实现多层数据嵌套今天用element的表格渲染了商城的购物车列表,element的表格之前也用到过,它把所有的东西
- 查找二分查找二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结
- 本文记录了mysql 8.0.12 安装配置方法,供大家参考,具体内容如下1、从官网下载MySQL for Windows:https://
- 如同这个数据结构的名称所说的那样,它记录了每个键值对添加的顺序。d = OrderedDict()d['a'] = 1d[&
- 问题概述今天在上班时,DBA突然找出来一段sql,表示该sql存在隐式转换,不走索引。经过我们的查看后,发现是类型varchar的字段, 我
- list1 和list2 两个list , 想要得到list1是不是包含 list2 (是不是其子集 )a = [1,2] b = [1,2
- Matplotlib简介Matplotlib是一个Python工具箱,用于科学计算的数据可视化。借助它,Python可以绘制如Matlab和
- Mac键盘符号和修饰键说明⌘ Command⇧ Shift⌥ Option⌃ Control↩︎ Return/Enter⌫ Delete⌦
- 一、实战场景Flask 框架实现用户的注册,登录和登出。二、主要知识点flask_login 插件使用SQLAlchemy 基础操作用户基础
- 目录优化排序查询避免重复获取刚刚修改的数据行懒加载的联合查询优化排序查询自定义变量的一个重要特性是你可以同时将该变量的数学计算后的结果再赋值
- driver.get("url")等到页面全部加载渲染完成后才会执行后续的脚本。在执行脚本时,driver.get(&q
- PPOCRLabel标注的txt格式转换成labelme能修改的json格式PPOCR是个好东西默认的训练文件是用自带的PPOCRLabel
- WingIDE的使用好的工具可以让你做事时,事半功倍!这一点在写代码的过程中尤为明显,使用Pyhton写程序有一年多了!各类编辑器IDE也使
- 前言这是一篇罗里吧嗦的前言,可能更多的属于个人的感慨以及吐槽。首先打个广告:你每天点点点累么?面对越来越卷的环境你彷徨么?被要求 2 天做一