SQL SERVER知识点备份

来源:互联网 发布:怎么去看网络主播视频 编辑:程序博客网 时间:2024/05/16 16:00

如何异地备份

use master backup database 数据库 to disk='//你的计算机名/共享目录名/备份文件名'

---或通过映射网络驱动器(这样可以解决权限问题)

--1.映射
exec master..xp_cmdshell 'net use z: //xz/c$ "" /user:xz/administrator'

/*--说明:
z:     是映射网络路径对应本机的盘符,与下面的备份对应
//xz/c$    是要映射的网络路径
xz/administrator xz是远程的计算机名,administrator是登陆的用户名
--*/

--2.进行数据库备份
backup database 数据库名 to disk='z:/备份文件名'


--3.备份完成后删除映射
exec master..xp_cmdshell 'net use z: /delete'

解决数据库异地迁移,孤立用户的问题

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_validatelogin]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_validatelogin]
GO

/*--解决还原数据库产生的孤立用户问题

关于孤立用户的产生原因及解决办法,参考SQL联机丛书"孤立用户"部分
联机帮助上是删除孤立用户

本存储过程通过另一方法来解决此问题:
如果孤立用户的登录已经存在,则通过修改系统表来重新建立登录与用户之间的联系
如果孤立用户的登录不存在,则为它建立一个登录

存储过程处理了两种情况:
一种情况是在还原数据库前已经创建了登录
但还原数据库后,无法用该登录访问还原的数据库
另一种情况是,当前SQL实例中,没有还原数据库中的登录用户

--邹建 2004.07(引用请保留此信息)--*/

/*--调用示例

exec p_validatelogin '库名','孤立用户名'
--*/
create proc p_validatelogin
@dbname sysname,--孤立用户所在的数据库名
@loginame sysname--孤立用户名
as
if db_id(@dbname) is null
begin
print '无此数据库'
return
end

declare @s nvarchar(4000),@sid binary(16)

if exists(select * from master..sysxlogins where name=@loginame)
begin--如果已经有该登录,则直接修改系统表
exec sp_configure 'allow updates',1 reconfigure with override
select @sid=sid from master..syslogins where name=@loginame
set @s='update ['+replace(@dbname,']',']]')
+']..sysusers set sid=@sid where name=@loginame and islogin=1'
exec sp_executesql @s
,N'@sid binary(16),@loginame sysname'
,@sid,@loginame
exec sp_configure 'allow updates',0 reconfigure with override
end
else
begin--如果没有该登录,则创建登录
set @s='SELECT @sid=sid FROM ['+replace(@dbname,']',']]')
+']..sysusers WHERE islogin=1 and name=@loginame'
exec sp_executesql @s
,N'@sid binary(16) out,@loginame sysname'
,@sid out,@loginame
exec sp_addlogin @loginame=@loginame,@sid=@sid
end
go

给你个破解密码的过程,不过密码太长的化可能破解很困难

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 
 
           理论上可以破解任意位数的密码 
           条件是你的电脑配置足够,时间足够                         
 
--邹建  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  begin
--生成要破解的密码的用户表 
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  
end

原创粉丝点击