2017-10-13 85 views
0

嘗試獲取ServerPermissionSet以進行登錄並將其應用於新登錄。似乎無法理解ServerPermissionSet和Server.Login之間是否存在關係,或者是否有更好的方法來執行此操作。我可以用tSQL做到這一點,但我試圖從SMO的角度來看待這個問題。這是我想要完成的一些sudo代碼。SMO:獲取登錄服務器權限(ServerPermissionSet)

$server = new-object ('Microsoft.SqlServer.Management.Smo.Server') 
"my_server" 
$sps = new-object -TypeName 
Microsoft.SqlServer.Management.SMO.ServerPermissionSet 
$newlogin = new-object ('Microsoft.SqlServer.Management.Smo.Login') $Server, 
"new_login" 
$oldlogin = $server.Logins["old_login"] 
// THIS PART OBVIOUSLY DOESN'T WORK 
$newlogin.Create("password") 
$sps = $oldlogin.ServerPermissionSet 
$server.Grant($sps,"new_login") 
+0

爲什麼不tsql?你可以運行任何tsql代碼來執行你的邏輯並使用'Invoke-Sqlcmd'來獲得結果嗎? – arjabbar

回答

1

我使用的代碼示例here通知我的回答:

$server = new-object ('Microsoft.SqlServer.Management.Smo.Server') 
"my_server" 
$newlogin = new-object ('Microsoft.SqlServer.Management.Smo.Login') $Server, 
"new_login" 

$newlogin.Create("password") 
$sps = $server.EnumServerPermissions("old_login") 
$server.Grant($sps,"new_login") 

也就是說,你要問服務器枚舉服務器權限OLD_LOGIN,這將產生一個ServerPermissionSet []然後您可以將其傳遞給服務器對象上的Grant方法。

但我不得不問:有沒有理由不使用服務器級角色來封裝這些權限,而只是將角色中的成員資格授予新登錄名?

+0

感謝您的回覆。這足以讓我走上正確的道路。服務器角色可以實現這一點,但有些用戶已經授予他們權限,我需要確定這些權限。此外,我正在嘗試創建一個將用戶轉移到可能沒有配置相同服務器角色的另一臺服務器的進程。 – geoffpasley