SQL Server Linked server提供了方便快速访问外部数据以及异构数据库,所以很多公司喜欢用Linked server.但是又有一些公司限制使用Linked server.
我觉得主要是安全性的考量:
1.创建Linked server的时候我们可以直接将用户名和密码存储,访问Linked server的时候就直接使用存储的用户名密码对远程数据库远程访问。但是这样会有一个问题,如果我只允许A用户访问数据库,但是B用户也有可能会访问到数据库,而且有可能会更新远程数据,这个是很危险的。当然我们使用只读权限配置Linked server,但是这样对性能会有影响,如果这个账户没有db_ower权限则无法使用正确的统计信息,可能生成错误的执行计划,导致性能下降。
2.微软建议我们使用Windows账户进行访问,但是使用Windows账户访问在其他方面也要做很多配置。 首先如果用到委托的话,就需要创建SPN,在Cluster环境中队SPN Troubleshooting是很困难的。其次在做应用程序开发的时候就需要进行好的规划,将Schema与域账户进行一一对应。第三还需要对这些WINDOWS用户做限制,不能直接访问数据库,如果B/S架构可能需要限制IP访问或者用Application role等等。
针对于上面的两点安全性考虑,其实我们就需要限制特定用户访问Linked server.微软的MSDN中有提到用本地Login和远程Login的Mapping来实现。但是我自己做了个测试发现及时用另外的用户还是可以访问Linked server的:
首先创建Linked server:
/****** Object: LinkedSe