2017-10-13 8 views
0

Vous essayez d'obtenir un ServerPermissionSet pour un login et l'appliquer à un nouveau login. Impossible de comprendre s'il existe une relation entre ServerPermissionSet et Server.Login ou s'il existe une meilleure façon de procéder. Je peux le faire avec TSQL, mais j'essaie de regarder cela du point de vue SMO. Voici un code sudo sur ce que j'essaie d'accomplir.SMO: obtention de l'autorisation serveur définie pour un login (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

Pourquoi pas tsql? Pouvez-vous exécuter n'importe quel code tsql pour faire votre logique et utiliser 'Invoke-Sqlcmd' pour obtenir le résultat? – arjabbar

Répondre

1

J'utilise l'exemple de code here pour informer ma réponse:

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

C'est, vous devez demander au serveur d'énumérer les autorisations de serveur pour old_login qui va générer un ServerPermissionSet [] que vous pouvez ensuite passer à la méthode Grant sur l'objet serveur.

Mais je dois demander: existe-t-il une raison pour ne pas utiliser un rôle au niveau du serveur pour encapsuler ces autorisations et simplement accorder l'appartenance au rôle à la nouvelle connexion?

+0

Merci pour la réponse. Cela suffit pour m'envoyer le bon chemin. Les rôles de serveur peuvent accomplir ceci, mais il y a des utilisateurs qui ont des droits qui leur ont déjà été accordés et j'ai besoin d'identifier ces droits. Aussi j'essaye de créer un processus qui transférera des utilisateurs à un autre serveur qui pourrait ne pas avoir le même rôle de serveur configuré. – geoffpasley