非对称加密笔记,SQLServer数据库增加和删除改查

一、数据库定义

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。数据库的操作分为两种形式:一种是直接在数据库管理工具图形化界面进行操作;一种是使用数据库脚本进行操作,数据库脚本可以直接在数据库管理工具中操作,也可以在dos命令窗口中操作。

数据表定义

数据表(或称表)是数据库最重要的组成部分之一,数据库中以表为组织单位存储数据,数据库只是一个框架,数据表才是其实质内容。数据库管理工具中可以显示数据库中的所有数据表,数据表是数据库中一个非常重要的对象,是其他对象的基础。

 第一步、创建文件和文件组

一:对称加密 

     原始明文---密钥---加密数据---密钥---原始明文

     速度快,通过算法将明文混淆,占用系统资源少

二、数据库创建

方式一:数据库图形化管理工具创建数据库步骤:右键点击数据库-》点击新建数据库-》输入数据库名称,可自定义数据库所有者(设置哪些人可以使用数据库)、逻辑名称、初始大小(数据库初始化大小)、自增长大小(数据库新增数据的时候以每次多大存储量增长)、路径(数据库数据文件路径,关系到以后的数据库备份,迁移,还原等操作)、文件名(数据库的文件名称)、日志等属性,左上角的选项和常规可以使用系统默认的-》点击确定即可创建数据库

图片 1

图片 2

方式二:数据库脚本创建数据库步骤:编写脚本-》在数据库管理工具中执行脚本-》刷新数据库即可显示;

 

 1 --创建数据库
 2 create database testss
 3 on 
 4 (
 5     name='testss',
 6     filename='D:SqlTestblogtestss.mdf',
 7     size=10240kb,
 8     maxsize=102400kb,
 9     filegrowth=1024kb
10 )
11 log on
12 (
13     name='testlog',
14     filename='D:SqlTestblogtestlog.ldf',
15     size=10240kb,
16     maxsize=102400kb,
17     filegrowth=1024kb
18 )
19 go

 

 

创建结果示例如下:

图片 3

创建数据表

方式一:打开数据库管理工具-》登录-》选择数据库-》选择表-》右键点击,选择新建表-》在右边视图中输入列名、数据类型、是否可空、在列属性中设置需要的属性-》点击保存(或ctrl s)-》保存成功,刷新即可显示

图片 4

图片 5

方式二:使用T-SQL脚本新建表

 1 --数据库声明
 2 use testss
 3 --建表语法声明
 4 create table test1
 5 (
 6 --字段声明
 7 id int identity(1,1) not null,
 8 name nvarchar(50) null,
 9 sex nvarchar(50) null,
10 age nvarchar(50) null,
11 classid int,
12 primary key clustered(id asc) with(ignore_dup_key=off) on [primary]    --主键索引声明
13 )on [primary]
14 
15 --字段注释声明
16 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主键' , @level0type=N'SCHEMA',
17 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';
18 
19 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',
20 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';
21 
22 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',
23 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'sex';
24 
25 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',
26 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';
27 
28 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'班级id' , @level0type=N'SCHEMA',
29 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'classid';
30 
31 go

 示例结果如下:图片 6

-- 准备工作,模拟数据。

 

insert into

test

values

('test','2014-01-01') , 

('test','2014-02-01') , 

('test','2014-03-01') , 

('test','2014-04-01') , 

('test','2014-05-01') , 

('test','2014-06-01') , 

('test','2014-07-01') , 

('test','2014-08-01') , 

('test','2014-09-01') , 

('test','2014-10-01') 

 

select *  from User_DB.dbo.test  

 

 

二:非对称加密

     加密解密速度慢,较高的系统资源占用

 

三、数据库删除

方式一:直接在数据库管理工具中右键-》选择删除

图片 7

 

方式二:在数据库管理工具中数据脚本:drop database 数据库名

删除数据表

方式一:打开数据库管理工具-》登录-》选择数据库-》选择表-》右键点击,选择删除-》点击弹出框中的确定删除-》刷新数据库

图片 8图片 9

方式二:使用T-SQL脚本删除:drop table test2;

图片 10

## -- 1、添加文件组

 

alter database User_DB add filegroup know1 

alter database User_DB add filegroup know2

alter database User_DB add filegroup know3  

 

三:混合数据加密

     加密过程:随机生成对称密钥,使用公钥加密对称密钥。

     解密过程:用私钥解开被加密的对称密钥,使用对称密钥解密数据

 

四、数据库修改

方式一:选中数据库-》右键-》选择重命名-》输入数据库新名称

图片 11

方式二:在数据库管理工具中输入脚本修改:exec sp_renamedb 'testss','test1'或者alter database test1 modify name=test2 

图片 12

修改数据表

方式一:打开数据库管理工具-》登录-》选择数据库-》选择表-》右键点击,选择重命名-》重新输入表名-》按enter键确定-》刷新可查看新表名

 图片 13

方式二:使用T-SQL脚本修改表名:exec sp_rename 'test1','test2';

图片 14

## -- 2、创建数据库文件到文件组

 

alter database User_DB add file    

(name=N'know1',filename=N'G:DBfenquknow1.ndf',size=5Mb,filegrowth=5mb, maxsize=1gb)

to filegroup know1

 

 

alter database User_DB add file    

(name=N'know2',filename=N'G:DBfenquknow2.ndf',size=5Mb,filegrowth=5mb, maxsize=1gb)

to filegroup know2

 

 

alter database User_DB add file    

(name=N'know3',filename=N'G:DBfenquknow3.ndf',size=5Mb,filegrowth=5mb, maxsize=1gb)

to filegroup know3  

 

## --3、右键到要分区的表>> 存储--- >> 创建分区--- >>显示向导视图--- >> 下一步--- >> 下一步

 

四:备份,还key原服务主密钥 (sqlserver服务器主密钥)

   备份密钥

   Backup service master key to file =’c:xx.bak’;

   Encryption  by password = ‘password’;

   实例backup service master key to file = 'D:work pathdbFiledata.bak' 

    encryption by password = 'test'

   还原密钥

   Restore service master key from file =’c:xx.bak’

   Decryption by password=’password’;

五、查数据库查看

方式一:在数据库管理工具中选中数据库-》右键属性-》查看数据库相关配置信息

图片 15

图片 16

方式二:在数据库管理工具中输入数据库脚本查看,一下列举几种常用的数据库查看信息

--使用目录视图查看数据库信息
--使用sys.database_files查看有关数据库文件的信息
select * from sys.database_files;
--使用sys.filegroups查看有关数据库组的信息
select * from sys.filegroups;
--使用sys.master_files 查看数据库文件的基本信息和状态信息
select * from sys.master_files;
--使用sys.databases 数据库和文件目录视图查看有关数据库的基本信息
select * from sys.databases where name='testss';

图片 17

 

--使用函数查看数据状态
use testss
select databasepropertyex('test2','Status') as 'test数据库状态'

图片 18

查看数据表

--查询数据库下所有的表
--xtype='U'查询用户表
select name from sysobjects where xtype='U'
-- xtype='S'查询系统表
select name from sysobjects where xtype='S'

--查看test1表的所有信息
exec sp_help test1;

--查询test1表中所有的列
select * from syscolumns where id=Object_Id('test1')

--查看test1表中所有列数据
select * from test1;

# 第二步、执行生成的创建分区sql

 

USE [User_DB]

GO

BEGIN TRANSACTION

五:创建数据库主密钥(需要手动创建数据库主密钥)

    Create master key encryption by password = ‘password’

create master key encryption by password = 'databaseTest'    

备份数据库密钥

backup master key to file = 'D:work pathdbFiledatabase.bak' encryption by password = 'databaseTest'

 

 

六、数据库优缺点

优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等。

缺点:1开放性。只能运行在微软的windows平台,没有丝毫的开放性可言。

      2可伸缩性,并行性。并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。
      3性能稳定性。SQLServer当用户连接多时性能会变的很差,并且不够稳定。
      4使用风险。SQLServer完全重写的代码,经历了长期的测试,不断延迟,许多功能需时间来证明。并不十分兼容早期产品。使用需要冒一定风险。
      5客户端支持及应用模式。只支持C/S模式。

## -- 1、创建分区函数

CREATE PARTITION FUNCTION [knowPartitionFunc](datetime) 

AS RANGE

LEFT FOR VALUES (N'2014-01-01T00:00:00', N'2014-02-01T00:00:00', N'2014-03-01T00:00:00')

 

六:目录视图中查看数据库密钥信息

select * from sys.symmetric_keys

 

 

select * from sys.databases  --is_master_key_encrypted_by_server 1 表示使用服务主密钥对数据库主密钥进行加密

## -- 2、创建分区解决方案

CREATE PARTITION SCHEME [konwPartitionSolution]

 AS PARTITION [knowPartitionFunc] TO ([PRIMARY], [know1], [know2], [know3])

 

七:创建证书

 Create certificate cert_mycert;--创建证书

 Encryption by password=’’--创建证书密码

 with subject 标题

 

 创建证书时效性,需要存储过程等方式手动验证

 Start_data=’’    expiry_date=’’

 

命令如下:

 

Create certificate myfirst_cert Encryption by password='myfirst_cert' with subject = 'myfirst_cert', start_date = '1/1/2010', expiry_date = '1/1/2015'

 

Create certificate test_cert Encryption by password='test_cert' with subject = 'test_cert', start_date = '1/1/2010', expiry_date = '1/1/2015'

查询证书

Select * from sys.certificates  

## -- 3、创建索引

CREATE CLUSTERED INDEX [ClusteredIndex_on_konwPartitionSolution_635706905441367386] 

ON [dbo].[test] 

(

    [time]

)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF)

 ON [konwPartitionSolution]([time])

 

八:与证书相关的函数

Encyrptbycert(id,’cleartext’);

 

Cert_id(‘'myfirst_cert’)

 

## -- 4、删除索引

DROP INDEX

 [ClusteredIndex_on_konwPartitionSolution_635706905441367386]

  ON [dbo].[test] WITH ( ONLINE = OFF )

 

COMMIT TRANSACTION  

 

九:创建非对称密钥

使用sn.exe工具也可以创建

 

Create asymmetric key asy_key1 With algorithm = rsa_2048 Encryption by password='asy_key1'

 

# 第三步、查看分区结果

## --查看分区表中,每个非空分区存在的行数

 

select $partition.[knowPartitionFunc](time) as partitionNum,count(*) as recordCount

from test

group by  $partition.[knowPartitionFunc] (time)

 

 

 

## --查看分区数据

select $partition.[knowPartitionFunc](time) as partitionGroupId,*

from test 

 

 

十:创建对称密钥

   Create symmetric key sy_key1 With algorithm = aes_256 Encryption by password='sy_key1'

 

Create symmetric key sy_key1_test With algorithm = aes_256 Encryption by password='testPassword'

 

十一:查询密钥

1:打开密钥指令

open symmetric key sy_key1 decryption by password ='sy_key1'

 

查询密钥

select * from sys.openkeys

 

关闭密钥

 close symmetric key sy_key1_test

 

十二:使用密钥加密数据例子 (加密列不要创建索引,无意义,并且考虑列长度会变长)

declare @oldContent varbinary(200); --定义原始变量

declare @newContent varbinary(200);--定义加密后的变量

set @oldContent = convert( varbinary(200),'这是测试数据');--给原始变量赋值

set @newContent = encryptbycert(cert_id('test_cert'),@oldContent)--通过证书加密数据 test_cert  证书名

select @newContent --加密查询

select convert(varchar(200),decryptbycert(cert_id('test_cert'),@newContent ,N'test_cert')) as [ts] --解密查询test_cert  证书名 N'test_cert'  证书密码

 

十三:表示例

create table usertest(id int primary key identity(20,1),username varbinary(20),usermoney int)

insert into usertest (username,usermoney) values('aaa',encryptbycert(cert_id('test_cert'),'200'))

insert into usertest (username,usermoney) values('bbb',encryptbycert(cert_id('test_cert'),'300') )

insert into usertest (username,usermoney) values('ccc',encryptbycert(cert_id('test_cert'),'400') )

insert into usertest (username,usermoney) values('ddd',encryptbycert(cert_id('test_cert'),'500') )

 

 

正确插入数据

insert into usertest (username,usermoney) values('aaa',encryptbykey(key_guid('sy_key1_test'),'200'))

insert into usertest (username,usermoney) values('bbb',encryptbykey(key_guid('sy_key1_test'),'300') )

insert into usertest (username,usermoney) values('ccc',encryptbykey(key_guid('sy_key1_test'),'400') )

insert into usertest (username,usermoney) values('ddd',encryptbykey(key_guid('sy_key1_test'),'500') )

select id,username,cast(decryptbykey(usermoney) as varchar(20)) as 'test' from usertest

 

通过验证器加入数据

加数据方法     Encryptbykey(key_guid(‘证书名字’),加密值,使用验证器,’验证器的值’)

insert into usertest (username,usermoney) values('aaa',encryptbykey(key_guid('sy_key1_test'),'600',1,'20') )

insert into usertest (username,usermoney) values('bbb',encryptbykey(key_guid('sy_key1_test'),'300',1,'21') )

insert into usertest (username,usermoney) values('ccc',encryptbykey(key_guid('sy_key1_test'),'400',1,'22') )

insert into usertest (username,usermoney) values('ddd',encryptbykey(key_guid('sy_key1_test'),'500',1,'23') )

解密方法

Cast(Decryptbykey(解密列1,1,cast(验证器值 as varcahar(100)))  as varchar(200))

select id,username,cast(decryptbykey(usermoney,1,cast(id as varchar(3))) as varchar(20)) as 'test' from usertest

# 第四步、为已存在的分区表添加新的边界值

## --1、创建文件组和对应的文件。

alter database User_DB add filegroup know4

 

alter database User_DB add file    

(name=N'know4',filename=N'G:DBfenquknow4.ndf',size=5Mb,filegrowth=5mb, maxsize=1gb)

to filegroup know4

 

## --2、给分区方案添加文件组

alter partition scheme konwPartitionSolution

NEXT USED know4

 

## --3、给分区函数添加一个边界值

alter partition function knowPartitionFunc()

split range(N'2014-04-01T00:00:00') 

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:非对称加密笔记,SQLServer数据库增加和删除改查

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。