iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >SQL Server 跨库/服务器查询
  • 951
分享到

SQL Server 跨库/服务器查询

服务器sqlserver 2023-10-20 16:10:44 951人浏览 薄情痞子
摘要

这里写目录标题 1 SQL Server 跨库/服务器查询1.1 跨库查询1.2 跨服务器查询1.2.1 创建链接服务器1.2.2 跨库查询 1.3 拓展:SQL Server 中所有权

这里写目录标题

1 SQL Server 跨库/服务器查询

1.1 跨库查询

在同一服务器下的跨库查询较为简单,示例

Database.DatabaseSchema.DatabaseObject# 示例 [sqlMatc] 数据库中,查询数据库[SQLATM]里的 DeptSales_copy 表里的所有数据select * from [SQLATM].[dbo].[DeptSales_copy]

1.2 跨服务器查询

进行跨服务器查询前提是在本地服务器上创建链接服务器。

1.2.1 创建链接服务器

方法一:利用系统存储过程 sp_addlinkedserver

sp_addlinkedserver

创建链接服务器。 链接服务器提供对 OLE DB 数据源的分布式异类查询的访问权限。 使用 sp_addlinkedserver创建链接服务器后,可对此服务器运行分布式查询。 如果将链接服务器定义为 SQL Server 实例,则可以执行远程存储过程。

权限

语句 sp_addlinkedserver 需要 ALTER ANY LINKED SERVER 权限。 (“SQL Server Management Studio新建链接服务器”对话框的实现方式需要固定服务器角色的成员sysadmin身份。)

参数解读

sp_addlinkedserver [ @server = ] 'server' -- 链接服务器的名称    [ , [ @srvproduct = ] 'product_name' ]  -- 链接服务器的 OLE DB 数据源的产品名    -- product_name值为 nvarchar (128) ,    -- 默认值为 NULL。      -- 如果值为SQL Server,则无需指provider_name、     -- data_source、位置、provider_string和目录。        [ , [ @provider = ] 'provider_name' ] -- 唯一编程标识符。建议使用 MSOLEDBSQL 而不是 SQLNCLI。    [ , [ @datasrc = ] 'data_source' ] -- 目的服务器地址    [ , [ @location = ] 'location' ]   -- 本地登录    [ , [ @provstr = ] 'provider_string' ] -- 标识唯一数据源的特定于 OLE DB 提供程序的连接字符串    [ , [ @catalog = ] 'catalog' ] -- 与 OLE DB 提供程序建立连接时要使用的目录。    

链接示例:

if exists(select * from sys.servers where name='LinkedServerName')begin--删除运行本地与远程之间的用户映射execute sys.sp_droplinkedsrvlogin @rmtsrvname='LinkedServerName', @locallogin=null--删除链接服务器execute sys.sp_dropserver @server='LinkedServerName', @droplogins='droplogins'endGoEXEC sp_addlinkedserver     @server = 'LinkedServerName'-- 目的服务器别名    ,@srvproduct = ''    ,@provider = 'MSOLEDBSQL'     ,@datasrc = '192.168.3.21' -- 目的服务器IP地址    ,@location = ''-- 本地登录    ,@provstr = '' -- 标识唯一数据源的特定于 OLE DB 提供程序的连接字符串。    --@catalog = '';-- 指定目录 默认值为 NULL-- 将凭据和选项添加到此链接服务器。EXEC sp_addlinkedsrvlogin @rmtsrvname = 'LinkedServerName',@useself = 'false'-- 是否通过模拟登录 or 显示的提交登录名和密码链接到远程服务器,@rmtuser = 'sa'-- 登录名,@rmtpassWord = 'root';-- 密码EXEC sp_serveroption 'LinkedServerName', 'rpc', true;-- 从指定的服务器启用远程过程调用 (RPC)EXEC sp_serveroption 'LinkedServerName', 'rpc out', true;-- 对指定的服务器启用 RPC。-- 查询示例 select * from Server.Database.DatabaseSchema.DatabaseObjectSELECT name FROM [LinkedServerName].master.sys.databases;  

此处将链接SQL Server服务器封装成了名为RemoteConnectionServer的存储过程方便使用

在此存储过程中需要提供四个参数,目的服务器别名(见名知义)、目的服务器IP、目的服务器登录名以及密码。即可创建一个服务器链接。(注意此存储过程只创建了一个简单的链接服务器,设置了必要的链接参数,使用时请确保参数够用。

create proc RemoteConnectionServer@LinkedServerName nvarchar(255)-- 目的服务器别名,@LinkedServerIP nvarchar(255) -- 目的服务器IP地址,@userName nvarchar(255)-- 登录名,@password nvarchar(255)-- 密码as-- 查找链接服务器是否已创建,若创建则删除if exists(select * from sys.servers where name= @LinkedServerName)begin-- 删除运行本地与远程之间的用户映射execute sys.sp_droplinkedsrvlogin @rmtsrvname= @LinkedServerName, @locallogin=null--删除链接服务器execute sys.sp_dropserver @server=@LinkedServerName, @droplogins='droplogins'end-- 创建链接服务器 exec sp_addlinkedserver @server = @LinkedServerName-- 目的服务器别名,@srvproduct = '',@provider = 'MSOLEDBSQL' ,@datasrc = @LinkedServerIP -- 目的服务器IP地址,@location = ''-- 本地登录,@provstr = '' -- 标识唯一数据源的特定于 OLE DB 提供程序的连接字符串。--@catalog = '';-- 指定目录 默认值为 NULL-- 将凭据和选项添加到此链接服务器。exec sp_addlinkedsrvlogin @rmtsrvname = @LinkedServerName,@useself = 'false'-- 是否通过模拟登录 or 显示的提交登录名和密码链接到远程服务器,@rmtuser = @userName-- 登录名,@rmtpassword = @password;-- 密码-- 设置服务器选项exec sp_serveroption @LinkedServerName, 'rpc', true;-- 从指定的服务器启用远程过程调用 (RPC)exec sp_serveroption @LinkedServerName, 'rpc out', true;-- 对指定的服务器启用 RPC。go

执行存储过程

declare@LinkedServerName nvarchar(255)= 'linkName'declare@LinkedServerIP nvarchar(255) = '192.168.3.21'declare@userName nvarchar(255)= 'sa'declare@password nvarchar(255)= '****'-- 执行exec RemoteConnectionServer @LinkedServerName, @LinkedServerIP, @userName, @password-- 测试SELECT name FROM linkName.master.sys.databases;  

方法二:利用SSMS创建链接服务器

下面以链接192.168.2.21 SQL Server 服务器为例:

1 打开SSMS链接到本地服务器

2 选择服务器对象–>链接服务器
在这里插入图片描述

3 链接服务器 右键 新建链接服务器 常规页

PS:如果勾选服务器类型为"SQL Server",则此处’‘链接服务器’'名必须为IP 地址。若选择"其他数据源",此处的链接服务器名作为映射存在(别名), 在数据源处填写IP地址。

当然你也可以选择其他数据源去链接 SQL Server 服务器。

4 选择“安全性”页
在这里插入图片描述

5 选择 “服务器选项” 将 RPC 与 RPC Out 设置为True,默认为False。

  • RPC
    从指定的服务器启用远程过程调用 (RPC)。
  • RPC Out
    对指定的服务器启用 RPC。
    在这里插入图片描述

6 点击 “确定”,此时链接服务器目录下会出现你创建的连接服务器。

7 右键 测试链接
在这里插入图片描述

successs!
在这里插入图片描述

参考链接01:sp_addlinkedserver (Transact-SQL) - SQL Server | Microsoft Learn

参考链接02:创建链接服务器 - SQL Server | Microsoft Learn

1.2.2 跨库查询

-- 查询示例 select * from Server.Database.DatabaseSchema.DatabaseObjectSELECT * FROM [192.168.3.21].[GZ].[dbo].[Dept]

1.3 拓展:SQL Server 中所有权和用户与架构的分离

SQL Server 安全性的核心概念是对象的所有者具有管理这些对象的不可撤消的权限。 你不能删除对象所有者的特权,并且如果用户在数据库中拥有对象,你也不能将用户从此数据库中删除。

用户架构分离

通过用户架构分离,可实现管理数据库对象权限的更大灵活性。 架构是一个适用于数据库对象的命名容器,它使你能够将对象分组到单独的命名空间中。

用于引用对象的由四部分组成的命名语法指定架构名称。

Server.Database.DatabaseSchema.DatabaseObject

架构所有者和权限

任何数据库主体都可以拥有架构,并且一个主体可拥有多个架构。 您可以对架构应用安全规则,安全规则将由架构中的所有对象继承。 如果设置了对架构的访问权限,则当新对象添加到架构时,新对象会自动应用这些权限。 可以为用户分配一个默认的架构,且多个数据库用户可以共享同一架构。

默认情况下,当开发人员在架构中创建对象时,该对象由拥有架构的安全主体而不是开发人员拥有。 可以使用 ALTER AUTHORIZATION Transact-SQL 语句转移对象所有权。 尽管架构还可以包含由不同用户拥有的对象并且这些对象具有比分配给架构的权限更加细化的权限,但因为架构会增大管理权限的复杂度,因此不建议使用。 对象可以在架构之间移动,架构所有权也可以在主体之间转移。 可以在不影响架构的情况下删除数据库用户。

实现后向兼容性的内置架构

SQL Server 随附 9 个预定义架构,这些架构的名称与内置数据库用户和角色的名称相同:db_accessadmin、db_backupoperator、db_datareader、db_datawriter、db_ddladmin、db_denydatareader、db_denydatawriter、db_owner 和 db_securityadmin。 这些架构用于实现后向兼容性。 建议不要将它们用于用户对象。 可以删除与固定数据库角色同名的架构 - 除非它们已被使用,在这种情况下,drop-command 仅返回错误并阻止删除已使用的架构。 例如:

IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_accessadmin')DROP SCHEMA [db_accessadmin]GOIF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_backupoperator')DROP SCHEMA [db_backupoperator]

如果从模型数据库中删除这些架构,它们将不会显示在新数据库中。 不能删除包含对象的架构。

无法删除以下架构:

  • dbo
  • guest
  • sys
  • INFORMATION_SCHEMA

sysINFORMATION_SCHEMA 架构是为系统对象而保留的。 您不能在这些架构中创建对象,而且不能删除它们。

dbo 架构

dbo 架构是每个数据库的默认架构。 默认情况下,使用 CREATE USER Transact-SQL 命令创建的用户的默认架构为 dbodbo 架构由 dbo 用户帐户拥有。

默认架构被分配为 dbo 的用户不会继承 dbo 用户帐户的权限。 用户不从架构继承权限;架构权限由架构中包含的数据库对象继承。 用户的默认架构仅用于对象引用,以防用户在查询对象时省略架构。

当使用部分名称来引用数据库对象时,SQL Server 首先在用户的默认架构中查找。 如果在此处未找到该对象,则 SQL Server 其次将在 dbo 架构中查找。 如果对象不在 dbo 架构中,则会返回一个错误。

参考链接:SQL Server 中所有权和用户与架构的分离 - SQL Server | Microsoft Learn

来源地址:https://blog.csdn.net/weixin_43671437/article/details/132752782

--结束END--

本文标题: SQL Server 跨库/服务器查询

本文链接: https://www.lsjlt.com/news/433105.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL Server 跨库/服务器查询
    这里写目录标题 1 SQL Server 跨库/服务器查询1.1 跨库查询1.2 跨服务器查询1.2.1 创建链接服务器1.2.2 跨库查询 1.3 拓展:SQL Server 中所有权...
    99+
    2023-10-20
    服务器 sqlserver
  • SQL Server怎么跨数据库查询
    本篇内容介绍了“SQL Server怎么跨数据库查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基本语句SELECT *...
    99+
    2023-06-05
  • SQL Server实现跨库跨服务器访问
    这篇文章给大家介绍SQL Server实现跨库跨服务器访问,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 首先创建两个数据库CrossLibraryTable1,CrossLibr...
    99+
    2024-04-02
  • SQL Server中怎么实现跨库跨服务器访问
    这篇文章将为大家详细讲解有关SQL Server中怎么实现跨库跨服务器访问,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 首先创建两个数据库CrossL...
    99+
    2024-04-02
  • SQL Server如何跨服务器操作数据库
    本文小编为大家详细介绍“SQL Server如何跨服务器操作数据库”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server如何跨服务器操作数据库”文章能帮助大家解决疑惑,下面...
    99+
    2022-11-30
    sql server 数据库 服务器
  • Windows server 2016——SQL server T-SQL查询语句
    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。  公众号:网络豆  座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 写在前面 介绍 一.SQL简介 1.SQL和T-SQL 2.T...
    99+
    2023-09-07
    sql php 数据库 原力计划
  • SQL SERVER服务器部署IP查询方法详解
    目录查看SQL SERVER服务器部署的服务器IP方法一:使用SQL查询方法二:使用PowerShell脚本方法三:使用SQL Server Configuration Manager总结查看SQL SERVER服务器部...
    99+
    2024-02-01
    查询SQL SERVER服务器部署IP SQL SERVER查询服务器IP
  • SQL Server数据库连接查询和子查询实战案例
    目录前言1.查询所有学生的学号、姓名、选修课程号和成绩2.查询选修了课程名称为“数据库原理与应用”的学生的学号和姓名3.使用别名实现查询所有学生的学号、姓名、...
    99+
    2023-05-16
    sqlserver连接查询语句 sqlserver子查询 sqlserver子查询语句
  • Mysql不同服务器跨库查询解决方案
    目录项目场景:解决方案:1、开启FEDERATED引擎2、创建虚拟表项目场景: mysql在不同服务器实现跨库查询,类似dblink。 解决方案: 在两台不同服务器,实现跨库查询,其实现原理类似一个虚拟映射,需要用到my...
    99+
    2023-06-10
    Mysql 跨库查询 Mysql 跨服务器查询
  • SQL Server跨服务器操作数据库的图文方法(LinkedServer)
    基础知识介绍 以SQL Server的数据库管理工具SSMS(SQL Server Management Studio)为平台进行操作。 SQL Server Management Studio (SSMS) 是用于管理...
    99+
    2024-04-02
  • SQL Server的子查询详解
    目录一、子查询基础知识二、子查询规则三、限定子查询中的列名四、子查询的多层嵌套五、相关子查询六、子查询类型总结一、子查询基础知识 子查询是嵌套在SELECT、INSERT、UPDATE、DELETE语句中或另一个...
    99+
    2023-04-12
    SQL Server子查询语句 SQL Server子查询
  • 如何调优SQL Server查询
    这期内容当中小编将会给大家带来有关如何调优SQL Server查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在今天的文章里,我想给你展示下,当你想对特定查询创建索引设...
    99+
    2024-04-02
  • SQL Server中怎么实现数据库链接查询
    本篇文章给大家分享的是有关SQL Server中怎么实现数据库链接查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SQL Server数据库...
    99+
    2024-04-02
  • 如何在SQL Server数据库中实现子查询
    本篇文章给大家分享的是有关如何在SQL Server数据库中实现子查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1 子查询子查询是一个嵌套在select、insert、up...
    99+
    2023-06-14
  • SQL Server中怎么连接查询
    SQL Server中怎么连接查询,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是连接查询呢?概念:根据两个表或多个表的列之间的关系,从这...
    99+
    2024-04-02
  • mysql跨库关联查询(dblink)
    dblink 1、解决方案2、操作3、缺点 1、解决方案 mysql是不支持跨库连接的,如果我们实在要连接的话可以用dblink方式。 解释: dblink就是我们在创建表的时候连接到...
    99+
    2023-09-05
    mysql
  • Python 通过pymssql访问查询操作 SQL Server数据库
    在企业应用开发中,经常用到应用程序访问数据库的开发模式,中小企业使用的数据库中,以ms SQL Server居多。本文就以一个简单的实例模型,简单介绍一下python访问ms sql sever数据库...
    99+
    2023-09-24
    数据库 python qt5 sqlserver
  • oracle如何实现跨库查询
    这篇文章主要为大家展示了“oracle如何实现跨库查询”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“oracle如何实现跨库查询”这篇文章吧。在Oracle本地...
    99+
    2024-04-02
  • java如何实现跨库查询
    在Java中,可以使用JDBC(Java Database Connectivity)来实现跨库查询。以下是一个简单的示例:```j...
    99+
    2023-09-14
    java
  • SQL Server中怎么实现子查询
    这篇文章将为大家详细讲解有关SQL Server中怎么实现子查询,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、子查询概念介绍子查询可以嵌套在SELEC&...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作