Powershell SQL创建数据库,用户并将用户添加到所有者

时间:2018-09-18 17:25:29

标签: sql sql-server powershell

我对Powershell还是很陌生,我试图创建一个脚本来创建sql数据库,创建一个具有密码的用户,然后将该用户添加为新创建的数据库的所有者。该脚本将创建数据库,但是当我进入用户时,那里没有看到“ TestUser”。

#load assemblies
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
#Need SmoExtended for backup
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
$server = New-Object Microsoft.SqlServer.Management.Smo.Server("(local)")
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($server, 'TestDB2')
$db.Create()

$login = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Login($server, 'TestUser')
$login.LoginType = 'SqlLogin'
$login.PasswordExpirationEnabled = $false
$login.Create('PasswordGoesHere')



$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()

2 个答案:

答案 0 :(得分:2)

您不会在数据库中看到该用户,因为数据库的所有者不能是数据库中的用户。如果您尝试使数据库中的现有用户成为所有者,则可以在SSMS中看到此内容-您将收到一条错误消息,“建议的数据库所有者已映射为该数据库上的用户”。

enter image description here

使用powershell时,不会抛出此消息,它只是取消了用户在幕后的映射-因此,如果您以前在数据库中看到过该用户,则一旦拥有该用户,便不再需要。尽管您从未在数据库中创建用户,但这并不是您所经历的。您只是看到了预期的行为。

答案 1 :(得分:0)

使用TSQL和字符串插值进行SQL Server管理几乎总是比SMO简单。 EG:

$userName = "SomeUser"
$dbName = "newdb"
$password = "*******"

$sql = @"
create login [$userName] with password = '$password';
create database [$dbName];
alter authorization on database::[$dbName] to [$userName];
"@

$sql
invoke-sqlcmd $sql