Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何使用SQLAgent帐户以外的权限从代码中运行批量插入?_Vb.net_Sql Server 2008_Bulkinsert - Fatal编程技术网

Vb.net 如何使用SQLAgent帐户以外的权限从代码中运行批量插入?

Vb.net 如何使用SQLAgent帐户以外的权限从代码中运行批量插入?,vb.net,sql-server-2008,bulkinsert,Vb.net,Sql Server 2008,Bulkinsert,我们有一些代码希望运行大容量插入sql命令,但由于安装的帐户SQLAgent对文件所在的文件夹没有权限,因此访问被拒绝。我不希望该帐户拥有该文件夹的权限,如果可以的话,我希望使用代理帐户 我不认为这有多大帮助,但下面是我们用来运行sql命令的vb代码: Dim sql As String = "BULK INSERT Visa From '@file' With (ROWTERMINATOR = '\n', FIELDTERMINATOR = '\t', KEEPNULLS)"

我们有一些代码希望运行大容量插入sql命令,但由于安装的帐户SQLAgent对文件所在的文件夹没有权限,因此访问被拒绝。我不希望该帐户拥有该文件夹的权限,如果可以的话,我希望使用代理帐户

我不认为这有多大帮助,但下面是我们用来运行sql命令的vb代码:

        Dim sql As String = "BULK INSERT Visa From '@file' With (ROWTERMINATOR = '\n', FIELDTERMINATOR = '\t', KEEPNULLS)"
        sql = Replace(sql, "@period", _date)
        sql = Replace(sql, "@file", FullPath)
        DBExecute(sql)

如何使其工作?

正如硬代码所写,您可以对每个作业步骤使用RunAs。基本上,你必须:

  • 添加凭据-凭据意味着:“模拟此凭据”
  • 添加代理-代理意味着:凭据和操作类型(子系统)之间的链接,如运行SSIS包、运行命令等
  • 配置作业步骤以使用添加的代理
请注意,您使用的凭据必须具有访问文件夹的权限以及连接数据库的权限。如果在VB.NET代码中使用SQL Server登录而不是Windows身份验证,则不需要使用更高版本

您可以找到有关如何添加凭据和代理的分步说明

更新:你的评论对最初的问题有所启发。您不想更改作业步骤代理/凭据,而是想使用.NET模拟用户

您可以通过以下方式实现此目的:

  • 切换到SQL Server登录-危险,因为您必须在连接字符串中保存密码
  • 使用.NET代码模拟用户-检查文章:并检查此项以获得非常好的安全提示

正如硬代码所写,您可以对每个作业步骤使用RunAs。基本上,你必须:

  • 添加凭据-凭据意味着:“模拟此凭据”
  • 添加代理-代理意味着:凭据和操作类型(子系统)之间的链接,如运行SSIS包、运行命令等
  • 配置作业步骤以使用添加的代理
请注意,您使用的凭据必须具有访问文件夹的权限以及连接数据库的权限。如果在VB.NET代码中使用SQL Server登录而不是Windows身份验证,则不需要使用更高版本

您可以找到有关如何添加凭据和代理的分步说明

更新:你的评论对最初的问题有所启发。您不想更改作业步骤代理/凭据,而是想使用.NET模拟用户

您可以通过以下方式实现此目的:

  • 切换到SQL Server登录-危险,因为您必须在连接字符串中保存密码
  • 使用.NET代码模拟用户-检查文章:并检查此项以获得非常好的安全提示

既然您提到了SQL代理,我想这是作为作业运行的?您可以在作业中设置运行方式。对不起,不,我不是说它正在作为作业运行。我知道这是一种选择,但我想知道是否还有其他方法。我的意思是,当上面的代码在应用程序中运行时,运行SQLServer服务和SQLAgent服务的用户就是试图访问该文件夹的用户。所以我假设是SQL代理服务执行大容量插入。希望这更清楚一点。既然您提到了SQL代理,我想这是作为作业运行的?您可以在作业中设置运行方式。对不起,不,我不是说它正在作为作业运行。我知道这是一种选择,但我想知道是否还有其他方法。我的意思是,当上面的代码在应用程序中运行时,运行SQLServer服务和SQLAgent服务的用户就是试图访问该文件夹的用户。所以我假设是SQL代理服务执行大容量插入。希望这更清楚一点。是的,知道代理/凭证的事情,但想知道在调用查询时是否有办法模仿另一个用户,如我的示例代码所示。现在,SQL Agent/SQL Server服务用户正试图访问该文件夹,因此我假设SQL Agent是以这种方式运行大容量插入的用户。是的,知道代理/凭据的事情,但想知道在调用查询时是否有方法模拟另一个用户,如我的示例代码所示。现在,试图访问文件夹的是SQL Agent/SQL Server服务用户,因此我假设以这种方式执行大容量插入的是SQL Agent。