网络编程
位置:首页>> 网络编程>> 数据库>> T-SQL问题解决集锦 数据加解密全集(2)

T-SQL问题解决集锦 数据加解密全集(2)

 来源:asp之家 发布时间:2012-07-11 15:34:08 

标签:数据加解密



问题二:如何保护数据库对象定义,避免发生过渡暴露敏感信息?

一般的保护措施是在创建对象时使用WITH ENCRYPTION来把对象加密,这样就无法查看定义。但是问题是对于维护来说就成了问题,而且备份还原时这部分对象是会丢失的。

其中一个解决方法是把定义语句放到对象的【扩展属性】中保存,这样能解决上面的问题。

下面举个例子:

代码如下:


--1、建立已加密的存储过程
USE AdventureWorks
GO
CREATE PROC test
WITH ENCRYPTION
AS
SELECT SUSER_SNAME() ,
USER_NAME()
GO
--2、将上述定义内容去除,利用短语加密搭配EncryptByPassPhrase函数加密,然后在用sys.sp_addextendedproperty存储过程,指定一个扩展名称。
USE AdventureWorks
GO
DECLARE @sql VARCHAR(MAX)
SET @sql = 'CREATE PROC Test WITH ENCRYPTION AS SELECT suer_sname(),user_name() GO'

--3、将内容加密后转换成sql_variant数据类型
DECLARE @bsql SQL_VARIANT
SET @bsql = ( SELECT CONVERT(SQL_VARIANT, ENCRYPTBYPASSPHRASE('P@ssw0rd',
CONVERT(VARCHAR(MAX), @sql)))
)

--4、新增到指定存储过程的扩展属性中:
EXEC sys.sp_addextendedproperty @name = N'test定义', @value = N'System.Byte[]',
@level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'PROCEDURE',
@level1name = N'test'
GO
EXEC sys.sp_addextendedproperty @name = N'代码内容',
@value = N'CREATE PROC Test WITH ENCRYPTION AS SELECT suer_sname(),user_name() GO',
@level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'PROCEDURE',
@level1name = N'test'
GO

--5、还原
DECLARE @pwd VARCHAR(100)= 'P@ssw0rd'
--密码短语

DECLARE @proc VARCHAR(100)= 'test'
--存储过程名

DECLARE @exName NVARCHAR(100)= '代码内容'
--扩充属性名


--将原本结果查询
SELECT value
FROM sys.all_objects AS sp
INNER JOIN sys.extended_properties AS P ON P.major_id = sp.object_id
AND P.minor_id = 0
AND P.class = 1
WHERE ( P.name = @exName )
AND ( ( sp.type = N'p'
OR sp.type = N'rf'
OR sp.type = 'pc'
)
AND ( sp.name = @proc
AND SCHEMA_NAME(sp.schema_id) = N'dbo'
)
)



问题三、如何让指定用户可以对数据表进行Truncate操作?

Truncate在对大表全删除操作时,会明显比Delete语句更快更有效,但是因为它不需要存放日志,并且一定是全表删除,所以造成数据的不可恢复性。也说明了它的危险性。
但是,执行Truncate需要有表拥有者、系统管理员、db_owner、db_ddladmin这些里面的其中一种高权限角色才能执行。
对此,可以使用05之后的EXECUTE AS表达式来实现权限内容的切换:

1. 切换登录:EXECUTE AS LOGIN

2. 切换用户:EXECUTE AS USER

3. 切换执行权限:EXECUTE AS owner/'user name',利用高用户权限来执行作业。此步骤可以在低权限实体下执行高权限操作,也能避免安全性漏洞。

另外,只有EXECUTE AS Caller可以跨数据库执行,而其他方式进行的权限切换仅限制于本数据库。

注意:执行EXECUTE AS USER模拟使用者切换时,需要先获得被模拟用户的授权。

可以使用REVERT来还原执行内容前的原始身份。


问题四、如何获取前端连接的信息,如IP地址和计算机名?

对于DBA工作或者某些特殊的应用程序,需要获取前端应用的系统信息。而这些信息如果用用户表来存储,代价会比直接读取数据库系统信息要大。所以建议适当读取系统表:

在连接数据库的session期间,都可以在master数据库中找到session信息,但是从05开始,有了很多DMV/DMF来实现这些功能:

l Master.dbo.sysprocesses或者master.sys.sysprocesses:提供执行阶段的SPID、计算机名、应用程序名等。

l Sys.dm_exec_sessions:记录每个session的基本信息,包括id、计算机名、程序名、应用程序名等

l Sys.dm_exec_connections:记录每个连接到SQLServer实例的前端信息,包括网络位置、连接时间等等。

l select client_net_address 'Client IP Address',local_net_address 'SQL ServerIP Address',*

l from sys.dm_exec_connections

l where session_id=@@spid

在2005以后,建议使用DMV取代系统表。

问题五、如何避免SQL注入的攻击?

对于数据库应用程序,无论是那种DBMS,SQL注入都是一大隐患。

要避免SQL注入,应该最起码做到以下几点:

1. 检查输入的数据,应用程序不要相信用户输入的数据,必须经过检验后才能输入数据库。要排除%、--等特殊符号。

2. 避免果度暴露错误信息。建议可以转换成Windows事件或者是转换成应用程序内部错误信息。

3. 使用参数化查询或者存储过程

注意:
动态SQL是导致SQL注入的主凶

作者: 黄钊吉

0
投稿

猜你喜欢

  • 今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的问题,我以前也写过,不过从来没有注意,今天总结了一下,希望能够给大家
  • 阅读是在网站中的一个很重要的部分,可以说是网站的核心。网站最终要呈现给用户的就是内容。尤其是文本内容。豆瓣豆瓣前段时间小改了一下,页面拉宽,
  • access中可以将文本中的数据轻松导入表中,mysql中用起来没那么方便,其实起来也很简单。首先将数据记录按行处理好用特定的字符分开如:“
  • IE 浏览器中 CSS Expression 特性的最大的问题:会反复执行,每秒钟可能执行了成百上千次,有严重的性能问题。如何对 CSS E
  • Dreamweaver MX 2004 试用试用心得:安装:选择工作界面(我选了默认的设计模式)初次启动,选择30天试用如果你也看到这个警告
  • 初步确定是病毒破坏了文件的读写权限,现放出修复工具请中招朋友的测试!!使用方法:压缩包中文件全部解压或者直接运行压缩包中的iisfixer.
  • 下表列出 SQL Server 查询分析器提供的所有键盘快捷方式。活动 快捷方式 书签:清除所有书签。 CTRL-SHIFT-F2
  • 现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了,  比如我.  jquery虽
  • 1、卓越亚马逊的首页轮换图片,每刷新一次,都是随机不同的顺序显示,这样的设计解决了对于较多图片轮换而靠后的图片信息很少被看到的问题,这点对于
  • 当数据库的数据量读写频繁的时候,我们就要考虑把数据库的读写分开,以提高数据库的使用效率,(当然还有其他用处比如,备份数据),这个时候我们就要
  • WAP站点,这似乎是一个有点落伍的东西。在诞生之初,它很简陋,只能通过一个叫WML的标记语言来搭建没有任何美感的文字+链接页面。而今,绝大部
  • 统计分析常常会出错、存在偏见或过于狭隘。数字崇拜者常因专注于统计分析而把可用性研究引入歧途。强调洞察力和定性研究更为重要。用户研究有两种类型
  • 1  。打开您的Microsoft Visual Basic:点击确定,以下就按照蓝色的数字步骤.2 。修改工程名和类模块的名称:
  • 名称:YUI Compressor最新版本:2.4.2用途:js/css压缩必备指数:使用难度:(YUI Compressor非常易用,只是
  • 数据库快照是怎样工作的可以使用典型的数据库命令CREATE DATABASE语句来生成一个数据库快照,在声明中有一个源数据库快照的附加说明。
  • 当我想要完美的使用:nth-child或者:nth-of-type的时候有点儿头晕。你越理解它们,就能写出越好的CSS规则!在这些简单的”秘
  • 描述event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。event对象只在事件发生的过程中才有效。eve
  • 如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间
  • 在 Facebook 上有一个彩蛋:登录 facebook.com ,点击你首页的任何地方,键盘输入 Up, Up, Down, Down,
  •  相信大家从去年圣诞节开始,逐渐发现淘宝网首页的标志开始有了新的形式,从过往的静态图片节日LOGO变成了FLASH的动画小故事LO
手机版 网络编程 asp之家 www.aspxhome.com