<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[无为的世界 - 数据库管理]]></title>
<link>http://www.xduba.com/</link>
<description><![CDATA[需要帮助及时留言提问，我会尽量的回答]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[lovebzn@163.com(无为)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>无为的世界</title>
	<url>http://www.xduba.com/images/logos.gif</url>
	<link>http://www.xduba.com/</link>
	<description>无为的世界</description>
</image>

			<item>
			<link>http://www.xduba.com/article.asp?id=29</link>
			<title><![CDATA[SQL孤立用户解决方案，帐号重新绑定]]></title>
			<author>lovebzn@163.com(无为)</author>
			<category><![CDATA[数据库管理]]></category>
			<pubDate>Sat,18 Apr 2009 16:32:55 +0800</pubDate>
			<guid>http://www.xduba.com/default.asp?id=29</guid>
		<description><![CDATA[症状<br/>当您将数据库备份恢复到另一台服务器时，可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。<br/><br/>本文介绍了如何解决孤立用户问题。 <br/>状态<br/>Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中存在的问题。 <br/>更多信息<br/>虽然术语“登录”和“用户”经常交换使用，但它们之间有很大的不同。登录用于用户身份验证，而数据库用户帐户用于数据库访问和权限验证。登录通过安全识别符 (SID) 与用户关联。访问 SQL Server 服务器需要登录。验证特定登录是否有效的过程称为“身份验证”。登录必须与 SQL Server 数据库用户相关联。您使用用户帐户控制数据库中执行的活动。如果数据库中不存在针对特定登录的用户帐户，使用该登录的用户即使能够连接到 SQL Server 服务器，也无法访问数据库。但是，该情形的唯一例外是当数据库包含“guest”用户帐户时。与用户帐户不关联的登录将被映射到 guest 用户。相反，如果存在数据库用户，但没有与其关联的登录，则该用户将无法登录到 SQL Server 服务器中。<br/><br/>将数据库恢复到其他服务器时，数据库中包含一组用户和权限，但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。这种情况被称为存在“孤立用户”。 <br/>孤立用户疑难解答<br/>当您将数据库备份恢复到另一台服务器时，可能会遇到孤立用户的问题。以下情形说明了该问题并阐述如何加以解决。 1. 向主数据库添加一个登录，并将默认数据库指定为 Northwind： Use master go sp_addlogin &#39;test&#39;, &#39;password&#39;, &#39;Northwind&#39;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>2. 向刚创建的用户授予访问权限： Use Northwind go sp_grantdbaccess &#39;test&#39;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>3. 备份数据库。 BACKUP DATABASE Northwind<br/>TO DISK = &#39;C:\MSSQL\BACKUP\Northwind.bak&#39;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>4. 将数据库恢复到其他 SQL Server 服务器： RESTORE DATABASE Northwind<br/>FROM DISK = &#39;C:\MSSQL\BACKUP\Northwind.bak&#39;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>恢复的数据库包含名为“test”的用户，但没有相应的登录，这就导致“test”成为孤立用户。 <br/>5. 现在，为了检测孤立用户，请运行此代码： Use Northwind go sp_change_users_login &#39;report&#39; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>输出中列出了所有登录，其中包含 Northwind 数据库的 sysusers 系统表和主数据库的 sysxlogins 系统表中不匹配的条目。<br/><br/><br/><br/>解决孤立用户问题的步骤<br/>1. 为前一步中的孤立用户运行以下命令： <br/>Use Northwind<br/>go<br/>sp_change_users_login &#39;up&#100;ate_one&#39;, &#39;test&#39;, &#39;test&#39;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>这样，就将服务器登录“test”与 Northwind 数据库用户“test”重新连接起来。sp_change_users_login 存储过程还可以使用“auto_fix”参数对所有孤立用户执行更新，但不推荐这样做，因为 SQL Server 会尝试按名称匹配登录和用户。大多数情况下这都是可行的；但是，如果用户与错误登录关联，该用户可能拥有错误的权限。 <br/>2. 在上一步中运行代码后，用户就可以访问数据库了。然后用户可以使用 sp_password 存储过程更改密码： Use master<br/>go<br/>sp_password NULL, &#39;ok&#39;, &#39;test&#39;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>此存储过程不能用于 Microsoft Windows NT 安全帐户。通过 Windows NT 网络帐户连接到 SQL Server 服务器的用户是由 Windows NT 授权的；因此，这些用户只能在 Windows NT 中更改密码。<br/><br/><br/><br/>只有 sysadmin 角色的成员可以更改其他用户的登录密码。<br/><br/><br/><br/>参考<br/>有关在服务器之间移动数据库时如何解决权限问题的其他信息，请单击下面的文章编号，查看 Microsoft 知识库中相应的文章： <br/>240872 INF：在 SQL 服务器之间移动数据库时如何解决权限问题<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xduba.com/article.asp?id=13</link>
			<title><![CDATA[Windows SQL Server 安全检查列表]]></title>
			<author>lovebzn@163.com(无为)</author>
			<category><![CDATA[数据库管理]]></category>
			<pubDate>Thu,09 Apr 2009 15:23:32 +0800</pubDate>
			<guid>http://www.xduba.com/default.asp?id=13</guid>
		<description><![CDATA[1. 确认已经安装了NT/2000和SQL Server的最新补丁程序，不用说大家应该已经安装好了，但是我觉得最好还是在这里提醒一下。 <br/><br/>　　2. 评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议。 多协议是明智的选择, 但是它有时不能在异种的环境中使用。<br/><br/>　　3. 给 &#34;sa&#34; 和 &#34;probe&#34; 帐户设定强壮的密码来加强其安全性。设定一个强壮的密码并将其保存在一个安全的地方。 注意: probe帐户被用来进行性能分析和分发传输。 当在标准的安全模态中用的时候 , 给这个帐户设定高强度的密码能影响某些功能的使用。<br/><br/>　　4. 使用一个低特权用户作为 SQL 服务器服务的查询操作账户，不要用 LocalSystem 或sa。 这个帐户应该有最小的权利 ( 注意作为一个服务运行的权利是必须的)和应该包含( 但不停止)在妥协的情况下对服务器的攻击。 注意当使用企业管理器做以上设置时 , 文件，注册表和使用者权利上的 ACLs同时被处理。<br/><br/>　　5. 确定所有的 SQL 服务器数据，而且系统文件是装置在 NTFS 分区，且appropraite ACLs 被应用。 如果万一某人得到对系统的存取操作权限,该层权限可以阻止入侵者破坏数据，避免造成一场大灾难。<br/><br/>　　6.如果不使用Xp_cmdshell就关掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 账户操作限制非sa用户使用XP_cmdshell.<br/><br/>　　在任何的 isql/ osql 窗口中( 或查询分析器):<br/><br/>　　use master<br/><br/>　　exec sp_dro&#112;extendedproc&#39;xp_cmdshell&#39;<br/><br/>　　如果你不需要 xp_cmdshell 那请停用它。请记住一个系统系统管理员如果需要的话总是能把它增加回来。这也好也不好 - 一个侵入者可能发现它不在，只需要把他加回来。考虑也除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些程序所用。 要找到其他的程序是否使用相同的 dll:<br/><br/>　　首先得到该 dll 。<br/><br/>　　sel&#101;ct o.name,c.text from dbo.syscomments c , dbo.sysobjects o wh&#101;re c.id=o.id and o.name=&#39;xp_cmdshell&#39;<br/><br/>　　其次,使用相同的 dll发现其他的扩展储存操作是否使用该dll。<br/><br/>　　sel&#101;ct o.name,c.text from dbo.syscomments c , dbo.sysobjects o wh&#101;re c.id=o.id and c.text=&#39;xplog70.dll&#39;<br/><br/>　　用户可以用同样的办法处理下面步骤中其他你想去掉的进程。<br/><br/>　　7. 如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 - 当这些储存程序被停用的时候 , 一些企业管理器功能可能丢失). 这些包括:<br/><br/>　　Sp_OACr&#101;ate<br/><br/>　　Sp_OADestroy<br/><br/>　　Sp_OAGetErrorInfo<br/><br/>　　Sp_OAGetProperty<br/><br/>　　Sp_OAMethod<br/><br/>　　Sp_OASetProperty<br/><br/>　　Sp_OAStop<br/><br/>　　如果你决定停用该进程那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 。 记住, 我们在这里正在做的是锁定一个应用程序的功能 - 你的开发平台应该放到其他机器上。<br/><br/>　　8. 禁用你不需要的注册表存取程序。(同上面的警告)这些包括:<br/><br/>　　Xp_regaddmultistring<br/><br/>　　Xp_regdel&#101;tekey<br/><br/>　　Xp_regdel&#101;tevalue<br/><br/>　　Xp_regenumvalues<br/><br/>　　Xp_regremovemultistring<br/><br/>　　注意 :我过去一直在这里列出 xp_regread/ xp_regwrite但是这些程序的移除影响一些主要功能包括日志和SP的安装，所以他们的移除不被推荐。<br/><br/>　　9.移除其他你认为会造成威胁的系统储存进程。 这种进程是相当多的，而且他们也会浪费一些cpu时间。 小心不要首先在一个配置好的服务器上这样做。首先在开发的机器上测试，确认这样不会影响到任何的系统功能。在下面是我们所推荐的有待你评估的一些列表:<br/><br/>sp_sdidebug <br/>xp_availablemedia <br/>xp_cmdshell <br/>xp_del&#101;temail <br/>xp_dirtree <br/>xp_dro&#112;webtask <br/>xp_dsninfo <br/>xp_enumdsn <br/>xp_enumerrorlogs <br/>xp_enumgroups <br/>xp_enumqueuedtasks <br/>xp_eventlog <br/>xp_findnextmsg <br/>xp_fixeddrives <br/>xp_getfiledetails <br/>xp_getnetname <br/>xp_grantlogin <br/>xp_logevent <br/>xp_loginconfig <br/>xp_logininfo <br/>xp_makewebtask <br/>xp_msver xp_perfend <br/>xp_perfmonitor <br/>xp_perfsample <br/>xp_perfstart <br/>xp_readerrorlog <br/>xp_readmail <br/>xp_revokelogin <br/>xp_runwebtask <br/>xp_schedulersignal <br/>xp_sendmail <br/>xp_servicecontrol <br/>xp_snmp_getstate <br/>xp_snmp_raisetrap <br/>xp_sprintf <br/>xp_sqlinventory <br/>xp_sqlregister <br/>xp_sqltrace <br/>xp_sscanf <br/>xp_startmail <br/>xp_stopmail <br/>xp_subdirs <br/>xp_unc_to_drive <br/>xp_dirtree <br/><br/><br/>　　10. 在企业管理器中&#34;安全选项&#34; 之下禁用默认登录。(只有SQL 6.5) 当使用整合的安全时候,这使未经认可的不在 syslogins 表中使用者无权登陆一个有效的数据库服务器。<br/><br/>　　11. 除去数据库的guest账户把未经认可的使用者据之在外。 例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。<br/><br/>　　12. 若非必须，请完全地禁用SQL邮件功能。它的存在使潜在的攻击者递送潜在的 trojans ，病毒或是简单实现一个DOS攻击成为可能<br/><br/>　　13. 检查master..Sp_helpstartup看有无可疑的木马进程。 确定没有人已经在这里放置秘密的后门程序。 使用 Sp_unmakestartup 移除任何可疑进程。<br/><br/>　　14. 检查master..Sp_password看有无trojan代码。比较你的产品scripts和一个新安装的系统的默认scripts而且方便的保存。<br/><br/>　　15. 记录所有的用户存取访问情况。 从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:<br/><br/>　　xp_instance_regwrite N&#39;HKEY_LOCAL_MACHINE&#39;, N&#39;SOFTWARE\ Microsoft\MSSQLServer\MSSQLServer&#39;,N&#39;AuditLevel&#39;,REG_DWORD,3<br/><br/>　　16. 重写应用程序使用更多用户定义的储存和察看进程所以一般的对表的访问可以被禁用。 在这里你也应该看到由于不必经常进行查询计划操作而带来的性能提升。<br/><br/>　　17. 除去不需要的网络协议。<br/><br/>　　18. 注意SQL 服务器的物理安全。把它锁在固定的房间里，并且注意钥匙的安全。只要有机会到服务器面前，就总是会找到一个方法进入。<br/><br/>　　19. 建立一个计划的任务运行:<br/><br/>　　findstr/C:&#34; Login Failed&#34;\mssql7\log\*.*&#39;<br/><br/>　　然后再重定向输出到一个文本文件或电子邮件，因此你监测失败的登录尝试。这也为系统管理员提供一个好的记录攻击的方法。 也有很多用来分析NT日志事件的第三者工具。 注意: 你可能需要将路径换成你安装SQL的路径。<br/><br/>　　20. 设定非法访问和登陆失败日志警报。到 企业管理器中的&#34;Manager SQL Server Messages &#34;搜寻任何有关无权访问的消息 ( 从查找&#34;login failed&#34;和&#34;denied&#34;开始). 确定你所有感兴趣的信息被记录到事件日志。然后在这些信息上设定警报 , 发送一个电子邮件或信息到一个能够对问题及时响应的操作员。<br/><br/>　　21. 确定在服务器和数据库层次上的角色都只被授给了需要的用户。 当 SQL Server 安全模型 7 有许多增强的时候, 它也增加额外的许可层，我们必须监控该层，确定没有人被授予了超过必需的权限。<br/><br/>　　22. 经常检查组或角色全体会员并且确定用组分配权限，这样你的审计工作能够简化。 确定当你在的时候 , 公众的组不能从系统表执行选择操作。<br/><br/>　　23. 花些时间审计用空密码登陆的请求。 使用下面的代码进行空密码检查:<br/><br/>　　使用主体<br/><br/>　　选择名字,<br/><br/>　　password<br/><br/>　　from syslogins<br/><br/>　　wh&#101;re password is null<br/><br/>　　order by name<br/><br/>　　24. 如果可能，在你的组织中利用整合的安全策略。 通过使用整合的安全策略，你能够依赖系统的安全，最大简化管理工作从维护二个分开的安全模型中分离开来。这也不让密码接近连接字串。<br/><br/>　　25. 检查所有非sa用户的存取进程和扩充存储进程的权限。 使用下面的查询定期的查询哪一个进程有公众存储权限。(在SQL Server中 使用 &#34;type&#34; 而不是 &#34;xtype&#34;):<br/><br/>　　Use master<br/><br/>　　sel&#101;ct sysobjects.name<br/><br/>　　from sysobjects,sysprotects<br/><br/>　　wh&#101;re sysprotects.uid=0<br/><br/>　　AND xtype 在 (&#39;X&#39;,&#39;P&#39;)<br/><br/>　　AND sysobjects.id=sysprotects.id<br/><br/>　　Order by name<br/><br/>　　26. 当时用企业管理器的时候，使用整合的安全策略。 过去，企业管理器被发现在标准的安全模态中储存 &#34;sa&#34; 密码在注册表的 plaintext 中。 注意: 即使你改变模态,密码也会留在注册表中。 使用 regedit 而且检查键:<br/><br/>　　HKEY_CURRENT_USER\SOFTWARE\Microsoft\<br/><br/>　　MSSQLServer\SQLEW\ Regedi\<br/><br/>　　SQL 6.5<br/><br/>　　现在数据被隐藏在<br/><br/>　　HKEY_USERS\{yourSID}\software\Microsoft\Microsoft SQL server\80\tool\SQLEW\registered server X\SQL server group<br/><br/>　　(&#34;SQL server组&#34; 是默认值但是你可能已建立用户组因此相应地改变其位置)<br/><br/>　　27. 发展一个审核计划而且订定每月的安全报告，对IT主管可用的报表包括任何的新exploit，成功的攻击 , 备份保护 , 和对象存取失败统计。<br/><br/>　　28. 不要允许使用者交互式登陆到 SQL Server之上。这个规则适用任何的服务器。 一旦一个使用者能够交互式进入一个服务器之内,就有能用来获得管理员的存取特权得到管理员权限。<br/><br/>　　30. 尽力限制对SQL Server的查询与存取操作。用户可以用最小权限查询sql server中的很多东西。若非必须不要给他们机会。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xduba.com/article.asp?id=11</link>
			<title><![CDATA[解决sql2000挂起无法安装的问题]]></title>
			<author>lovebzn@163.com(无为)</author>
			<category><![CDATA[数据库管理]]></category>
			<pubDate>Thu,09 Apr 2009 15:20:01 +0800</pubDate>
			<guid>http://www.xduba.com/default.asp?id=11</guid>
		<description><![CDATA[关于：以前的某个程序安装已在安装计算机上创建挂起的文件操作 解决办法 <br/>以前装过sql server，后来删掉。现在重装，却出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误。无法进行下去。 <br/><br/>&nbsp;&nbsp; 步骤是： <br/><br/>&nbsp;&nbsp; 1）添加/删除程序中彻底删除sql server。 <br/><br/>&nbsp;&nbsp; 2）将没有删除的sql server目录也删除掉。 <br/><br/>&nbsp;&nbsp; 3) 册表编辑器，在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations项目，并删除它。这样就可以清除安装暂挂项目。 <br/><br/>&nbsp;&nbsp; 4) 册表中跟sql server相关的键。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;其实估计只要做第3步就可以搞定，这样就可以清除安装暂挂项目。自己是先走了1，2，4，最后做了3才搞定。所以估计3才是最关键的<br/>]]></description>
		</item>
		
</channel>
</rss>
