首页 文章

为什么我不能在SQL Server中添加WORKGROUP \ ..作为用户?

提问于
浏览
1

背景故事:

我花了20多个小时尝试通过Windows服务连接到我的Sql Server数据库,每次修复异常时我都会找到另一个 .

作为测试,我有

protected override void OnStart(string[] args)
    {
        EventLog.WriteEntry(ServiceName + " started");
        PageLoadTimer.Enabled = true;

        using(var conn = new SqlConnection("Data Source=DESKTOP-300NQR3\\SQLEXPRESS;Initial Catalog=MyDb;Integrated Security=True"))
        {
           string q = "INSERT INTO [dbo].[PageDocument] (Html, PageType, DateAdded, DateProcessed) VALUES ('<p>Hi!</p>', 0, GETDATE(), NULL)";
           using(var comm = new SqlCommand(q, conn))
           {
               conn.Open();
               comm.ExecuteNonQuery();
               conn.Close();
           }
        }
    }

然而,当我尝试启动我在EventViewer中看到的服务时

服务无法启动 . System.Data.SqlClient.SqlException(0x80131904):无法打开登录请求的数据库“LrcPageTask” . 登录失败 . 用户'WORKGROUP \ DESKTOP-300NQR3 $'登录失败 . at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity,SqlConnectionString connectionOptions,SqlCredential credential,Object providerInfo,String newPassword,SecureString newSecurePassword,Boolean redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,DbConnectionPool pool,String accessToken,Boolean applyTransientFaultHandling)at System System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池,DbConnection owningObject,DbConnectionOptions选项,DbConnectionPoolKey池)中的.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions选项,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,DbConnectionPool池,DbConnection owningConnection,DbConnectionOptions userOptions) . ..

顺便说一句,我从服务器资源管理器 - > VS中的连接字符串获取了连接字符串,我的Windows服务在 LocalSystem 下运行 .

我尝试通过安全 - >登录 - >新登录在SQL服务器中添加用户 WORKGROUP\DESKTOP-300NQR3$ ,但后来得到了错误

登录'WORKGROUP \ DESKTOP-300NQR3 $'创建失败

我只是发布一个链接到我的整个源代码https://github.com/jamkin/lrcvault/tree/master/BoardScanner

2 回答

  • 1

    对于非域/非网络上下文,对数据库的供应访问与运行该过程的标识相关 . 当计算机连接到域并访问另一台计算机上的数据库时,将使用domainname \ machinename $代替NT Authority \ Network Service .

    IIS中还有与应用程序池关联的特殊标识,因此,如果您使用的是应用程序池标识,则其形式为IIS APP POOL \ AppPoolname .

    我刚刚遇到了workgroup \ servername $错误,我遇到了一个错误,我被提供了一个错误,告诉我要添加一个我无法添加的登录,我认为这是一个错误 .

    这里有一些关于它如何适用于普通网络环境的参考资料 .

    http://msdn.microsoft.com/en-us/library/ms998292.aspx http://msdn.microsoft.com/en-us/library/ms998358.aspx

  • 0

    要使集成的Windows安全性在计算机之间工作,您需要域控制器和域上的帐户(所有计算机都知道)进行身份验证 . 如果您要在机器之间使用集成安全性,您应该: -

    • 创建域服务帐户 . 在域控制器上,打开“Active Directory用户和计算机”,选择“用户”,右键单击“新用户”,在下次登录时取消选中更改密码,选中“密码永不过期”,输入密码 . 它's up to you what groups the account is a member of in the domain, but it doesn' t需要成为任何组的成员 .

    • 更改Windows服务的登录以使用在步骤1中创建的域服务帐户 . 在托管Windows服务的计算机上,转到控制面板 - >管理工具 - >服务 - >您的服务 - >属性 - >登录 .

    • 确保托管Windows服务的计算机上的服务帐户具有login in as a service的权限 .

    • 将服务帐户的安全登录添加到SQL Server(服务器 - >安全 - >登录)

    • 为在步骤3中添加的sql用户(服务器 - > LrcPageTask - >安全 - >用户)添加用户到数据库,并且用户具有相应的角色成员身份

    如果您没有域控制器,则需要在同一台计算机上运行Windows服务和SQL Server,并使用本地用户帐户而不是域帐户,按照上述步骤,使用本地用户帐户而不是域帐户 .

    或者,不要使用集成安全性,使用SQL登录名和密码 .

相关问题