如何检查Windows NT用户是否有效?

时间:2018-11-26 14:46:00

标签: c# sql asp.net-mvc windows-nt

我正在通过Web应用程序创建数据库用户,如下所示:

        try
        {
            SetConnection(server);
            string sql =
                "USE [master]" +
                " CREATE LOGIN" + " [TP1\\" + user + "] FROM WINDOWS WITH DEFAULT_DATABASE=[master], " +
                "DEFAULT_LANGUAGE=[us_english] " +
                "EXEC sys.sp_addsrvrolemember @loginame = N'TP1\\" + user + "', @rolename = N'sysadmin'";


            _tableContext.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, sql);

        }
        catch (Exception e)
        {
            // log error
            throw e;
        }

它工作正常。

我正在测试应用程序,并键入WINDOWS-NT中不存在的名称,并得到以下错误:

  

找不到Windows NT用户或组“ TP1 \ MyName”。检查名字   再次。\ r \ n'TP1 \ MyName'不是有效的登录名,或者您没有   权限。\ r \ n将数据库上下文更改为“ master”

经过一段时间的研究,我发现我可以SELECT * FROM sysusers 但是,这仅向我显示是否已在该服务器上注册了用户。

我想知道是否可以通过某种方式检查用户名是否为有效的NT用户?

1 个答案:

答案 0 :(得分:0)

此问题将被标记为重复,但为清楚起见,我只想分享我的具体情况:

感谢@SteveDrake,我找到了答案here

我的实现

        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
            {
                user = "MyName";
                UserPrincipal up = UserPrincipal.FindByIdentity(
                    pc,
                    IdentityType.SamAccountName,
                    user);

                bool UserExists = (up != null);
            }

注意,我将ContextType更改为Domain