SQL Server 跨库/服务器查询

这里写目录标题

  • 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'
end
goEXEC 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.DatabaseObject
SELECT 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.DatabaseObject
SELECT * 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git stash命令的用法

在Git中,stash命令是最常用的命令之一。它可以在你提交之前,暂时地保存你的工作现场,并将其记录在Git的堆栈中。当你再次回来完成该工作时,你可以简单地弹出该堆栈,并重新开始未完成的工作。 0. git stash 该命令将当…

macOS Ventura 13.5.2(22G91)发布,附黑/白苹果镜像下载地址

系统介绍(下载请百度搜索:黑果魏叔) 黑果魏叔 9 月 8 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.5.2 更新(内部版本号:22G91),本次更新距离上次发布隔了 21 天。 本次更新查…

6.Flask-APScheduler定时任务框架

1.下载安装 pip install flask-apscheduler2.基本使用 from flask import Flask from flask_apscheduler import APScheduler app Flask(__name__) aps APScheduler() # 配置定时任务 scheduler { id: job1, func: scheduler:task, # 指向一个Python函数或方法…

ABY2.0:更低的通信开销

参考文献: [ABY] Demmler D, Schneider T, Zohner M. ABY-A framework for efficient mixed-protocol secure two-party computation[C]//NDSS. 2015.[ABY3] Mohassel P, Rindal P. ABY3: A mixed protocol framework for machine learning[C]//Proceedings of the…

Weblogic10中常用Linux指令

一.Weblogic 创建域 域目录/servers/AdminServer 路径下 以weblogic帐号登录(与创建域目录相对应账户) cd /home/weblogic/bea/weblogic92/common/bin 执行./config.sh进入配置界面。配置步骤如下: 1.Choose between creating and exten…

【java web】JSP-Java Server Page

前言 这个框架我用得不多,感觉和python的django一样,前后端结合太紧密了,适合个人开发 get 明文请求,可以被直接收藏 post 密文请求 JSP Java Server Page(JSP)HTMLJava code 步骤: 1.…

【数据结构初阶】二、 线性表里的顺序表

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【数据结构初阶】一. 复杂度讲解_高高的胖子的博客-CSDN博客 1 . 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实…

WMS仓储管理系统的功能与WCS系统有什么区别

在物流行业的现代化管理中,WMS仓储管理系统和WCS仓库控制系统是两个重要的组成部分。虽然它们都是用于仓库管理的软件系统,但是它们的功能和应用场景有很大的区别。本文我们将详细阐述这两者的功能和区别。 一、WMS仓储管理系统 WMS是一种软件系统&…

科技资讯|苹果Vision Pro获得被动冷却系统及数字表冠控制界面专利

据patentlyapple报道,美国专利商标局正式授予苹果一项与头戴式设备(Apple Vision Pro)相关的专利11751366,该设备可以提供被动冷却系统,利用光学组件的表面来管理热量,而不会对用户显示的视觉信息产生不利影…

计算机竞赛 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

[C++]杨辉三角

目录 题目 解题思路 代码实现 获取数字 打印函数 主函数 全部代码 运行结果 题目 给定一个非负整数numRows ,生成「杨辉三角」的前numRows行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 解题思路 第k列的第i个数字的值第k-1列的(…

shell SQL 变量 Oracle shell调用SQL操作DB

注意 &#xff1a; v\\\$ 用法, “v\\\$session ” ""不能用 sqlplus -S / as sysdba << EOF set pagesize 0 set verify off set feedback off set echo off col coun new_value v_coun select count(*) coun from dual; EOF value"$?"VALUE…

鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

Linux编辑器vim

目录 一、vim的几种模式 1、命令模式 2、编辑/插入模式 3、底行模式 ①增加行号 ②分屏操作 ③不退出vim执行命令 4、替换模式 二、vim的常见命令 1、yy命令 2、p命令 3、dd命令 4、u命令 5、Ctrl r命令 6、shirtg命令 7、gg命令 8、shirt6命令 9、shirt4命…

【PythonRS】基于GDAL修改栅格数据的DN值

遥感工作者离不开栅格数据&#xff0c;有时候我们可能需要修改栅格数据的值&#xff0c;但ENVI和ArcGIS中并没有直接修改DN值的工具&#xff0c;只有栅格计算器、Band math这些工具去计算整个波段的值&#xff0c;或者Edit Classification Image工具可以修改ENVI分类后的像元值…

查看视频文件关键帧间隔

一、Elecard StreamEye Tools拖放视频文件查看。 红的是I帧&#xff1b;蓝的是P帧&#xff1b;绿的是B帧。 二、ffprobe -show_streams统计。 1、统计视频关键帧、非关键帧 ffprobe.exe -i 1.mp4 -show_streams v -show_packets -print_format json > d:\1.json 再统计1.j…

[SSM]MyBatisPlus拓展

五、拓展篇 5.1逻辑删除 在电商网站中&#xff0c;我们会上架很多商品&#xff0c;这些商品下架以后&#xff0c;我们如果将这些商品从数据库中删除&#xff0c;那么在年底统计商品的时候&#xff0c;这个商品要统计的&#xff0c;所以这个商品信息我们是不能删除的。 如果商城…

如何判断bug是前端bug还是后端bug

1.前后端bug 特征&#xff1a; 前端主要负责显示数据&#xff0c;后端主要负责处理数据、存储数据&#xff0c;前后端主要通过接口进行数据交换。 前端bug的特征&#xff1a; 界面显示类问题&#xff1a;如文字大小不一&#xff0c;控件颜色不搭&#xff0c;控件不整齐&#x…

分布式锁怎么抗高并发 redis

比如&#xff0c;多个人下单某一个商品 怎么处理 分段加锁 合并扣减。 这里首先要让redis是集群&#xff0c;避开单机性能问题。 大概意思就是将商品分摊到多个服务器上&#xff0c;这样就减轻了单台的压力

网桥、路由器和网关有什么区别?

网桥、路由器和网关是网络设备中的三种重要类型&#xff0c;在OSI模型中&#xff0c;它们分别位于不同的层次。 网桥&#xff1a;工作在OSI模型的第二层&#xff0c;即数据链路层。网桥的主要功能是根据MAC地址转发和过滤帧&#xff0c;当帧到达网桥的接口&#xff0c;网桥不…