- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0 |
以下的结果表明SQL Server 登录名中的SID和数据库用户id的SID是不一样的,这也表明了这正是导致问题出现的原因。
现在我们对这个问题有了更深入的了解,现在是时候利用一些有用的命令去分析和解决问题了。
我已经用以上四个用户把AdventureWorks数据库从一个实例还原到另一个实例上。现在为了分析在我的还原数据库中有多少个孤立用户,我将运行以下的T-SQL命令,这些命令将产生所有孤立用户的列表并且在这个例子中所有的用户都是在孤立的。
用来产生孤立用户列表的命令
USE adventureWorks
GO
sp_change_users_login @Action='Report'
GO
现在我们已经有了孤立用户的列表,我们可以开始着手解决这个问题。为了克服这个问题,你需要把用户(来自sysusers表)的SIDs链接到主从数据库的有效登录名中。下面的命令TestUser1指定的数据库用户重新映射到TestUser1指定的服务器登录名账户。
用来映射一个孤立用户的命令
USE AdventureWorks
GO
sp_change_users_login @Action='update_one',
@UserNamePattern='TestUser1',
@LoginName='TestUser1'
GO
或者如果你确定SQL Server 登录名和映射的数据库孤立用户名一样,那么接着你可以使用更短的命令,比如以下TestUser2的例子。
用来映射一个孤立用户的命令
EXEC sp_change_users_login 'Auto_Fix', 'TestUser2'
GO
这两种命令都可以把用户映射到登录名,并且它们将不再是孤立的。
如果一个登录名不存在,你必须在做映射之前先创建这个登录名。创建登录名的一种便捷方式是使用以下将会创建登录名接着把登录名映射到用户的命令。
用来把一个孤立用户映射到一个还未出现但是将要创建的登录名的命令
EXEC sp_change_users_login 'Auto_Fix', 'TestUser3', null,'pwd'
GO
总结应用的T-SQL
在以上过程中,使用了存储过程sp_change_users_login。变量[ @Action ]指定了这个存储过程的准确用法。它接受像varchar(10)这样的参数并且有以下的一种值:
l 如果参数是Auto_Fix,那么数据库用户从相同名称的SQL Server 登录名映射。如果这个登录名没有显示,它也可能会产生登录名。
l 如果参数是Report,它列出孤立用户和它们的安全标识符(SID)。
l 如果参数是Update_One,它从指定的数据库链接到现有的SQL Server 登录名。
一些注意事项
l sp_change_users_login要求是db_owner固定数据库角色的组成成员,只有成为db_owner固定数据库角色的组成成员才能指定Auto_Fix选项。
l 当映射孤立用户时,主从数据库中的SID将分配给孤立用户,所以每次一个数据库备附加或者还原时,SID在SQL Server 登录名和数据库用户之间都存在差异。
l 如果你有映射到一个数据库用户的不同的Server 登录名,那么不要使用Auto_Fix命令来链接。
l 如果相应的SQL Server 登录名被删除,那么一个用户也可能成为孤立的。
l 虽然这是很显而易见的,但是还是有必要提出来,在重新链接之后,SQL Server 登录名的密码可以由数据库用户所使用。
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |