【问题标题】:SQL Server python Machine Learning cannot access filesystemSQL Server python机器学习无法访问文件系统
【发布时间】:2019-06-15 15:36:51
【问题描述】:

SQL Server 2017 使用 sp_execute_external_script(SQL Server 机器学习)在数据库上下文中运行 python 脚本。 python 脚本需要从文件系统加载文件。一切(数据库和文件系统)在我的 PC 上都是本地的。错误跟踪:

Msg 39004, Niveau 16, État 20, Ligne 1

Une erreur de script « Python » s'est produite lors de l'execution de « sp_execute_external_script » avec HRESULT 0x80004004。

Msg 39019, Niveau 16, État 2, Ligne 1

Une erreur de script extern s'est produite :

执行错误。检查输出以获取更多信息。

Traceback(最近一次调用最后一次):

文件“”,第 5 行,在

文件“C:\PROGRA~1\MICROS~3\MSSQL1~2.MSS\MSSQL\EXTENS~1\MSSQLSERVER201701\B2E71FC7-8E08-4D86-8B82-38AD564DBC9D\sqlindb.py”,第 43 行,在变换中

im = Image.open(adresse_image)

文件“C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER2017\PYTHON_SERVICES\lib\site-packages\PIL\Image.py”,第 2410 行,打开

fp = builtins.open(filename, "rb")

PermissionError: [Errno 13] Permission denied: 'C:\Users\aubertl\Downloads\plage_corse_2.jpg'

SqlSatelliteCall 错误:执行错误。检查输出以获取更多信息。

消息 STDOUT 出处来自脚本外部:

Express Edition 将继续执行。

SqlSatelliteCall 函数失败。有关详细信息,请参阅控制台输出。

Traceback(最近一次调用最后一次):

文件“C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER2017\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py”,第 406 行,在 rx_sql_satellite_call 中

rx_native_call("SqlSatelliteCall", params)

文件“C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER2017\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py”,第 291 行,在 rx_native_call 中

ret = px_call(functionname, params)

RuntimeError: revoscalepy 函数失败。

【问题讨论】:

    标签: python sql-server


    【解决方案1】:

    来自Grant all application packages permissions on file folder

    选项 1:交互式

    • 启动 Windows 资源管理器并右键单击目标文件夹。
    • 从上下文菜单中,选择Properties
    • 切换到Security 选项卡。
    • 点击Edit按钮。
    • 点击Add...添加ALL APPLICATION PACKAGES权限。
    • 勾选Modify 和/或Full Control 以允许Read/Write 访问此目录。

    还可以添加Everyone 以防止任何进一步的问题。

    选项 2:命令行

    改编自StackOverflow answer,在Administator 命令提示符下运行:

    icacls "X:\DataDir" /grant "ALL APPLICATION PACKAGES:(OI)(CI)F" /T
    

    【讨论】:

      【解决方案2】:

      默认情况下,python 服务在“NT Service\MSSQLLaunchpad”下运行。文件位于“C:\Users\aubertl”文件夹中,默认情况下 MSSQLLaunchpad 无法访问该文件夹。
      我建议创建另一个目录,例如 C:\PytrhonScripts" 并将对该文件夹的读取权限授予 MSSQLLaunchpad。

      【讨论】:

      • 谢谢,似乎是要走的路。你能告诉如何将文件夹的读取权限授予 MSSQLLaunchpad 吗?右键单击目录 -> 属性 -> 安全 -> 修改 -> 添加 ... 我正在尝试添加 'NT Service\MSSQLLaunchpad$MSSQLSERVER2017',验证名称失败。
      • 或右击目录-> 授予访问权限-> 特定用户-> NT Service\MSSQLLaunchpad。验证名称失败。有没有办法找到这个帐户的位置?
      • 请尝试:kodyaz.com/t-sql/…
      【解决方案3】:

      右键单击目录 -> 授予访问权限 -> 添加“所有人”。然后脚本运行并产生所需的输出。显然无法添加服务运行的用户(NT Service\MSSQLLaunchpad),因此这是一种解决方法。

      【讨论】:

      • 确保您使用的是 NT Service\MSSQLLaunchpad$ 用户,否则您将无法在 AD 的用户列表中找到它。它只是一个用户,您应该能够添加它。 HTH。
      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 2011-01-23
      • 2017-02-26
      • 2021-04-16
      • 1970-01-01
      • 2017-03-03
      相关资源
      最近更新 更多