我正在使用Invoke-Sqlcmd在Powershell中的数据库中执行SQL文件。该SQL文件具有一些SQL过程(如“ USP_UpdateUsers @sss”)和一些直接查询(如“插入表....”)。 我需要的-当使用Powershell执行此sql文件时,过程应该成功执行,但是不应执行诸如“插入表....”之类的直接查询,它应该给出错误。
只能为SQL过程执行创建SQL角色,但我不希望任何单独的SQL角色用于执行此过程。 请让我知道是否可以使用Invoke-Sqlcmd处理这种情况?
我正在使用这一行代码
version
0 10.5
1 10.2
2 10.0
3 9.0
4 9.18
5 10.00
m = df.version.str.contains(r'\b\d+.0\b')
df[~m]
Out[54]:
version
0 10.5
1 10.2
4 9.18
5 10.00
答案 0 :(得分:0)
要限制用户不执行语句,可以执行以下步骤:
CREATE ROLE ScriptExecutor;
GRANT CREATE PROCEDURE TO ScriptExecutor
GRANT CREATE VIEW TO ScriptExecutor
ALTER ROLE ScriptExecutor ADD MEMBER UserName
Invoke-Sqlcmd -ServerInstance $SQLServer -Database $db3 -InputFile $_.FullName -username $username -password $password -verbose *> $outputFileName
您可以拥有一个Powershell脚本,该脚本循环遍历SQL文件,并且仅在没有INSERT
语句的情况下才执行该文件。您可以外推以满足其他DELETE
,UPDATE
之类的DML语句。
foreach($file in Get-childitem C:\dev -Filter *.sql)
{
if((select-string -Path $file -Pattern "INSERT") -ne $null)
{
"The file $file contains INSERT Statement. So, will not be executed" | out-File $outputFileName -Append
}
else
{
Invoke-Sqlcmd -ServerInstance $SQLServer -Database $db3 -InputFile $File -username $username -password $password -verbose *> $outputFileName
}
}