SQLS 사용 권한을 연결 문자열에 지정한 ID와 일치 시키려면 PowerShell 스크립트 (일반적으로는) .데이터베이스 사용 권한은 연결 문자열에 지정된 문자열 대신 PowerShell 스크립트를 실행하는 사람과 일치합니다.
예를 들어, "TestIDRestricted"는 업데이트 할 수없는 "MyTable"이라는 테이블이 있습니다.
나는 "TestIDRestricted"대로 Microsoft SQL Server 관리 Studio에 로그온하고 다음 쿼리
select MyField
from MyTable
where ID = 2
를 실행하고 나는 그것이 "4"반환을 참조하십시오. 지금 업데이트하려고 :
update MyTable
set MyField = 5
where ID = 2
예상대로, 나는 다음과 같은 오류 결과를 얻을 : 내가 기대
$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()
:
Msg 229, Level 14, State 5, Line 1
The UPDATE permission was denied on the object 'MyTable', database 'mydb', schema 'dbo'.
다음 나는 다음과 같은 UpdateProblem.ps1 PowerShell 스크립트를 실행합니다 이 업데이트는 연결 문자열에 통합 보안을 지정하지 않으므로 실패합니다. 나는 "TestIDRestricted"대로 Microsoft SQL Server 관리 Studio에 다시 로그인 할 때 그러나 다시 나는 그것이 "5"를 반환 참조 다음 쿼리
select MyField
from MyTable
where ID = 2
를 실행합니다. 따라서 업데이트가 실패 할 것으로 예상하더라도 업데이트가 성공했습니다. SQL 연결 권한이 연결 문자열에서 사용하는 ID와 관련된 보안 대신 통합 보안을 사용하여 내 ID를 기반으로하기 때문에 성공한 이유를 알 수 있습니다.
통합 보안과 함께 사용되는 ID 사용 권한 대신 연결 문자열에 지정한 ID와 관련된 사용 권한을 스크립트에서 어떻게 사용할 수 있습니까?
내가 사용하는 경우 "Trusted_Connection = 예", 즉이었다 단락 통합 보안을 "true", "false"또는 "SSPI"로 설정했는지 여부에 관계없이 연결 문자열에 지정된 사용자와 암호 및 통합 보안 사용을 강제합니다. 진짜 문제는 암호였습니다 : 물건에 나사가 끼는 "$"표시가있었습니다. "$"는 따옴표 안에도 변수를 나타 내기 때문입니다. 특수 문자를 "'"로 이스케이프 처리해야합니다. 이제 적절한 사용 권한을 사용합니다. – user2267792