2017-10-13 102 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