未公开的MS SQL Server 加密函数 (未公开的秘密是什么意思)

技术教程 2025-05-08 07:38:34 浏览
加密函数

此文章主要讲述的是未公开的MS SQL server 加密函数,如果对MSSQL的用户信息有兴趣了解的话,你就可能会发现master.dbo.sysxlogins里面存放着用户的口令,可是呢,password字段如果不是null就是一堆看不懂的binary,这个口令是怎么加密的呢?

其实只要仔细看看master.dbo.sp_addlogin就知道了,MSSQL的sp都可以看到代码,真是不错。

让我们来看看它是怎么做的,注意这一行select @passwd = pwdencrypt(@passwd),这个时后@passwd就被加密了,让我们也来试一下

看上去不错,确实被加密了,可是我怎么还原呢?

呵呵,这就没戏了,口令加密都是单向的,用加密后的密文来比较就可以了。

继续看看其它用户相关的sp,可以发现master.dbo.sp_password里面有口令比较的内容。

pwdcompare(@old, password, (CASE WHEN xstatus&2048 = 2048 THEN 1 ELSE 0 END))

不用去理会xstatus,这是一个状态掩码,一般我们用的时候就直接用0就可以了

【编辑推荐】


怎样修改SQL Server 2005/2008的系统存储过程

我们知道,SQLServer2005/2008的系统存储过程在正常情况下是无法直接修改的。 尽管本文是介绍怎样修改它的,但在这里,我还是建议大家尽量不要去修改它。 (好像有点绕哈...)OK,闲话少说,下面我举个实际案例讲解一下,如对于系统存储过程sp_Monitor,若要运行此存储过程,用户必须是sysadmin固定服务器角色的成员。 通过执行命令:sp_helptextsp_Monitor,我们可以看到,该过程中存在这样的语句:if(not(is_srvrolemember(sysadmin)=1))(,-1,-1)return(1)end在这里,我想将该过程中的这些语句去掉,让它能被普通用户执行。 下面是具体的修改步骤:1、停止SQLServer服务2、进入命令提示行模式。 依次执行以下命令:1)cdC:/ProgramFiles/MicrosoftSQLServer/MSSQL.1/MSSQL/Binn--注:这是SQL2005的默认安装目录,如你改变了实际安装路径,请按实际修改2)sqlservr-sMSSQLSERVER-m--注:启动SQLServer服务,-s指定实例名称(这里的实例名称是MSSQLSERVER,可按实际修改),-m指定以单用户管理模式启动3、以数据库专用管理员(DAC)方式连接SSMS(此处可参见SQLServer数据库专用管理员DAC连接方式)4、执行语句:USEmssqlsystemresource这里,我友情说明一下,mssqlsystemresource是一个系统数据库,它存储了所有系统存储过程、视图和函数。 但它对于所有用户来说,都是不可见的,也就是说,在SSMS、等里面,你都看不到它,如果在非DAC连接下,执行上述语句,系统会报错。 5、执行语句:alterdatabasemssqlsystemresourcesetread_write--将mssqlsystemresource置为可修改状态,mssqlsystemresource数据库默认是只读的。 6、sp_helptextsp_Monitor--显示该存储过程的源代码,你可将sp_Monitor改成你实际要改的存储过程名。 7、拷贝步骤6的结果,将createproc改成alterproc,并按你的实际需求修改代码,这里,我将前述的if(not(is_srvrolemember(sysadmin)=1))--MakesurethatitistheSAexecutingthis......等语句去掉。 8、执行修改后的语句。 --到这一步为止,系统存储过程sp_Monitor已经被我们改了。 9、alterdatabasemssqlsystemresourcesetread_only--将mssqlsystemresource还原为只读状态10、最后,停止SQLServer服务,并以正常方法重新启动SQLServer.老实说,上面的方法显得较为繁琐,不得万不得已,我不推荐使用。 (再强调一次)其实,可以拷贝系统存储过程的源代码到一个新建的存储过程中,然后再对这个新建的存储过程进行修改,在使用的时候,直接调用这个新过程即可。 同样可以达到目的,而且还没有任何副作用

jsp中的string类型转换为SQL Server中的datetime类型

你的这个sql语句不应该这么写应该这样写:select * from TestTable wheretime between beginTime andendTimedate类型不能用>=或<= 的,string类型的也不能用这样来判断的你要把string类型时间转化为datetime类型 试试用 convert()这个函数,具体如下:convert(数据类型,你要转化的原始数据或是某一列名)

SQL 产生10个20—99之间的随机整数

Server

SELECT FLOOR(RAND()* 79 + 20)用上面的sql执行,可以得出20到99之间的一个随机整数,然后你可以用循环或者重新使用10次得出10个随机数

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐