2

我想检查连接的用户是否是 SQL Server 管理员(以 sysadmin 角色)并想知道这是否是最好的方法?

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

在 SQL DMO(SMO 的基于 COM 的前身)中,有一个挂起SQLDMO.SQLServer对象的属性,称为IsServerAdmin. 我想知道 SMO 中是否有类似的东西,但我只是没能找到它?

4

1 回答 1

1

是的,实际上我认为你的方法是检查当前登录是否是 SQL Server 管理员(然后是sysadmin角色成员)的最佳方法。

我对 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 回答