Powershell访问SQL表 - 权限问题?

时间:2017-07-07 16:47:57

标签: sql-server powershell

我有一个通过IDE开发的Powershell脚本。它在一个小库中使用一些通用函数来获取作为dataTable加载的SQL表结构,然后在使用SQLBulkCopy将数据表行写入数据库之前填充数据表行。脚本和帮助程序函数文件驻留在网络驱动器上。

通过IDE工作就像一个魅力,并通过日志文件输出我看到它正在使用我的网络凭据来执行。

现在我希望将脚本作为SQL代理作业的作业步骤执行。作业以windows用户SQLService的形式执行脚本。我已确保此用户与我自己具有相同的脚本位置网络权限。我还确保SQLService Windows帐户在数据库中具有与我相同的权限。

当脚本从SQL代理作业执行时,它无法"看到"数据库表,以便从中获取结构。特别是脚本在尝试访问数据集$ ds时失败。从IDE运行时,该变量包含一个空数据集 - 这是所需的结果。从SQL代理作业运行时,该变量似乎是默认整数。

我已经尝试了很多东西来实现这个目标。在Powershell中,我尝试在主脚本文件中移动函数,在每个函数中添加Set-ExecutionPolicy UnRestricted,将$ Sqlconnection Security设置为trusted = yes等。在SQL Server中,我添加了SQLService windows用户作为数据库所有者。 DB有问题。

同样,该问题特定于从SQL代理作业运行,它在通过IDE运行时按预期工作。任何建议当然值得赞赏。

问题功能如下所示。

$query = "Select top 1 * from dbo.Mytable where 1=2".
$SqlConnection = "Server=Myserver; Database=Mydb; Integrated Security=SSPI;Connect Timeout=0"


function Get-SQLDataSet()
{
    param (
        [System.Data.SqlClient.SQLConnection]$sqlConnection,
        [string]$query
    )

    $ds = New-Object System.Data.DataSet "dsname"
    $adap = new-object System.Data.SqlClient.SqlDataAdapter ($query, $sqlConnection)

    try
    {
        $adap.Fill($ds) 
    }
    catch
    {
        $err = $_.exception.errorRecord
        $err >> $InternalLogLocation 
    }
    return $ds
}

0 个答案:

没有答案