计算机改名导致数据库链接的诡异问题

简介:

  前几天给开发部门部署测试数据库时,遇到一个很诡异的问题:创建一个链接服务器GEK-MIS01时,报错如下:

    消息 15190,级别 16,状态 1,过程 sp_dropserver,第 56 行

    仍有对服务器 'GEK-MIS01' 的远程登录或链接登录。

脚本如下(略去登录名等关键信息): 

/****** Object:  LinkedServer [GEK-MIS01]    Script Date: 07/05/2013 16:19:58 ******/
IF  EXISTS (SELECT srv.name FROM sys.servers srv WHERE srv.server_id != 0 AND srv.name = N'GEK-MIS01')EXEC master.dbo.sp_dropserver @server=N'GEK-MIS01', @droplogins='droplogins'
GO

/****** Object:  LinkedServer [GEK-MIS01]    Script Date: 07/05/2013 16:19:58 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'GEK-MIS01', @srvproduct=N'SQL Server'

/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'GEK-MIS01',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='*****'

GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'collation compatible', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'data access', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'dist', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'pub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'rpc', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'rpc out', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'sub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'connect timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'collation name', @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'lazy schema validation', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'query timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'GEK-MIS01', @optname=N'use remote collation', @optvalue=N'false'
GO

 因为当时是一批脚本执行而且仅有这个脚本出错,当我准备查检查出错原因的时候,又有更紧急的事情要处理,就耽搁了处理这个问题,开发那边在测试过程发现这个数据库链接有问题,邮件反馈给我,我检查时居然发现很多不可思议的现象:

(1): 我用SSMS进入“服务器对象”——“链接服务器”下,居然看不到这个链接服务器对象,而通过sysservers等系统表又能查到这个服务器链接对象的信息,当时我就百思不得其解,纳尼啊?

(2) 重新执行上面脚本时发现删除链接服务器那段脚本根本删除不了该链接服务器,而添加链接服务器时则报错

   IF  EXISTS (SELECT srv.name FROM sys.servers srv WHERE srv.server_id != 0 AND srv.name = N'GEK-MIS01')

       EXEC master.dbo.sp_dropserver @server=N'GEK-MIS01', @droplogins='droplogins'

   GO

   EXEC master.dbo.sp_addlinkedserver @server = N'GEK-MIS01', @srvproduct=N'SQL Server'

  消息 15028,级别 16,状态 1,过程 sp_addlinkedserver,第 82 行

  服务器 'GEK-MIS01' 已存在。

(3):接下来我测试了下链接服务器的使用情况,发现有些登录名(Windows 身份认证,sysadmin角色)下使用该数据库链接没有问题,而SQL Server身份验证的登录名则会报下面错误:

  EXEC [GEK-MIS01].DatabaseName.dbo.Procedure  'xxxx'

  消息 916,级别 14,状态 1,第 1 行

  服务器主体 "username" 无法在当前安全上下文下访问数据库 "xxxxx"。

(4):而在SSMS下,在"服务器对象"—>“链接服务器”—> "GEK-MIS01"下单击目录时,报如下错误。

clipboard

具体错误信息如下:

标题: Microsoft SQL Server Management Studio
------------------------------

无法为该请求检索数据。 (Microsoft.SqlServer.Management.Sdk.Sfc)

有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476

------------------------------
其他信息:

执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)

------------------------------

拒绝了对对象 'xp_prop_oledb_provider' (数据库 'mssqlsystemresource',架构 'sys')的 EXECUTE 权限。 (Microsoft SQL Server,错误: 229)

有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.4000&EvtSrc=MSSQLServer&EvtID=229&LinkId=20476

------------------------------
按钮:

确定
------------------------------

解决办法: 查看当前USER为guest, 执行下面赋权语句即可解决问题

SELECT CURRENT_USER;

GRANT EXECUTE ON SYS.XP_PROP_OLEDB_PROVIDER TO guest;

但是对于现象1,2,3则困扰了我好久,一直以为是权限问题,最后经过吐血的漫长 排查,终于发现一个让人吐血的原因:这台测试数据库服务器原先的计算机名称为gek-mis01,后来不知道啥原因被系统管理员用作测试服务器(历史原因 了我就不多说了),改名为GETTESTNT15,而一台新的服务器命名为gek-mis01,结果我今天新建链接服务器时,就踩到了这个地雷。

image

接下来解决起来就比较顺利了,首先删除该链接服务器,修复计算机改名问题,重新新建该链接数据库,OK,问题解决了!

Code Snippet
  1. exec sp_droplinkedsrvlogin'GEK-MIS01' ,'xxxxx'
  2.  
  3. exec sp_dropserver'GEK-MIS01'
  4.  
  5.  
  6. USE master;
  7. GO
  8. IF SERVERPROPERTY('servername') <> @@SERVERNAME
  9. BEGIN
  10. DECLARE @server sysname;
  11. SET @server =@@SERVERNAME;
  12. EXEC sp_dropserver@server= @server;
  13. SET @server = CAST(SERVERPROPERTY('servername') AS sysname);
  14. EXEC sp_addserver@server=@server, @local='LOCAL';
  15. END
相关文章
|
前端开发 JavaScript Java
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
563 17
|
Oracle 关系型数据库 Linux
YashanDB异构数据库链接配置
本指南介绍在YashanDB中配置异构数据库链接(DBLINK)的方法,特别是连接至Oracle数据库的前置要求与步骤。需确保YashanDB服务端安装plugin插件包、Oracle Instant Client及libaio库,否则可能导致错误或进程崩溃。文档还提供了Oracle Instant Client和libaio库的具体安装指导,帮助管理员顺利完成配置。
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
1618 11
|
数据库连接 网络安全 数据库
网站链接数据库失败,重启网站好了
网站链接数据库失败,重启网站好了
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
1907 6
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
1635 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
Cloud Native 关系型数据库 Serverless
阿里云数据库获中国计算机学会“科技进步一等奖”!
阿里云数据库获中国计算机学会“科技进步一等奖”!
401 0
|
SQL 数据库
【计算机三级数据库技术】第6章 高级数据查询--附思维导图
提供了SQL查询的高级概念和应用,包括一般数据查询(如使用TOP、CASE和INTO关键字)、查询结构的并、交、差运算(UNION、INTERSECT、EXCEPT),相关子查询,替代子查询和派生表,以及开窗函数和公用表表达式(CTE)。文中还包含了思维导图,帮助读者更好地理解SELECT单表查询语句的要点。
428 4
|
数据可视化 架构师 测试技术
【计算机三级数据库技术】第5章 UML与数据库应用系统--附思维导图
本文提供了UML在数据库应用系统设计中的应用概览,包括UML建模框架、视图、四大图的介绍,以及如何使用活动图、用例图、类图、顺序图等UML图来表达业务流程、系统需求和内部结构,最后还涉及了系统微观和宏观设计的UML表达方式。
863 4
|
监控 数据可视化 前端开发
基于python django生产数据与计划大屏,可链接数据库
本文介绍了一个基于Python Django框架开发的生产数据与计划大屏系统,该系统能够实时采集和展示生产数据,支持数据可视化和实时更新,以提高生产监控的效率和质量。
520 3

热门文章

最新文章