1. 背景介绍
在现代化的信息化建设中,数据库常常被用来存储数据,并且其安全访问也是一个重要的问题。由于安全策略和数据库管理等原因,有时候需要实现不同地域或网络环境下的数据库跨越访问。而传统的实现数据库跨越访问的方法,如直接连通不同网络下的数据库服务器,或者使用VPN来建立网络通道,这些方法都存在一定的安全问题和网络性能的限制。本文将介绍一种新的方法,即通过MSSQL实现数据库跨越访问的方法。
2. 原理介绍
MSSQL实现数据库跨越访问的原理,是通过在源数据库主机上配置remote server和remote login,再在目标数据库主机上配置local server和local login来实现。在配置之后,就可以在源数据库主机上通过OPENQUERY函数来访问目标数据库中的表了。
2.1 remote server配置
在源数据库主机上配置remote server需要执行一下SQL语句:
EXEC sp_addlinkedserver
@server = 'server_name',
@srvproduct = '',
@provider = 'SQLNCLI',
@datasrc = 'target_server_name';
其中,server_name是源数据库主机中remote server的名称,target_server_name是目标数据库主机的名称。在配置之后,可以通过以下语句来验证是否成功:
SELECT *
FROM sys.servers
WHERE name = 'server_name';
2.2 remote login配置
在源数据库主机上配置remote login需要执行以下SQL语句:
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'server_name',
@useself = 'FALSE',
@locallogin = 'local_login',
@rmtuser = 'remote_user',
@rmtpassword = 'remote_password';
其中,server_name是源数据库主机中remote server的名称,local_login是源数据库主机中本地登录账户的名称,remote_user和remote_password是目标数据库主机中远程登录账号的用户名和密码。
2.3 local server配置
在目标数据库主机上配置local server需要执行以下SQL语句:
EXEC sp_addlinkedserver
@server='server_name',
@srvproduct=' ',
@provider='SQLNCLI',
@datasrc='source_server_name';
其中,server_name是目标数据库主机中local server的名称,source_server_name是源数据库主机的名称。
2.4 local login配置
在目标数据库主机上配置local login需要执行以下SQL语句:
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'source_server_name',
@useself = 'FALSE',
@locallogin = 'local_login',
@rmtuser = 'remote_user',
@rmtpassword = 'remote_password';
其中,source_server_name是源数据库主机的名称,local_login是目标数据库主机中本地登录账户的名称,remote_user和remote_password是源数据库主机中远程登录账号的用户名和密码。
3. OPENQUERY函数的使用
在进行remote server和remote login配置之后,就可以在源数据库主机上通过OPENQUERY函数来访问目标数据库中的表了。其基本语法如下:
SELECT *
FROM OPENQUERY(server_name, 'SELECT * FROM table_name')
其中,server_name是源数据库主机中remote server的名称,table_name是目标数据库中的表名。在这里,可以使用任何SQL语句,不仅仅限于SELECT语句。
4. 安全性考虑
虽然MSSQL实现数据库跨越访问的方法简便易行,但是也存在一定的安全问题。因此,在使用之前,需要考虑以下安全性问题:
4.1 remote server以及remote login的配置
在配置remote server和remote login的时候,需要注意几点:
- remote server的名称不能与目标数据库主机中已有的服务器名称相同;
- remote login中的remote_user和remote_password需要设置足够复杂的密码,并且需要对其进行定期更换;
- remote login中的本地登录账户名称与目标数据库主机中本地登录账户名称必须相同;
- 不应该在remote login中使用sa账户。
4.2 移除不必要的权限
在正式使用之前,需要移除remote server和remote login中不必要的权限,确保最小权限原则。具体方法是使用sp_droplinkedsrvlogin函数进行删除。
4.3 防火墙设置
在进行跨越访问的时候,源数据库主机和目标数据库主机默认需要打开1433端口,而这个端口是SQL服务器的默认端口。因此,在进行操作之前,需要确保两台主机上都打开了这个端口,并且更新了防火墙设置,确保远程访问的安全性。
5. 总结
本文介绍了MSSQL实现数据库跨越访问的新方法,通过在源数据库主机上配置remote server和remote login,再在目标数据库主机上配置local server和local login来实现。在配置之后,就可以在源数据库主机上直接访问目标数据库中的表了。虽然这种方法简便易行,但是也需要保证安全性,遵循最小权限原则,移除不必要的权限,并且注意防火墙设置。