2017-10-13 4 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") 

つまり、あなたは] [ServerPermissionSetを生成しますold_loginのためのサーバーのアクセス許可を列挙するために、サーバーを依頼する必要がありサーバーオブジェクトのGrantメソッドに渡すことができます。

しかし、これらのアクセス許可をカプセル化するためにサーバーレベルの役割を使用せず、新しいログインに役割のメンバーシップを付与するだけの理由はありますか?

+0

お返事ありがとうございます。これは私を正しい道のりで送るために十分です。サーバーロールはこれを達成することができますが、既に権限を与えられているユーザーがおり、その権限を特定する必要があります。また、同じサーバーロールが設定されていない可能性のある別のサーバーにユーザーを移行するプロセスを作成しようとしています。 – geoffpasley

関連する問題