SQL2005还原数据库后出现孤立用户问题的处理

症状
  当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。
  本文介绍了如何解决孤立用户问题。
  状态
  Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中存在的问题。
  更多信息
  虽然术语“登录”和“用户”经常交换使用,但它们之间有很大的不同。登录用于用户身份验证,而数据库用户帐户用于数据库访问和权限验证。登录通过安全识别符 (SID) 与用户关联。访问 SQL Server 服务器需要登录。验证特定登录是否有效的过程称为“身份验证”。登录必须与 SQL Server 数据库用户相关联。您使用用户帐户控制数据库中执行的活动。如果数据库中不存在针对特定登录的用户帐户,使用该登录的用户即使能够连接到 SQL Server 服务器,也无法访问数据库。但是,该情形的唯一例外是当数据库包含“guest”用户帐户时。与用户帐户不关联的登录将被映射到 guest 用户。相反,如果存在数据库用户,但没有与其关联的登录,则该用户将无法登录到 SQL Server 服务器中。
  将数据库恢复到其他服务器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。这种情况被称为存在“孤立用户”。
  孤立用户疑难解答
  当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。以下情形说明了该问题并阐述如何加以解决。
  1. 向主数据库添加一个登录,并将默认数据库指定为 Northwind: Use master go sp_addlogin ‘test‘, ‘password‘, ‘Northwind‘
  2. 向刚创建的用户授予访问权限: Use Northwind go sp_grantdbaccess ‘test‘
  3. 备份数据库。 BACKUP DATABASE Northwind
TO DISK = ‘C:MSSQLBACKUPNorthwind.bak‘
  4. 将数据库恢复到其他 SQL Server 服务器: RESTORE DATABASE Northwind
FROM DISK = ‘C:MSSQLBACKUPNorthwind.bak‘

  恢复的数据库包含名为“test”的用户,但没有相应的登录,这就导致“test”成为孤立用户。
  5. 现在,为了检测孤立用户,请运行此代码: Use Northwind go sp_change_users_login ‘report‘

  输出中列出了所有登录,其中包含 Northwind 数据库的 sysusers 系统表和主数据库的 sysxlogins 系统表中不匹配的条目。
  解决孤立用户问题的步骤
  1. 为前一步中的孤立用户运行以下命令:
Use Northwind
go
sp_change_users_login ‘update_one‘, ‘test‘, ‘test‘

  这样,就将服务器登录“test”与 Northwind 数据库用户“test”重新连接起来。
  sp_change_users_login 存储过程还可以使用“auto_fix”参数对所有孤立用户执行更新,但不推荐这样做,因为 SQL Server 会尝试按名称匹配登录和用户。大多数情况下这都是可行的;但是,如果用户与错误登录关联,该用户可能拥有错误的权限。
  2. 在上一步中运行代码后,用户就可以访问数据库了。然后用户可以使用 sp_password 存储过程更改密码: Use master
go
sp_password NULL, ‘ok‘, ‘test‘

  此存储过程不能用于 Microsoft Windows NT 安全帐户。通过 Windows NT 网络帐户连接到 SQL Server 服务器的用户是由 Windows NT 授权的;因此,这些用户只能在 Windows NT 中更改密码。
  只有 sysadmin 角色的成员可以更改其他用户的登录密码。
—————————————————————————————————————-
SQL2005删除用户的时候,产生“数据库主体在该数据库中拥有架构,无法删除”的解决办法
–执行如下SQL语句
ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo;
–然后手动删除就可以了。

—————————————————————————————————————-
[导入]sql2000备份的数据库还原到sql2005后,选择“数据库关系图”提示:此数据库没有有效所有者,因此无法安装数据库关系图支持对象"的解决方法
sql2000备份的数据库还原到sql2005后,选择“数据库关系图”提示:此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使用“数据库属性”对话框的“文件”页或 ALTER AUTHORIZATION 语句将数据库所有者设置为有效登录名,然后再添加数据库关系图支持对象。

解决方法如下:
1、设置兼容级别为90(2005为90)
USE [master]
GO
EXEC dbo.sp_dbcmptlevel @dbname=‘数据库名‘, @new_cmptlevel=90
GO
或是选责你还原的数据库,点右键,选属性->选项->兼容级别,选择sqlserver2005(90) 然后确定,
这时,你在该数据库下展开“数据库关系图”节点时会有个提示,"此数据库缺少一个或多个使用数据库关系图所需的支持对象,是否创建",选择“是”即可。
2、通过以上的方法操作,如果问题依然存在的话,按下列方法继续
选择你的数据库,然后选择"安全性"->"用户",选择dbo,打开属性页,如登录名为空的话,新建查询,然后
use [你的数据库名]
EXEC sp_changedbowner ‘sa‘
执行成功后,你再选择"数据库关系图"节点,时提示 “此数据库缺少一个或多个使用数据库关系图所需的支持对象,是否创建",选择“是”即可。 就可以看到原先建的关系图了。

收缩(缩小)VMWare Workstation中vmdk文件的长度

1:清理虚机中不需要的文件

 

2:下载SDelete并解压

官方下载:http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx

执行 sdelete -c -z

 

3:关闭虚拟机,在VMWare菜单"设置"中,

"选项"->"硬盘"->"实用"->Compact

 

 

实测确能有效减小vmdk长度

port forwarding in windows

目标是WIN7 X64,且开启了防火墙,想要用他的机器去访问别的机器,又不想登陆他的系统,常规办法一般是上传一个htran,然后进行转发,但是对方有杀软,有被杀的可能性,所以我用另外一种办法达到我的目的.

为了方便,先关闭他的防火墙
netsh  advfirewall set allprofiles state off

(win2003&xp是用netsh  firewall set opmode DISABLE 关闭)

你也可以放行listenport,具体命令自行查资料.
然后用netsh interface portproxy 进行转发到目标服务器,但是有个小缺陷,端口是能在系统里看到的,毕竟是R3层的东西,不像Linux 的IPTABLES,所以必须选择一个迷惑性的端口.
操作完毕后,恢復防火墙netsh  advfirewall set allprofiles state on.然后撤退.

添加:
netsh interface portproxy add v4tov4 listenport=轉發端口 listenaddress=本機IP
connectport=目標端口 connectaddress=目標IP

例子:
netsh interface portproxy add v4tov4 8002 202.112.58.200 8002 //本地ALL IP轉目標IP8002
netsh interface portproxy add v4tov4 listenport=5200 listenaddress=1.1.1.1 connectport=3389
connectaddress=2.2.2.2 //指定IP轉發.

XP/2003需要先安裝IPV6:
netsh interface ipv6 install

刪除:
netsh interface portproxy delete v4tov4 listenport=轉發端口 listenaddress=本機IP

配置IP路由轉發:
netsh interface ipv4 set int 26 forwarding=enabled

26是網絡接口編號,可以用netsh interface ipv4 show interfaces來查看.

 
原作者:4 z 1 @ E v i l S h a d 0 w

简单方法捕捉手机(移动设备)网络请求

1:安装 Fiddler,在其 Tools –> Fiddler Options –> Connections 选中 Allow Remote Computers to Connect.
2:记录 Fiddler 所在机器的IP地址,如192.168.0.100
3:在移动设备(手机)的WIFI网络设置处,设置HTTP代理,将服务器填为上一步中获得的IP,即192.168.0.100,端口填8888

这样Fiddler即可截获手机的网络请求.

windows 2003 软路由限制访问ip

假设作路由的win2003的内网网卡IP是192.168.2.1 , 我想让A机(192.168.2.101)能上外网,其他机不能上外网,他们都可以和192.168.2.1通信.

在[路由和远程访问] 的 [常规] -> [内网网卡] -> [入站筛选器] 里设置

1、只允许 源地址192.168.2.101 (Mask255.255.255.255) 到 任何目标地址(任何掩码)

2、只允许 源地址192.168.2.0 (Mask255.255.255.0)  到 192.168.2.1 (Mask255.255.255.255)

Windows 2003 远程终端服务 端口修改

有鸟不停暴力尝试远程终端,虽然32位的密码不怕他试,但每次连接都费服务器的cpu,看着挺烦的
找了一圈,windows下没有简单可靠绿色的反暴力破解方法,先把终端端口改了吧,服了

“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp”分支,其下的“PortNumber”键值所对应的就是端口号,修改为你想要的端口号即可;

“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp”分支,同样将其下的“PortNumber”键值进行更改,修改成和上面一样的端口号。

设定静态arp脚本(bat)

@echo OFF
arp -d
if %~n0==arp exit
if %~n0==Arp exit
if %~n0==ARP exit
echo 正在获取本机信息…..
echo 本脚本适用windows2003,单网卡,单路由,设定静态arp用
echo 其它情况不适用,需修改参数

:IP
FOR /f "skip=13 tokens=15 usebackq " %%i in (`ipconfig /all`) do Set IP=%%i && GOTO MAC
REM 在ipconfig命令的结果中,跳到13行,第15个字符 取本机ip值赋予ip变量
:MAC
echo 取得IP:%IP%
FOR /f "skip=13 tokens=12 usebackq " %%i in (`ipconfig /all`) do Set MAC=%%i && GOTO GateIP
REM 取得本机mac值赋予mac变量

:GateIP
echo 取得MAC:%MAC%
arp -s %IP% %MAC%
REM 设定本机静态arp

echo 正在获取网关信息…..
FOR /f "skip=17 tokens=13 usebackq " %%i in (`ipconfig /all`) do Set GateIP=%%i && GOTO GateMac
REM 取得网关ip值赋予gateip变量

:GateMac
echo GateIP:%GateIP%
ping %GateIP% -t -n 1
FOR /f "skip=3 tokens=2 usebackq " %%i in (`arp -a %GateIP%`) do Set GateMAC=%%i && GOTO Start
REM 取得网关mac值赋予gatemac变量

:Start
echo GateMAC:%GateMAC%
arp -s %GateIP% %GateMAC%
@pause
echo 操作完成!!!

启用IIS6的Gzip压缩功能

1:在IIS管理器中,“网站”上面右键-属性,不是下面的某个站点,而是整个网站。进入“服务”标签,选上启用动态内容压缩,静态内容压缩。

2:选中网站下面那个服务器扩展,新建一个服务器扩展。名字无所谓,下面的添加文件的路径是: c:\windows\system32\inetsrv\gzip.dll,然后启用这个扩展。

3:net stop iisadmin 后,可打开 C:\Windows\System32\inetsrv\MetaBase.xml 编辑

<IIsCompressionScheme	Location ="/LM/W3SVC/Filters/Compression/gzip"
		HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
		HcCreateFlags="1"
		HcDoDynamicCompression="TRUE"
		HcDoOnDemandCompression="TRUE"
		HcDoStaticCompression="TRUE"
		HcDynamicCompressionLevel="0"
		HcFileExtensions="htm
			html
			txt"
		HcOnDemandCompLevel="10"
		HcPriority="1"
		HcScriptFileExtensions="asp
			dll
			exe"
	>
</IIsCompressionScheme>

添加要压缩文件扩展名,如css,js,aspx等
可修改HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数值在0-10, 默认为0。0不压缩,10最高压缩率

保存!

net start iisadmin
iisreset

IIS 设置 SSL

1:证书申请文本
进入“控制面板→管理工具→Internet 信息服务(IIS)管理器”,在IIS管理器窗口中展开“网站”目录,右键点击要使用SSL安全加密机制功能的网站,在弹出菜单中选择“属性”,然后切换到“目录安全性”标签页,接着点击“服务器证书”按钮。

在“IIS证书向导”窗口中选择“新建证书”选项,点击“下一步”,选中“现在准备证书请求,但稍后发送”,接着在“名称”栏中为该证书起个名字,在“位长”下拉列表中选择“密钥的位长”,这里要注意,位长不能设置的过大,否则会影响通信质量;接着设置证书的单位、部门、和地理信息,在站点“公用名称栏”中输入该网站的域名,然后指定证书请求文件的保存位置,这里笔者将该证书请求文本文件保存在“d:\certreq.txt”。这样就完成了证书请求文件的生成。

2:申请一个证书
输入“localhost/CertSrv/default.asp”。接着在“Microsoft 证书服务”欢迎窗口中点击“申请一个证书”链接,然后在证书申请类型中点击“高级证书申请”链接,在高级证书申请窗口中点击“使用BASE64编码的CMC或PKCS#10文件提交….”链接,接着将证书请求文件的内容复制到“保存的申请”输入框中,这里笔者的证书请求文件内容保存在“d:\certreq.txt”,最后点击“提交”按钮。

之前需安装证书服务
(  在“控制面板”中运行“添加或删除程序”,切换到“添加/删除Windows组件”页,在“Windows组件向导”对话框中,选中“证书服务”选项,接下来选择CA类型,这里笔者选择“独立根CA”,然后为该CA服务器起个名字,设置证书的有效期限,建议使用默认值“5年”即可,最后指定证书数据库和证书数据库日志的位置后,就完成了证书服务的安装。)

3:颁发IIS网站证书
在“控制面板→管理工具”中,运行“证书颁发机构”程序。在“证书颁发机构”左侧窗口中展开目录,选中“挂起的申请”目录,在右侧窗口找到刚才申请的证书,鼠标右键点击该证书,选择“所有任务→颁发”。

接着点击 “颁发的证书”目录,打开刚刚颁发成功的证书,在 “证书”对话框中切换到“详细信息”标签页。点击“复制到文件”按钮,弹出证书导出对话框,一路下一步,在“要导出的文件”栏中指定文件名,这里笔者保存证书路径为“d:\cce.cer”,最后点击“完成”。

4:导入IIS网站证书 
在IIS管理器的“目录安全性”标签页中,点击“服务器证书”按钮,这时弹出“挂起的证书请求”对话框,选择“处理挂起的请求并安装证书”选项,点击“下一步”后,指定好刚才导出的IIS网站证书文件的位置,接着指定SSL使用的端口,建议使用默认的“443”,最后点击“完成”按钮

5:配置IIS服务器 
完成了证书的导入后,IIS网站这时还没有启用SSL安全加密功能,需要对IIS服务器进行配置。

在“目录安全性”标签页,点击安全通信栏的“编辑”按钮,选中“要求安全通道(SSL)”和“要求128位加密”选项,最后点击“确定”按钮即可。

接着点击“身份验证和访问控制”栏的“编辑”按钮,在对话框中取消“启用匿名访问”和“集成Windows身份验证”选项,这里要选中“基本身份验证”选项,最后点击“确定”按钮。