Ubuntu下SQL Server调用Python导出数据提示文件不存在如何解决
问题排查与解决步骤
1. 优先排查AppArmor安全模块拦截
Ubuntu 18.04默认开启的AppArmor安全模块会限制SQL Server的访问目录范围,即使你给目录授予了全局读写权限,AppArmor规则也会拦截SQL Server对/home目录的访问,这是该场景下最常见的原因。
- 临时禁用SQL Server的AppArmor规则测试:
sudo aa-disable /etc/apparmor.d/usr.sbin.mssql - 重启相关服务:
sudo systemctl restart mssql-server mssql-launchpadd - 重新执行你的SQL脚本测试,如果此时可以正常导出,说明确实是AppArmor规则限制,修改规则永久放行即可:
编辑/etc/apparmor.d/usr.sbin.mssql文件,在规则段末尾新增两行配置:
重新加载AppArmor规则并恢复启用:/home/dataexport/ r, /home/dataexport/** rw,sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mssqlsudo aa-enforce /etc/apparmor.d/usr.sbin.mssql
再次重启SQL Server相关服务即可。
2. 确认目录基础配置正确
- 确认目录真实存在:
ls -ld /home/dataexport,如果不存在先执行创建命令:sudo mkdir -p /home/dataexport - 直接将目录属主修改为SQL Server运行用户,避免权限歧义:
sudo chown -R mssql:mssql /home/dataexport
3. 替换路径验证脚本可用性
如果以上操作后依然报错,先将导出路径替换为SQL Server默认有权限的目录验证脚本本身是否正常,比如修改导出路径为/var/opt/mssql/tmp/1.csv,如果该路径可以正常导出,即可确认问题出在目录访问拦截,再回头核对AppArmor或者其他防火墙、安全组规则即可。
4. 安全优化建议
你之前给SQL Server和LaunchPad服务授予的sudo权限存在严重安全隐患,问题解决后请及时移除该权限。
内容的提问来源于stack exchange,提问作者JERRY
相关产品推荐
相关产品推荐

