惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
J
Java Code Geeks
小众软件
小众软件
D
Docker
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
V2EX
博客园 - 叶小钗
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
IT之家
IT之家
博客园 - 司徒正美
M
MIT News - Artificial intelligence
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog

博客园 - 为人民服务而努力

C#的类型转换 网址推介 javascript 常用验证函数 vs2005sp1集成安装 web打印大全 - 为人民服务而努力 - 博客园 ORACLE学习小记 精妙TSQL语句不断更新 asp.net2.0文章收集 正则表达式集合 TSQL技巧集 XML-XPATH 相关 XML收藏 最新的文章连接 Asp.net与SQL一起打包部署安装 从Visual Studio 2003迁移到Visual Studio 2005的尝试 SQL Server 2005中的T-SQL SQL Server 2005中的CTE SQL Server 2005 数据库快照(database Snapshot) SQL SERVER2005 加密体系2(转)
SQL SERVER2005 加密体系1(转)
为人民服务而努力 · 2006-08-01 · via 博客园 - 为人民服务而努力

SQL Server 2005加密体系(一)
SQL Server 2005中引入了一套完整的加密方法,具体的术语呢就偷个懒不写了,大家可以看BOL么。

大致的结构呢就是在安装sQL Server 2005的时候利用SQL Server服务账号生成一个服务主密钥Service Master Key,然后数据库的管理员可以在数据库上创建Database Master Key,当然也可以不创建,同时数据库管理员可以为Database User创建证书、对称密钥或者非对称密钥。这三种对象都可以用于加密用户数据,但一般推荐利用证书签署代码,利用证书或者非对称密钥加密对称密钥,利用对称密钥加密用户数据。

以下还是给一段代码,因为考虑到我跟王辉兄弟当时在成都宾馆里研究这个东西就是苦于找不到完整的范例代码,后来还是GTEC的徐强大拿给了个Link,然后我们又东拼西凑才出了一段代码,不敢独享,拿来与大家分享。

先给利用证书签署代码的范例,这段代码的好处是不用给Database User大的权限,就可以让用户修改部分数据,这也是SQL Server 2005中权限粒度化的一种表现:

--------------------------------------------------------------------------------

--创建实验用数据库
USE master
IF EXISTS(SELECT [name] FROM sys.databases WHERE [name] = 'Sales')
 DROP DATABASE Sales
CREATE DATABASE Sales
IF EXISTS(SELECT principal_id FROM sys.server_principals WHERE [name] = 'ryan' AND [type] = 'S')
 DROP LOGIN ryan
CREATE lOGIN ryan WITH PASSWORD = 'P@ssw0rd'
IF EXISTS(SELECT principal_id FROM sys.server_principals WHERE [name] = 'teddy' AND [type] = 'S')
 DROP LOGIN teddy
CREATE lOGIN teddy WITH PASSWORD = 'P@ssw0rd'

--创建用户ryan,并创建数据库主密钥
USE Sales
IF EXISTS(SELECT * FROM sys.database_principals WHERE [name] = 'ryan' AND [type] = 'S')
 DROP User ryan
CREATE USER ryan FOR LOGIN ryan WITH DEFAULT_SCHEMA = dbo
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd'
GO

--创建证书
IF EXISTS(SELECT [name] FROM sys.certificates WHERE [name] = 'CERT_MAINTAIN')
 DROP CERTIFICATE CERT_MAINTAIN
CREATE CERTIFICATE CERT_MAINTAIN
 WITH SUBJECT = 'Certificate For Database Maintainance',
 START_DATE = '01/01/2006',
 EXPIRY_DATE = '12/31/2015'
GO

SELECT * FROM sys.certificates

--利用证书创建数据库用户,并授予该用户管理数据库用户的权限
CREATE USER USER_MAINTAIN FOR CERTIFICATE CERT_MAINTAIN
GRANT ALTER ANY USER TO USER_MAINTAIN

--创建存储过程
IF EXISTS(SELECT [name] FROM sys.procedures WHERE [name] = 'usp_AddUser')
 DROP PROCEDURE dbo.usp_AddUser
GO
CREATE PROCEDURE dbo.usp_AddUser
 @UserName varchar(50)
AS
IF EXISTS(SELECT * FROM sys.database_principals WHERE [name] = @UserName AND [type] = 'S')
 EXEC ('DROP USER ' + @UserName)

EXEC ('CREATE USER ' + @UserName)
GO

--完成准备工作,开始测试加密
GRANT EXEC ON dbo.usp_AddUser TO ryan
EXECUTE AS LOGIN = 'ryan'
BEGIN TRY
 EXEC dbo.usp_AddUser 'teddy'
END TRY
BEGIN CATCH
 SELECT ERROR_MESSAGE() AS 'Error Msg'
END CATCH
REVERT

--利用证书签署存储过程代码
ADD SIGNATURE TO dbo.usp_AddUser BY CERTIFICATE CERT_MAINTAIN
ALTER CERTIFICATE CERT_MAINTAIN REMOVE PRIVATE KEY

--在此尝试执行脚本
EXECUTE AS LOGIN = 'ryan'
EXEC dbo.usp_AddUser 'teddy'
REVERT

转自:
http://blog.csdn.net/softj/archive/2006/05/11/723434.aspx