本节书摘来自异步社区出版社《PowerShell V3—SQL Server 2012数据库自动化运维权威指南》一书中的第2章,第2.11节,作者:【加拿大】Donabel Santos,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.11 修改数据库所有者
本方案展示了如何用编程方式修改SQL Server数据库所有者。
2.11.1 准备
在这个任务中,假设你已经创建了TestDB数据库,已经在你的测试虚拟机VM中创建了Windows帐号QUERYWORKSaterra。
如果还没有,按照创建数据库方案中的步骤创建一个TestDB数据库。
2.11.2 如何做…
1.通过“Start | Accessories | Windows PowerShell | Windows PowerShell ISE”打开PowerShell控制台。
2.导入SQLPS模块,创建一个新的SMO服务器对象。
#import SQL Server module
Import-Module SQLPS –DisableNameChecking
#replace this with your instance name
$instanceName = "KERRIGAN"
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server
-ArgumentList $instanceName
3.添加如下脚本并运行。
#create database handle
$dbName = "TestDB"
$db = $server.Databases[$dbName]
#display current owner
$db.Owner
#change owner
#SetOwner requires two parameters:
#loginName and overrideIfAlreadyUser
$db.SetOwner("QUERYWORKS\aterra", $true)
#refresh db
$db.Refresh()
#check Owner value
$db.Owner
4.做好检查。
(1)打开SSMS。
(2)展开到TestDB数据库。
(3)右键选择“Properties”。
(4)选择“Options”。
2.11.3 如何实现…
用PowerShell修改数据库所有者是一个简短而直接的任务。首先,创建一个数据库句柄。
唯一的其他操作是调用Microsoft.SqlServer.Management.Smo.Database类的SetOwner方法,它需要两个参数:
LoginName
OverrideIfAlreadyUser
OverrideIfAlreadyUser选项可被设置为true或false。如果设置为true,意味着当前登录的用户已经在目标数据库中存在了,该用户将被删除和重建作为所有者。如果设置为false,登录用户已经匹配到了该数据库,那SetOwner方法将输出错误。
2.11.4 可参阅…
修改数据库属性方案