You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

远程SQL Server执行BULK INSERT报“拒绝访问”错误求助

解决远程SQL Server执行BULK INSERT时的“拒绝访问”错误

这个问题的核心关键点很容易被忽略:BULK INSERT语句是在SQL Server服务账户的安全上下文下运行的,既不是你登录SQL Server的用户账户,也不是你执行PowerShell脚本的本地账户。哪怕你的PowerShell能正常访问共享,只要SQL服务账户没拿到对应权限,就会触发这个错误。下面是具体的排查和解决步骤:

  • 第一步:确认SQL Server服务的运行账户
    打开SQL Server配置管理器,找到你正在使用的SQL Server实例,查看它的“登录身份”:

    • 如果是Local System或者Network Service,这个账户在访问网络共享时,会使用SQL Server所在机器的机器账户(格式通常是域名\机器名$,比如WORKGROUP\SQLSERVER01$)。
    • 如果是指定的域账户或本地用户,直接记下这个账户名即可。
  • 第二步:给SQL服务账户授予共享和文件权限
    不管是机器账户还是指定账户,你需要给它配置两个层面的权限:

    1. 共享权限:在你的共享文件夹(UniversalShare)的共享设置里,添加这个账户,至少授予“读取”权限。
    2. NTFS权限:在共享文件夹的本地NTFS权限设置里,同样添加这个账户,给予“读取”权限(BULK INSERT仅需要读取权限,若有写入需求再额外配置)。
  • 第三步:检查UNC路径的正确性
    确保你在BULK INSERT语句里使用的是双反斜杠的UNC路径,因为SQL字符串里的单反斜杠会被当成转义字符。比如正确的写法应该是:

    BULK INSERT YourTargetTableName
    FROM '\\MyLaptop\UniversalShare\SQLRuleOutput.csv'
    WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n');
    

    如果写成\MyLaptop\...,SQL会解析路径错误,自然找不到目标文件。

  • 额外排查选项
    如果以上步骤都完成后仍有问题,可以试试这些方向:

    • 防火墙检查:确保SQL Server所在机器和你的笔记本(MyLaptop)之间的防火墙没有阻止SMB协议(端口139、445)。
    • 域组策略检查:如果是域环境,可能有组策略限制了服务账户的网络访问权限,需要联系域管理员确认相关策略。
    • 迂回方案:把CSV文件先复制到SQL Server的本地磁盘(比如C:\Temp\SQLRuleOutput.csv),再执行BULK INSERT,绕开跨网络共享的权限问题。

内容的提问来源于stack exchange,提问作者Conrad S.

火山引擎 最新活动