Kubuntu 19.10下Azure Data Studio创建数据库遇Msg 5123错误求解决方案
嘿,这个问题我在Linux环境下用SQL Server时碰到过好多次,本质是文件路径或权限问题,和你用Kubuntu系统确实有关系,我给你一步步拆解解决办法:
错误原因分析
Msg 5123搭配操作系统错误2,核心是SQL Server尝试创建数据库文件时,找不到指定的目录,或者没有权限写入该目录。SQL Server在Linux(包括Kubuntu)上的默认数据文件路径和Windows完全不同,默认是/var/opt/mssql/data/,如果你的代码没指定路径,SQL Server会尝试用这个默认目录,但如果目录不存在、权限配置不对,就会触发这个报错。
解决方案一:手动指定文件路径创建数据库
最直接的办法是在CREATE DATABASE语句里明确指定文件到SQL Server有权限的目录,修改你的代码如下:
-- 连接到master数据库 USE master GO -- 检查数据库是否存在,不存在则创建 IF NOT EXISTS ( SELECT [name] FROM sys.databases WHERE [name] = N'DATA_1' ) CREATE DATABASE DATA_1 ON PRIMARY ( NAME = DATA_1_Data, FILENAME = '/var/opt/mssql/data/DATA_1.mdf', -- 指定Linux下的默认数据目录 SIZE = 8MB, MAXSIZE = UNLIMITED, FILEGROWTH = 64MB ) LOG ON ( NAME = DATA_1_Log, FILENAME = '/var/opt/mssql/data/DATA_1.ldf', -- 日志文件同样指定到该目录 SIZE = 8MB, MAXSIZE = UNLIMITED, FILEGROWTH = 64MB ) GO
明确指定文件路径后,SQL Server就能找到正确的位置创建文件了。
解决方案二:修复默认目录的权限(如果想用默认路径创建)
如果你不想每次都手动指定路径,可以检查并修复默认数据目录的权限:
- 打开Kubuntu的终端,先查看默认目录的权限:
ls -ld /var/opt/mssql/data/
正常情况下,输出应该显示所有者是mssql:mssql,权限为drwxr-xr-x(755)。
- 如果权限不对,执行以下命令修改:
# 递归修改目录所有者为mssql用户 sudo chown -R mssql:mssql /var/opt/mssql/data/ # 递归设置目录权限 sudo chmod -R 755 /var/opt/mssql/data/
- 最后重启SQL Server服务,让权限变更生效:
sudo systemctl restart mssql-server
完成后,你原来的代码应该就能正常运行了。
为什么Kubuntu系统会相关?
SQL Server在Linux和Windows上的文件系统、权限模型差异很大:Windows上默认路径是C:\Program Files\Microsoft SQL Server\...,而Linux(包括Kubuntu)用的是/var/opt/mssql/data/,而且Linux对文件权限的管控更严格,如果mssql用户没有目录的读写权限,就会出现“找不到文件”的错误。
内容的提问来源于stack exchange,提问作者v4r0_30

