您的位置:首页 > 数据库

22. SQL -- SQL Server 2005 和SQL Server 2008新特性

2015-03-29 23:34 387 查看
SQL SERVER 2005 与SQL SERVER 2008 新特性
SQLSERVER 2005 新特性Enhanced Data Types:存储最大8K-2GPartitioned Table(分区表):数据拆分管理SQL 2008 新特性1)、设置状态栏颜色2)、活动监视 DB 实例 → 右键 → 活动监视3)、对象资源管理器详细信息 视图 →对象资源管理器详细信息4)、数据库对象搜索 视图 → 对象资源管理器详细信息 → DB → 插索5)、智能感知 在输入语句时,会智能感知函数、对象等信息6)、T-SQL 调试7)、多服务器查询8)、加密加密方式:透明数据加密; 备份加密 ;HASH 加密; 用密码加密数据;创建对称密钥加密数据;用证书加密数据A、透明数据加密: 整个数据库可以通过SQL 引擎加密。该方式加密了所有数据库的数据和数据库的日志文件。通过使用这个包罗万象的方式,所有的索引和表都是加密的。不必更改你的应用程序。加密步骤:(1)、查看master 数据库是否被加密SELECT name,is_master_key_encrypted_by_server FROM sys.databases;(2)、在主数据库中创建一个主密钥--创建master 数据库下的主数据库密钥CREATE MASTER KEY ENCRYPTION BYPASSWORD = N'passw0rd';/*RESTORE SERVICE MASTER KEYFROMFILE = 'c:\SqlBackup\SMK.bak'DECRYPTION BY PASSWORD ='passw0rd'go--重新生成数据库主密钥ALTER MASTER KEY[FORCE]REGENERATE WITH ENCRYPTION BYPASSWORD = 'password'--删除数据库主密钥GODROP MASTER KEY*/ (3)、查看master 数据库下的密钥信息SELECT * FROM sys.symmetric_keys;(4)、创建证书用来保护数据库加密密钥(DEK)CREATE CERTIFICATEmaster_server_cert WITH SUBJECT = N'Master Protect DEKCertificate';(5)、创建测试数据库IF DB_ID('db_encryption_test') ISNOT NULLDROP DATABASE db_encryption_testgoCREATE DATABASEdb_encryption_test;--创建由master_server_cert 保护的DEK 数据库加密密钥(对称密钥)CREATE DATABASE ENCRYPTION KEYWITH ALGORITHM = AES_128ENCRYPTION BY SERVER CERTIFICATEmaster_server_cert;GO--系统提示你,立刻备份证书;这里备份证书。USE master;BACKUP CERTIFICATEmaster_server_cert TO FILE = 'c:\master_server_cert.cer'--不要保存在根目录,不然报错WITH PRIVATE KEY (FILE ='c:\master_server_cert.pvk' , --不要保存在根目录,不然报错ENCRYPTION BY PASSWORD ='passw0rd' );--相应的,我们也备份一下数据库主密钥(master)USE master;--如果没有启用主密钥的自动解密功能--OPEN MASTER KEY DECRYPTION BYPASSWORD = 'passw0rd';BACKUP MASTER KEY TO FILE ='c:\master.cer' --不要保存在根目录,不然报错ENCRYPTION BY PASSWORD ='passw0rd';GO--生产环境下,设置成单用户在运行加密ALTER DATABASE db_encryption_testSET SINGLE_USER WITH ROLLBACKIMMEDIATE;GO--备份成功以后,开启TDE 加密ALTER DATABASE db_encryption_testSET ENCRYPTION ON;GO--设置多用户访问ALTER DATABASE db_encryption_testSET MULTI_USER WITH ROLLBACKIMMEDIATE;GO--查看db_encryption_test 数据库是否被加密 encryption_state:3 TDE加密了,2 正在加密SELECTDB_NAME(database_id),encryption_state FROM sys.dm_database_encryption_keys;/*发现tempdb 也被加密了。MSDN 解释是:如果实例中有一个数据库启用了TDE加密,那么tempdb 也被加密*/--接下来,找另外一台机器或者实例来测试,如果数据文件被盗走了,防止附加的测试.USE master;EXEC sp_detach_dbN'db_encryption_test';GOB、备份加密: SQL Server 2008 加密备份的方式可以防止数据泄漏和被窜改。另外,备份的恢复可以限于特点的用户。CHASH 加密:SQL SERVER 允许5 种不同的哈希算法SHA、SHA1、MD2、MD4、MD5,哈希算法对大小写敏感declare @hash varchar(100)select @hash='encryption text'--SHAselect HASHBYTES('SHA',@hash)--SHA1select HASHBYTES ('SHA1', @hash)--MD2select HASHBYTES ('MD2', @hash)--MD4select HASHBYTES ('MD4', @hash)--MD5select HASHBYTES ('MD5', @hash)D、用密码加密数据:declare @encryptedtextvarbinary(80)select @encryptedtext=ENCRYPTBYPASSPHRASE('passw0rd','encryptiontext')select@encryptedtext,CAST(DECRYPTBYPASSPHRASE('password',@encryptedtext)as varchar(max))select@encryptedtext,CAST(DECRYPTBYPASSPHRASE('passw0rd',@encryptedtext)as varchar(max))E、创建对称密钥来加密数据:use AdventureWorks --打开数据库go--1、建立对称密钥匙CREATE SYMMETRIC KEYtestsymmterickey with algorithm =RC4encryption by password='passw0rd'select * from sys.symmetric_keys--2、打开对称密钥open symmetric key testsymmterickeydecryption by password='passw0rd'--3、查看用对称密钥匙加密的数据declare @encryptedtextvarbinary(80)select@encryptedtext=ENCRYPTBYKEY(KEY_GUID('testsymmterickey'),'encryptedtext')select@encryptedtext,CAST(DECRYPTBYKEY(@encryptedtext) as varchar(30))--4、关闭对称密钥close symmetric keytestsymmterickeyF、用证书加密数据--1、创建测试表及增加登录用户create table certest (id intidentity(1,1) primary key,salesrep varchar(30) not null,saleslead varbinary(500) notnull)gocreate user salesrep1 withoutlogingocreate user salesrep2 withoutlogingogrant select,insert ondbo.certest to salesrep1grant select,insert ondbo.certest to salesrep2go--2、为每个用户创建一个证书--CREATE MASTER KEY ENCRYPTION BYPASSWORD = 'passw0rd'-- BACKUP MASTER KEY TO FILE ='C:\sqlcert\masterkeya' ENCRYPTION BYPASSWORD = 'passw0rd'create certificate salesrep1certauthorization salesrep1with subject='salesrep 1certificate'gocreate certificate salesrep2certauthorization salesrep2with subject='salesrep 2certificate'goselect * from sys.certificates--3、为每个用户写入数据execute as user='salesrep1'goinsert into dbo.certestvalues('salesrep1',ENCRYPTBYCERT(CERT_ID('salesrep1cert'),'fabrikam'))revertgoexecute as user='salesrep2'goinsert into dbo.certestvalues('salesrep2',ENCRYPTBYCERT(CERT_ID('salesrep2cert'),'contoso'))revertgo--4、查看表的内容及每个用户的数据select * from dbo.certestgoexecute as user='salesrep1'goselect*,CAST(DECRYPTBYCERT(cert_id('salesrep1cert'),saleslead) as varchar(max))from dbo.certestrevertgoexecute as user='salesrep2'goselect*,CAST(DECRYPTBYCERT(cert_id('salesrep2cert'),saleslead) as varchar(max))from dbo.certestrevertgo9)、数据压缩压缩方式:A、行压缩:a- 减少元数据头记录数据。b- 所有的数值类型(integer,decimal,float)或基于数值类型的类型都会被压缩(datetime,money)。比如,100 被存在一个int 型字段中,占4 位,但是从0~255只需要1 位,压缩后,就节省了3byte 空间。c- Char 和NChar 都被存放于可变长度的类型中。原因同上。比如,CSDN 被存在Char(10)中,但是它只需要Char(4)空间,所以压缩后就释放了Char(6)个空间。d- 所有类型的NULL 和0 都不占字节了。B、页压缩:a- 进行行压缩。b- 前标压缩:每一页中的所有列,在行标头下面,每行都存储着一个行定义值,压缩后,所有行的定义值都被替换成行头值的引用。c- 字典压缩:字典压缩和前标压缩类似。前标压缩中,一个与其他普通值不同的值被定义到每一列上。但是字典压缩中,每一页中所有列的普通值被存在下一行的行头前面。然后,这些值被替换成新行的引用值。备份压缩:a- 备份压缩可以大大减小数据库备份文件的大小,由于降低了备份时的I/O,所以进行备份压缩通常可以提高备份的速度。b- 备份压缩是用CPU 换空间,虽然减少了存储空间大小,但是在备份和还原时将消耗更多的CPU。DB → 任务 → 备份 → 选择压缩备份10)、安全性增强A、 配置安全B、 身份验证Kerberos / NTLM强制密码策略端点身份验证登录凭证加密单点登录C、 授权颗粒度更高D、 数据加密E、 行为审计11)、元数据有关的存储12)、新增系统函数13)、策略管理:基于策略的管理是一种用于管理一个或多个SQL Server 2008 实例的系统。使用策略管理可以检查数据库对象的属性甚至限制数据库对象的修改。14)、智能化管理按需检查按计划检查,记录违反策略情况即时检查,阻止违反策略的操作即时检查,记录违反策略情况15)、新增T-SQL 语法:INSERT 语句一次插入多条记录INSERT INTO t1 VALUES ('JohnDoe', '425-333-5321'),('Jane Doe', '206-123-4567'),('John Smith', '650-434-7869');新增操作符:+=、-=、*=、/= ……UPDATE t1 SET c1+=1 WHERE c2='a'变量定义同时初始化DECLAER @v int = 5;DECLARE @v1 varchar(10) = xxxxx‘;16)、Merge 语法在SQLServer2008 中可以使用MERGE在一条语句中执行INSERT、UPDATE和DELETE操作,MERGE 语法包括四个主要子句:MERGE 子句用于指定作为INSERT、UPDATE 或DELETE 操作目标的表或视图。USING 子句用于指定要与目标联接的数据源。ON 子句用于指定决定目标与源的匹配位置的联接条件。WHEN 子句用于根据ON 子句的结果指定要执行的操作。17)、Grouping Sets使用GROUPING SETS 的GROUP BY子句可以生成一个等效于由多个简单GROUP BY子句的UNION ALL 生成的结果集-- Use UNION ALL ondual SELECT statementsSELECT customerType,Null asTerritoryID,MAX(ModifiedDate)FROM Sales.Customer GROUP BYcustomerTypeUNION ALLSELECT Null ascustomerType,TerritoryID,MAX(ModifiedDate)FROM Sales.Customer GROUP BYTerritoryIDorder by TerritoryID-- Use GROUPING SETSon single SELECT statementSELECTcustomerType,TerritoryID,MAX(ModifiedDate)FROM Sales.CustomerGROUP BY GROUPING SETS((customerType), (TerritoryID))order by customerType18)、表值参数:表值参数是使用用户定义的表类型来声明的。使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据。19)、日期和时间类型20)、Hierarchyid用于创建具有层次结构的表,或引用位于另一个位置的数据层次结构。系统提供了多个方法用于操作hierarchyid 数据类型。支持深度优先遍历和广度优先遍历:21)、空间地理数据类型22)、稀疏列稀疏列是对 null 值采用优化的存储方式的普通列。当至少能够节省 20% 到 40% 的空间时,才应考虑使用稀疏列。一般情况下表最多可以创建1024 个列。使用稀疏列时可以在表中创建更多的稀疏列。使用稀疏列存储:NULL 值: 0 bytes. 非NULL: +(2-4)b。在稀疏列中检索非NULL 数据性能有一定下降。23)、筛选索引:筛选索引是一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子集中选择数据的查询。24)、FILESTREAM 存储:使用FILESTREAM 允许以独立文件的形式存放大对象数据(varbinary(max)),而不是以往一样将所有数据都保存到数据文件中。

附件:http://down.51cto.com/data/2365545
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQL
相关文章推荐