天天看点

RDS-SQLSERVER不支持MSDTS的原因分析一、Msdtc 的描述及使用方法二、Msdtc的配置:三、RDS不支持的原因:四、     建议解决方案:

msdtc 在就是windows中的一个服务,称为分布式事务处理服务。它帮助我们实现分布式数据库服务器之间集合事务处理,即远程异地事务处理功能,例如:有多个sql server 服务器,我们要让它互相执行更新操作,但又要保证事务的完整性,就要可以开启msdtc功能进行实现:

sql server 分布式事务脚本举例:

{

set xact_abort on

being tran

insert into [远程机器ip].databasename.dbo.tablename(id,name )

select  ‘1’,’远程’

insert into tablename(id,name)

select ‘1’,’本地’

commit

}

这个语句,启动了分布式事务, 保证远程数据库服务器和本地数据库都要插入一条数据,要么都插入,要么谁都不插入,保证数据的一致性。

网上写的很详细,我这里就不一一累述了

参考链接:

http://www.cnblogs.com/ryanding/archive/2010/07/17/1779668.html

1、  msdtc 服务启动,是依赖于rpc服务的,该服务需要开启135端口,而我们现在链路层在转发vip时,没有考虑135端口包的转发。另外135端口是一个不建议开启的端口,在黑客有链接用户名、密码时可以远程直接通过该端口控制dbnode节点的,在没有用户名密码的情况也可以通过135端口,获取服务器的目录结构、用户名、共享目录等信息,这些信息如果被黑客获取,将是对RDS是致命的。这个原因跟安全专家林淼进行确认过的。

2、 msdtc 设置时需要客户端与服务器端都要配置,通过nt authority\network service进行远程访问,而且不做验证。network service 帐户是一个内置帐户,比 users 组的成员拥有更多的对资源和对象的访问权限。相当于服务器的操作系统级别权限,开放给了一个客户端(或者是用户)

1、  暂时的处理该需求的方法,建议用户在应用端实现。

2、  后期可以考虑让用户购买两个rds,来做分布式。这样是两个rds主机之间相互暴露,而对用户(客户端)没有直接访问dbnode节点权限的问题。但需要现有的rds考虑两件事情,一是考虑支持别名访问或者真实ip暴露给用户的问题 ,二是配置所有节点的msdtc服务。