1

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와 관련된 사용 권한을 스크립트에서 어떻게 사용할 수 있습니까?

답변

1

Trusted_Connection을 TRUE로 설정하고 있습니다. 이것은 연결 문자열에 지정된 사용자가 아닌 현재 사용자의 자격 증명으로 연결하고 있다는 것을 의미합니다. 시도 :

$ConnectionString = "Server=MyServer\MSSQL2012;Database=mydb;User Id= TestIDRestricted;Password=secretpasswd;" 
$ConnectionString = $ConnectionString + "Trusted_Connection = no;Persist Security Info=False" 
+0

내가 사용하는 경우 "Trusted_Connection = 예", 즉이었다 단락 통합 보안을 "true", "false"또는 "SSPI"로 설정했는지 여부에 관계없이 연결 문자열에 지정된 사용자와 암호 및 통합 보안 사용을 강제합니다. 진짜 문제는 암호였습니다 : 물건에 나사가 끼는 "$"표시가있었습니다. "$"는 따옴표 안에도 변수를 나타 내기 때문입니다. 특수 문자를 "'"로 이스케이프 처리해야합니다. 이제 적절한 사용 권한을 사용합니다. – user2267792

0

당신은 아마 두 번째 줄 주석 수 :

$ConnectionString = "Server=MyServer\MSSQL2012;Database=mydb;User Id= TestIDRestricted;Password=secretpasswd;" 
' $ConnectionString = $ConnectionString + "Trusted_Connection = yes;Persist Security Info=False" 

는 (?이 VB가)

+0

PowerShell, VB가 아닙니다. 다른 게시물에 대한 내 답장에서 말한 것처럼 "Trusted_Connection = yes"는 실제로 문제입니다. 나는 내가 모르는 사이에 내가 지정한 사용자를 "단락"시키는 데 사용했다. 진짜 문제는 암호였습니다 : 물건에 나사를 끼워 넣는 "$"표시가있었습니다. PowerShell의 변수 인 "$"는 따옴표 안에 들어 있기 때문에 그럴 것 같습니다. 특수 문자를 "'"로 이스케이프 처리해야합니다. – user2267792