SMO:获取登录的服务器权限集 (ServerPermissionSet)

SMO : Get Server Permission Set for a login (ServerPermissionSet)

正在尝试为登录获取 ServerPermissionSet 并将其应用于新登录。似乎无法掌握 ServerPermissionSet 和 Server.Login 之间是否存在关系,或者是否有更好的方法来执行此操作。我可以用 tSQL 做到这一点,但我试图从 SMO 的角度来看这个问题。这是我要完成的一些 sudo 代码。

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

我正在使用代码示例 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 方法。

但我不得不问:是否有理由不使用服务器级角色来封装这些权限,而只是将角色的成员资格授予新登录名?