SQL Server のアクセス許可を、たまたま PowerShell スクリプトを実行しているユーザー (通常は私) のアクセス許可ではなく、接続文字列で指定した ID に一致させたいと考えています。
たとえば、「MyTable」というテーブルがありますが、これは更新できますが、「TestIDRestricted」では更新できません。
「TestIDRestricted」として Microsoft SQL Server Management Studio にログオンし、次のクエリを実行します。
select MyField
from MyTable
where ID = 2
「4」を返すことがわかります。私は今、更新しようとしています:
update MyTable
set MyField = 5
where ID = 2
予想どおり、次の失敗結果が得られます。
Msg 229, Level 14, State 5, Line 1
The UPDATE permission was denied on the object 'MyTable', database 'mydb', schema 'dbo'.
次に、次の UpdateProblem.ps1 PowerShell スクリプトを実行します。
$ConnectionString = "Server=MyServer\MSSQL2012;Database=mydb;User Id= TestIDRestricted;Password=secretpasswd;"
$ConnectionString = $ConnectionString + "Trusted_Connection = yes;Persist Security Info=False"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $ConnectionString
$sqlConnection.Open()
$sqlCommand = $sqlConnection.CreateCommand()
$updateSQL ="update MyTable set MyField = 5 where ID = 2"
$sqlCommand.CommandText = $updateSQL
write-host $updateSQL
#following command should fail
$sqlCommand.ExecuteNonQuery()
$sqlConnection.close()
接続文字列で統合セキュリティを指定していないため、この更新プログラムは失敗すると予想されます。しかし、Microsoft SQL Server Management Studio に「TestIDRestricted」として再度ログオンし、次のクエリを再度実行すると、
select MyField
from MyTable
where ID = 2
「5」を返すようです。そのため、失敗すると予想していましたが、更新は成功しました。私が知る限り、成功した理由は、接続文字列で使用する ID に関連付けられたセキュリティではなく、統合セキュリティを使用する ID に SQL 権限が基づいているためです。
統合セキュリティに従っているように見える自分の ID のアクセス許可を使用する代わりに、接続文字列で指定した ID に関連付けられたアクセス許可を使用するようにスクリプトを取得するにはどうすればよいですか?