SQL SMO - 检查用户是否为服务器管理员

时间:2014-08-08 14:59:15

标签: c# .net sql-server smo sqldmo

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

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

在SQL DMO(基于COM的SMO前身)中,有一个属性挂起了名为SQLDMO.SQLServer的{​​{1}}对象。我想知道SMO中是否有类似的东西,但我还没有找到它?

1 个答案:

答案 0 :(得分:1)

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

我对SMO有一些经验,我找不到比这更好的方法,也因为没有类似于SMO documentation related to the Login object中列出的IsServerAdmin的属性。

如果需要,您可以执行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'