SQL Server附加数据库出现错误5123的正确解决方法

浅雪酱_9099

浅雪酱_9099

2016-12-16

2352人浏览

原创

因为自己有一本基于sql server 2005的数据库教程,里边使用的示例数据库是adventureworks for sql server 2005,而我的机子上装的是sql server 2008,示例数据库是adventureworks for sql server 2008。起初我以为示例数据库adventureworks for sql server 2005 与adventureworks for sql server 2008 数据库结构应该差不多,可是在练习的过程中,我发现两个数据库中很多表的结构还是有很多不一样的地方。于是决定到微软下载中心将示例数据库adventureworks for sql server 2005下过来,附加到sql server 2008上,以便顺利进行练习。我以sql server 2008的超级管理员账户“sa”连接登录到实例sqlserver2008:

错误5123

在附加示例数据库AdventureWorks for SQL Server 2005时,弹出了下图这个错误:

错误5123

    仔细看了一下主要信息“尝试打开或创建物理文件......时,CREATE FILE遇到操作系统错误 5(拒绝访问。)”  ,一看就知道应当是对要附加的数据文件的操作权限不够。     按一般的思维习惯,我们会对操作权限不够的文件授予足够的操作权限。比如,有网友说“给要附加的数据文件和相应的日志文件授予Everyone的权限”,授权过程如下三张截图所示(注意数据文件和日志文件都必须授权):

授权数据文件

(图1:授权数据文件)

数据文件授权后

(图2:数据文件授权后)

日志文件授权后

(图3:日志文件授权后)  

 

    对要附加的数据文件和日志文件分别授予Everyone【读取和执行】、【读取】的权限后,在SQL Server 2008中重新尝试附加数据库,发现可以附加成功了! 是不是问题就这样解决了呢?这样子做对吗?     如果在真实的数据库管理过程中,我们把数据文件、日志文件的权限放大到Everyone,那肯定是不对的做法。因为这样数据库的安全性将大打折扣,虽然对Everyone只授予了【读取和执行】、【读取】的权限,但这仍然有泄漏数据的危险。

     我们应当保证能正常访问的情况下,使数据文件具有最小的访问权。我们之前授权给Everyone,那所有用户或账户都能操作相应的文件了,这肯定不安全的。那么如何才能授予最小的访问权限呢?思考一下,我们用SQL Server 2008去附加相应的数据文件,报出“拒绝访问”即权限不够的错误,换句话说,当前SQL Server 2008没有权限访问这些文件。我们右键文件,到文件属性中查看一下文件的权限情况,如下图所示:

相应数据文件原本的权限情况

(相应数据文件原本的权限情况) 

 

     我们发现只有SYSTEM和xrm这两个组或用户才有权操作此数据文件。SYSTEM是一个用户组,即【本地系统】组,而xrm是一个管理员用户,如图示:

xrm用户的信息

(xrm用户的信息) 

 

    SYSTEM用户组和xrm这个管理员用户都有权限操作此数据文件和日志文件,而以SQL Server 2008的超级管理员SA连接登录实例后,SQL Server却没有权限访问此数据文件。换句话说,以SQL Server 2008的超级管理员SA连接登录实例后,登录的身份不在SYSTEM用户组,也不是xrm这个管理员。那会是什么呢?

         我们查看一下当前SQL Server 2008的实例服务的相关信息就知道了,打开Sql Server Configuration Manager (即SQL Server 配置管理器)查看一下当前连接到的实例服务的相关信息,如下图所示:

当前实例服务的相关信息

(当前实例服务的相关信息)  

 

    发现当前实例SQLSERVER2008的登录身份为“NT AUTHORITY\LocalService”,即操作系统授权的【本地服务】,本地服务也是了个用户组。换句话说,如果我们仅授予【本地服务】这个用户组的权限(而不是Everyone),应该也可以在SQL Server 2008中用sa的账户附加数据库了。为此,将刚刚授予相应数据文件和日志文件Everyone的权限都删除,再授予LocalService用户组相应数据文件和日志文件的权限,重新尝试附加相应的数据库,发现的确可以附加成功!不必说,授予操作系统授权的【本地服务】用户组比起授予Everyone来说肯定要安全的多。

    上面提到的方法中,我们都是改变了数据文件原来的权限范围(原来的权限范围只有SYSTEM即【本地系统】用户组和xrm这个系统管理员) 。而更好的办法是不要改变数据文件的权限范围,仍然以SA身份连接登录SQL Server 2008的实例也能访问相应的数据文件。而要达到这个目的,我们只需要将相应实例的登录身份改为SYSTEM【本地系统】用户组,SYSTEM也是在相应数据文件的权限范围之内的用户组,而且SQL Server实例以本地系统身份运行,安全性将更高。我们可以在SQL Server 配置管理器中将相应的SQL Server实例的登录身份修改为【本地系统】即Local System,如下列图所示:

修改实例的登录身份

(修改实例的登录身份)

实例的登录身份变为LocalSystem

(实例的登录身份变为LocalSystem)

 

    然后重启相应实例服务,重新以SA身份连接登录SQL Server 2008的相应实例并尝试附加数据库, 同样可以成功的将数据库附加上!!!  

SQL Server 配置管理器

其实,如果不是要特别地以SA身份连接登录SQL Server 2008的相应实例来附加相应数据库,那么在连接登录SQL Server 2008的相应实例时,身份验证选择【Windows 身份验证】,不做前文中所述的其他修改就可以把数据库附加上去了,原因就在于:【Windows 身份验证】用的是当前操作系统的用户的权限,权限一般都足够大的。另外,在【SQL Server 配置管理器】中针对实例服可以做的操作,在Windows的【服务】上也可以做到



更多SQL Server附加数据库出现错误5123的正确解决方法相关文章请关注PHP中文网!


PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

0

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

0

17

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

2026.11.02

0

17

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

100

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

80

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

240

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

140

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

140

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

100

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习