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
sys
和 INFORMATION_SCHEMA
架构是为系统对象而保留的。 您不能在这些架构中创建对象,而且不能删除它们。
dbo 架构
dbo
架构是每个数据库的默认架构。 默认情况下,使用 CREATE USER Transact-SQL 命令创建的用户的默认架构为 dbo
。 dbo
架构由 dbo
用户帐户拥有。
默认架构被分配为 dbo
的用户不会继承 dbo
用户帐户的权限。 用户不从架构继承权限;架构权限由架构中包含的数据库对象继承。 用户的默认架构仅用于对象引用,以防用户在查询对象时省略架构。
当使用部分名称来引用数据库对象时,SQL Server 首先在用户的默认架构中查找。 如果在此处未找到该对象,则 SQL Server 其次将在 dbo
架构中查找。 如果对象不在 dbo
架构中,则会返回一个错误。
参考链接:SQL Server 中所有权和用户与架构的分离 - SQL Server | Microsoft Learn
相关文章:
SQL Server 跨库/服务器查询
这里写目录标题 1 SQL Server 跨库/服务器查询1.1 跨库查询1.2 跨服务器查询1.2.1 创建链接服务器1.2.2 跨库查询 1.3 拓展:SQL Server 中所有权和用户与架构的分离 1 SQL Server 跨库/服务器查询 1.1 跨库查询 在同一服务器下的跨库查询较为简单,示例…...
word转PDF文件变小,图片模糊
word论文29M,文件——另存为——只有1.5M左右,图片压缩严重,图片看不清。 word中很多大图,5M一张的图,所以word很大。 找了很多方法,转换后都在2M左右,勉强可以。 直到找到了这个,…...
被删除并且被回收站清空的文件如何找回
文件的意外删除和回收站清空是许多用户面临的普遍问题。这种情况下,很多人会感到无助和焦虑,担心自己的重要文件永远丢失。然而,幸运的是,依然存在一些有效的方法能够帮助我们找回被删除并且被回收站清空的文件。 ▌被删除文件在…...
每日两题 131分割回文串 784字母大小写全排列(子集模版)
131 131 题目 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1: 输入:s “aab” 输出:[[“a”,“a”,“b”]…...
Java面试八股文宝典:初识数据结构-数组的应用扩展之HashMap
前言 除了基本的数组,还有其他高级的数据结构,用于更复杂的数据存储和检索需求。其中,HashMap 是 Java 集合框架中的一部分,用于存储键值对(key-value pairs)。HashMap 允许我们通过键来快速查找和检索值&…...
ES6 特性
一、ES6 1.1 ES6 概念 1.1.1 什么是 ES ES 全称 EcmaScript 是脚本语言的规范JavaScript 是 EcmaScript 的一种实现ES 新特性就是指 JavaScript 的新特性 1.1.2 为什么要使用 ES 语法简单,功能丰富框架开发应用前端开发职位要求 1.1.3 为什么要学习 ES6 ES6 …...
重拾html5
新增的position: sticky; 基于用户的滚动位置来定位,粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。ie15以上的低版本不支持,Safari 需要使用 -webkit- prefix; vertical-align: midd…...
递归学习——记忆化搜索
目录 编辑 一,概念和效果 二,题目 1.斐波那契数 1.题目 2.题目接口 3.解题思路 2.不同的路径 1.题目 2.题目接口 3.解题思路 3.最长增长子序列 1.题目 2.题目接口 3.解题思路 4.猜数字游戏II 1.题目 2.题目接口 3.解题思路 总结&a…...
ChatGPT帮助一名儿童确诊病因,之前17位医生无法确诊
9月13日,Today消息,一位名叫Alex的4岁儿童得了一种浑身疼痛的怪病,每天需要服用Motrin(美林)才能止痛。3年的时间,看了17名医生无法确诊病因。(新闻地址:https://www.today.com/heal…...
Laf 云开发平台及其实现原理
Laf 产品介绍 自我介绍 大家好,我是来自 Laf 团队的王子俊,很高兴今天能在这里给大家分享我们 Laf 云开发平台及其实现原理。本来想说一点什么天气之类的话作为开头,但主持人都说完啦,我就不多说了,还是直接开始今天…...
浅谈STL|STL函数对象篇
一.函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是一个类,不是一个函数 特点 函数对象在使用时,可以像普通函数那…...
自建私人图床方案:使用Cpolar+树洞外链轻松部署超轻量级图床,实现高效图片存储
文章目录 1.前言2. 树洞外链网站搭建2.1. 树洞外链下载和安装2.2 树洞外链网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3 Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语…...
从零基础到精通Flutter开发:一步步打造跨平台应用
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 导言 Flutter是一种流行…...
SpringBoot整合WebSocket【代码】
系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、SpringBoot整合ElasticEearch【代码示例】 文章目录 系列文章目录代码下载地址一、效果演示二、引入依赖…...
微服务 第一章 Java线程池技术应用
系列文章目录 第一章 Java线程池技术应用 文章目录 系列文章目录[TOC](文章目录) 前言1、Java创建线程方式回顾1.1、继承Thread类(只运行一次)1.1.1、改造成主线程常驻,每秒开启新线程运行1.1.2、匿名内部类1.1.3、缺点1.1.4、扩展知识:Java内部类1.1.4…...
行业追踪,2023-09-14
自动复盘 2023-09-14 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...
传输层协议--UDP
引入 传输层负责数据能够从发送端传输到接收端。 端口号(Port) 端口号标识了一个主机上进行通信的一个进程。 两个问题: 1. 一个进程可以绑定多个端口号吗?--可以 2.一个端口号可以绑定多个进程吗?--不可以 我们…...
微信会员卡开发流程
功能需求: 通过微信第三方平台创建的模板小程序,想要实现用户在小程序支付一定金额后领取会员卡,领取会员卡后可给用户下发一定数量的优惠券,并且实现用户在小程序消费享受商品折扣。 开发流程: 一、了解微信的3个平…...
《算法竞赛·快冲300题》每日一题:“点灯游戏”
《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 点…...
常见高级语言的输入与输出训练(一)
文章目录 题目概述1 输入描述: 输出描述: 输入 输出 示例C语言代码 题目概述2 题目描述 输入描述: 输出描述: 输入 输出 示例Java代码 前言 本文主要讲解两个算法题的代码实现 题目概述1 计算ab 打开以下链接可以查看正确的代码 数据范围:数据组数满…...
恭喜!龙蜥获得 2023 大学生操作系统设计赛二等奖及特殊贡献奖
经过多月的激烈角逐,2023 全国大学生系统能力大赛操作系统设计赛(以下简称“2023 大学生操作系统赛”) 圆满结束。经过 2023 大学生操作系统赛评审组和技术委员会的复核,面向全国公布了此次大赛的获奖名单。龙蜥社区不负众望&…...
中项系统集成项目管理2023上半年真题及解析
中项系统集成项目管理2023上半年真题及解析 上午题1. 在 (1) 领域,我国还远未达到世界先进水平,需要发挥新型举国体制优势,集中政府和市场两方面的力量全力发展2. ChatGPT于 2022年 11 月 30 日发布,它是人工智能驱动的 (2) 工具3…...
实时显示当前文件夹下的文件大小,shell脚本实现
图片来源于网络,如果侵权请联系博主删除! 需求: 写一个shell终端命令,实时显示当前文件夹下的文件大小 实现: 您可以使用以下的Shell脚本命令来实时显示当前文件夹下的文件大小: while true; docleardu …...
7、Spring之依赖注入源码解析(下)
resolveDependency()实现 该方法表示,传入一个依赖描述(DependencyDescriptor),该方法会根据该依赖描述从BeanFactory中找出对应的唯一的一个Bean对象。 @Nullable Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName,@Null…...
图片码二次渲染绕过
目录 一、环境 1、代码 2、文件处理方式 3、图片码的制作 二、绕过图片重构 1、可行性分析 2、数据比对 3、完成绕过 一、环境 以upload-labs靶场第十七关为例 1、代码 源码为: <?php include ../config.php; include ../head.php; include ../menu.…...
点评项目核心内容
目录 拦截器设置 集群的session共享问题 基于redis实现共享session登录 创建bean对象技巧 什么是缓存 使用缓存来处理对象 使用String类型缓存来处理集合 缓存更新策略 主动更新策略 缓存穿透 空串""和null的区别 缓存null值解决穿透问题 缓存雪崩 缓存击穿…...
海外商城小程序为什么这么受欢迎?
随着全球化的进程海外商城小程序在近年来获得了广泛的关注和使用。海外商城小程序是一种基于互联网技术的应用程序,为用户提供了便捷的购物体验和跨境交易服务。本文将深入探讨海外商城小程序的受欢迎原因,从多个维度进行分析就其未来发展进行思考&#…...
Linux Day13 ---信号量
一、信号量 1.1 一些概念 用来管理对资源的访问 一个特殊的变量,只允许对它进行等待(wait)和发送信号(signal),代表可用资源个数, 取0,1 二值信号量 取 3,5 计数信号量 p操作:原子减一,代表获取资源,可能阻塞 v…...
《动手学深度学习 Pytorch版》 4.10 实战Kaggle比赛:预测比赛
4.10.1 下载和缓存数据集 import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/def download(name, cache_diros.path.join(.., data)): #save"""下载一个…...
jQuery补充
文章目录 简介安装语法选择器元素选择器#id 选择器.class 选择器事件常用事件方法 效果显示隐藏淡入淡出滑动动画停止动画获取内容和属性添加元素删除元素操作css父辈 💛💛孔子云:温故而知新,可以为师矣💛💛…...
天津高端网站建设/seo专员岗位要求
今天学习: 在Ubuntu下软件源的文件是/etc/apt/sources.list,那么sourdces.list.d目录下的文件又是什么作用呢? 该文件夹下的文件是第三方软件的源,可以分别存放不同的第三源地址,只需“扩展名”为list即可,…...
wordpress增加网址大全/百度刷搜索词
在ActiveMQ 解压缩后的目录如下: 各个目录说明如下: bin:ActiveMQ的启动脚本conf:ActiveMQ的所有配置文件data:日志文件及持久性消息数据docs:ActiveMQ官方文档examples:ActiveMQ官方提供的…...
怎么删除wordpress/sem推广优化
后端 uniapp文件上传代码-jeecgboot接收文件上传并返回上传文件的地址代码(本地版)【伸手党福利】 https://blog.csdn.net/wwppp987/article/details/123470369 jeecgboot定时任务示例(解决springboot和jeecgboot框架定时任务突然无效问题…...
wordpress安装虚拟主机/百度账号注册
pl/sql块介绍 介绍 块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块,要完成相对简单的应用功能,可能只需要编写一个pl/sql块,但是如果想要实现复杂的功能,可能需要在一个pl/sql块中嵌套其它的p…...
郑州企业网站设计/1688黄页大全进口
# 爬取京东 url try:r requests.get(url)r.raise_for_status()r.encoding r.apparent_encodingprint(r.text[:1000]) # 展示前一千字节的数据 except:print(爬取失败)# 爬取亚马逊 url try:kv {user-agent:Mozilla/5.0}r requests.get(url, headerskv) # 浏览器伪装 …...
帆软网站开发/种子搜索引擎torrentkitty
django中有一个默认的user表单,很多情况下是不满足需要的,需要对其进行扩展,方法如下: model.py中: 新的用户模型继承自AbstractUser,并添加自定义的属性 from django.contrib.auth.models import Abstr…...