Sql Server中怎样回护数据库工具的界说
mysql使用内部操作字符集gbk来进行操作,即执行"SELECT*FROMtestWHEREname=xxxor1=1/*LIMIT1";从而注入成功先分明甚么是数据库工具的界说?好比,我们利用sql语句创立一个表:
createtabletest
(
idint,
namevarchar(50)
)
那末,下面的代码就是表test的界说,触发器,视图等等都是云云。
这些信息偶然候是对照主要的,我们其实不但愿被利用者看到,那末在SqlServer怎样回护数据库工具界说,制止产生过分表露敏感信息?
一样平常的回护措施是在创立工具时利用WITHENCRYPTION来把工具加密,如许就没法检察界说。可是成绩是关于保护来讲就成了成绩,并且备份复原时这部分工具是会丧失的。
个中一个办理办法是在加密前,把界说语句放到工具的【扩大属性】中保留,如许能办理下面的成绩。
示例:
--1、创建已加密的存储历程
USEAdventureWorks
GO
CREATEPROCtest
WITHENCRYPTION
AS
SELECTSUSER_SNAME(),
USER_NAME()
GO
--2、将上述界说内容往除,使用短语加密搭配EncryptByPassPhrase函数加密,然后在用sys.sp_addextendedproperty存储历程,指定一个扩大称号。
USEAdventureWorks
GO
DECLARE@sqlVARCHAR(MAX)
SET@sql=CREATEPROCTestWITHENCRYPTIONASSELECTsuer_sname(),user_name()GO
--3、将内容加密后转换成sql_variant数据范例
DECLARE@bsqlSQL_VARIANT
SET@bsql=(SELECTCONVERT(SQL_VARIANT,ENCRYPTBYPASSPHRASE(P@ssw0rd,CONVERT(VARCHAR(MAX),@sql)))
)
--4、新增到指定存储历程的扩大属性中:
EXECsys.sp_addextendedproperty@name=Ntest界说,@value=NSystem.Byte[],
@level0type=NSCHEMA,@level0name=Ndbo,@level1type=NPROCEDURE,
@level1name=Ntest
GO
EXECsys.sp_addextendedproperty@name=N代码内容,
@value=NCREATEPROCTestWITHENCRYPTIONASSELECTsuer_sname(),user_name()GO,
@level0type=NSCHEMA,@level0name=Ndbo,@level1type=NPROCEDURE,
@level1name=Ntest
GO
--5、复原
DECLARE@pwdVARCHAR(100)=P@ssw0rd
--暗码短语
DECLARE@procVARCHAR(100)=test
--存储历程名
DECLARE@exNameNVARCHAR(100)=代码内容
--扩大属性名
--将底本了局查询
SELECTvalueFROMsys.all_objectsASsp
INNERJOINsys.extended_propertiesASPONP.major_id=sp.object_idANDP.minor_id=0ANDP.class=1
WHERE(P.name=@exName)
AND((sp.type=Np
ORsp.type=Nrf
ORsp.type=pc
)
AND(sp.name=@procANDSCHEMA_NAME(sp.schema_id)=Ndbo)
)
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继 原来公司用过MYSQL自己也只是建个表写个SQL 数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。 两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书 对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。 而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~ 总感觉自己还是不会SQL 记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。 从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
页:
[1]