【问题标题】:How to check if windows NT user is valid? [duplicate]如何检查 Windows NT 用户是否有效? [复制]
【发布时间】:2018-11-26 14:46:00
【问题描述】:

我正在通过这样的 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已将数据库上下文更改为“主”

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

我想知道是否有办法检查用户名是否为有效的 NT 用户?

【问题讨论】:

  • 听起来像是应该在操作系统级别进行的那种验证,而不是查询您的数据库。
  • @SteveDrake 谢谢!这样做的伎俩,但稍作修改。

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


【解决方案1】:

这个问题将被标记为重复,但为了清楚起见,我只想分享我的具体场景:

感谢@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

【讨论】:

    猜你喜欢
    • 2014-12-19
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2021-03-21
    • 2013-04-18
    相关资源
    最近更新 更多