You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决SQL Server通过Python读取共享路径Excel时的Errno 13权限错误?

问题描述

使用SQL Server 2019 + Python 3.10,执行sp_execute_external_script读取远程共享路径的Excel文件时,触发权限拒绝错误。

执行的代码:

EXECUTE sp_execute_external_script
        @language = N'Python',
        @script = N'import pandas as pd
                    df = pd.read_excel(r"\\192.168.7.9\Import\10\test\testData.xlsx", sheet_name = "Sheet1")
                    print(df)';

错误信息:

Msg 39019, Level 16, State 2, Line 48
An external script error occurred:

self.book = xlrd.open_workbook(self.io)
File "D:\SQL Data\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\xlrd_init.py", line 111, in open_workbook
with open(filename, "rb") as f:
PermissionError: [Errno 13] Permission denied: '\192.168.7.9\Import\10\test\testData.xlsx'

SqlSatelliteCall error: Error in execution. Check the output for more information.

STDOUT message(s) from external script:
SqlSatelliteCall function failed. Please see the console output for more information.

Traceback (most recent call last):

File "D:\SQL Data\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py", line 605, in rx_sql_satellite_call
rx_native_call("SqlSatelliteCall", params)

File "D:\SQL Data\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py", line 375, in rx_native_call

已确认自身账号有共享路径读写权限,且Excel文件未打开,问题仍存在。

原因分析

执行Python外部脚本的进程并非以你的账号运行,而是由SQL Server Launchpad服务启动,默认使用NT Service\MSSQLLaunchpad账号,该系统账号默认没有访问网络共享文件夹的权限。你自身的权限和服务账号权限相互独立,这是导致权限拒绝的核心原因。

解决方案

1. 配置Launchpad服务账号的共享权限

  • 打开Windows服务管理器(运行services.msc),找到SQL Server Launchpad (MSSQLSERVER),查看其登录身份。
  • 远程访问共享服务器\\192.168.7.9,定位到Import\10\test文件夹:
    • 右键文件夹→属性→安全→编辑→添加
    • 输入Launchpad服务的账号(如NT Service\MSSQLLaunchpad),点击检查名称确认后,授予读取和写入权限。
  • 若为域环境,可将该服务账号加入拥有共享权限的域组,简化权限管理。

2. 改用本地路径中转(可选)

将Excel文件复制到SQL Server服务器的本地磁盘(如D:\SQL_Import\),修改Python代码读取本地路径:

EXECUTE sp_execute_external_script
        @language = N'Python',
        @script = N'import pandas as pd
                    df = pd.read_excel(r"D:\SQL_Import\testData.xlsx", sheet_name = "Sheet1")
                    print(df)';

这种方式无需配置网络共享权限,但需要额外维护文件同步逻辑。

3. 验证权限有效性

可通过xp_cmdshell测试服务账号是否能访问共享路径:

EXEC xp_cmdshell 'dir \\192.168.7.9\Import\10\test'

若返回权限错误,说明权限配置未生效,需重新检查共享权限设置或服务账号身份。

内容的提问来源于stack exchange,提问作者ahmed barbary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:55:23