2

接続しているユーザーが SQL Server 管理者 (sysadmin ロール) であるかどうかを確認したいのですが、これが最善の方法であるかどうか疑問に思っています。

private static bool IsUserAdmin(Server server)
{
   Login login = server.Logins[server.ConnectionContext.Login];
   return login.IsMember("sysadmin");
}

SQLDMO.SQLServerSQL DMO (SMO の前身である COM ベース) には、と呼ばれるオブジェクトにぶら下がるプロパティがありましたIsServerAdmin。SMO に似たようなものがあるのだろうかと思っていますが、見つけられなかったのですか?

4

1 に答える 1

1

sysadminはい、実際には、現在のログインが SQL Server 管理者 (ロールのメンバー) であるかどうかを確認する最良の方法だと思います。

私は SMO の経験があり、 objectに関連する SMO ドキュメントIsServerAdminにリストされているようなプロパティがないため、これよりも優れた方法はありませんでした。Login

必要に応じて、T-SQL クエリを実行して、どの SQL Server ログインがsysadminロールのメンバーであるかを知ることができます (C# コードと同じ結果が得られます)。

SELECT p.name AS [Name] ,r.type_desc,r.is_disabled,r.create_date , r.modify_date,r.default_database_name
FROM
sys.server_principals r
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals p ON
p.principal_id = m.member_principal_id
WHERE r.type = 'R' and r.name = N'sysadmin'
于 2014-08-08T15:35:04.413 に答える