2013-10-04 4 views
4

Я написал сценарий powershell, который создает новую базу данных SQL Server и логин, а затем устанавливает владельца базы данных только что созданному пользователю. Это успешно. Однако при попытке входа в один и тот же скрипт я получаю ошибку с ошибкой входа в систему. Если я использую SQL Server Management Studio, логин работает.Создайте пользователя SQL Server с помощью Powershell

Вот сценарий:

$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, также безрезультатно.

Любые идеи?

+0

Должно быть больше информации в порядке исключения, чем просто «login failed» - можете ли вы добавить больше текста из исключения? –

+0

ОШИБКА: Invoke-Sqlcmd: Ошибка входа для пользователя 'TestUser'. –

+0

Этот скрипт работал на моем локальном экземпляре dev (с небольшим изменением для именованного экземпляра). У вас есть доступ к журналам SQL Server? Если ваш сервер настроен на аудит неудачных входов в систему, журналы будут содержать более подробную информацию, чем возвращается клиенту. искать ошибку 18456 и т. д. Похоже, у вас есть обход, но журналы могут помочь, если вам все еще интересно. – Matt

ответ

0

Я думаю, что ваша последняя строка должна прочитать:

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

Обратите внимание на использование '(местный)' вместо 'локальный'.

+0

Пробовал это безрезультатно. –

1

Это не ответ на проблему, с которой я столкнулся, просто работаю. Скрипт запускается как часть автоматического развертывания, общие сценарии запускаются под именем пользователя NT AUTHORITY \ SYSTEM, поэтому, чтобы обойти мою регистрацию, я просто использую Integrated Security=true.

Смежные вопросы