5

新しいSQLサーバーデータベースとログインを作成し、データベース所有者を新しく作成されたユーザーに設定するpowershellスクリプトを作成しました。これは成功です。ただし、同じスクリプト内でログインしようとすると、ログイン失敗の例外が発生します。SQL Server Management Studio を使用すると、ログインが機能します。

スクリプトは次のとおりです。

$server = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)")
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($server, 'TestDB')
$db.Create()

$login = new-object Microsoft.SqlServer.Management.Smo.Login("(local)", 'TestUser')
$login.LoginType = 'SqlLogin'
$login.PasswordPolicyEnforced = $false
$login.PasswordExpirationEnabled = $false
$login.Create('Password1')

$server = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)")
$db = New-Object Microsoft.SqlServer.Management.Smo.Database
$db = $server.Databases.Item('TestDB')
$db.SetOwner('TestUser', $TRUE)
$db.Alter()
Invoke-Sqlcmd -ServerInstance localhost -Database 'TestDB' -Username 'TestUser' -Password 'Password1' -Query "SELECT * FROM sysusers"

Start-Sleep(最大 5 分) を無駄に追加しようとしましたがRestart-Service mssqlserver -Force、 も無駄にしました。

何か案は?

4

3 に答える 3

1

これは、私が遭遇した問題に対する答えではなく、単なる回避策です。スクリプトは自動展開の一部として実行されています。スクリプト全体は「NT AUTHORITY\SYSTEM」ユーザー名で実行されるため、ログインの問題を回避するために、Integrated Security=true.

于 2013-10-04T16:05:18.707 に答える
0

あなたの最終行は次のように読むべきだと思います:

Invoke-Sqlcmd -ServerInstance '(local)' -Database 'TestDB' -Username 'TestUser' -Password 'Password1' -Query "SELECT * FROM sysusers"

'localhost'ではなく'(local)'を使用していることに注意してください。

于 2013-10-04T10:35:32.157 に答える