我有一个连接到database
并发送一些电子邮件的Console Application
(C#
)。 当用户在Visual Studio
中调试时,它运行良好,但是当我将其复制到服务器并作为服务帐户运行时domainAcctNotWorking
出现以下错误。如果我将运行计划任务的帐户切换到我的domainlogin
它工作正常。 为什么服务帐户尝试以NT AUTHORITYANONYMOUS LOGON
身份登录,以及如何解决此问题的任何想法?domainAcctNotWorking
是服务器上的管理员,在SQL Server
中具有适当的权限。
System.Data.Entity.Core.EntityException:底层提供程序 打开时失败。---> System.Data.SqlClient.SqlException:无法打开 登录请求的数据库"我的数据库名称"。登录失败。 用户"NT 颁发机构\匿名登录"登录失败。
Connection String: add name="ApplicationEntities" connectionString="metadata=res://*/ApplicationEntities" .csdl|res://*/ApplicationEntities" .ssdl|res://*/ApplicationEntities" .msl;provider=System.Data.SqlClient;provider connection string="data source=SQL-Server-Name;initial catalog=DatabaseName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"
简单,Integrated Security=True
意味着当前用户将尝试使用其Windows身份登录到sql服务器。 您必须 1) 为要运行的服务创建一个用户,并将服务配置为在此用户下运行它,然后向此用户授予数据库中的权限,或者 2) 使用用户名/密码创建 sql 登录名并在连接字符串中使用该用户名/密码。
下面是了解如何在用户帐户下运行服务的起点
以域帐户身份运行 Windows 服务所需的最低权限
这是创建 SQL Server 登录名的起点
https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-login
虽然,老实说,这似乎过于复杂。 只需使用 SSMS 登录到服务器,然后右键单击"安全"文件夹并创建新的登录名。 这很清楚。 然后,在数据库中为该登录名创建一个用户(相同的过程,但安全文件夹位于数据库下)。 不太难。 然后切换Itengrated Security=True
以User Id=myUsername;
Password=myPassword;
我的偏好是在计算机上创建一个用户帐户,除了运行服务所需的权限之外,该帐户没有其他权限,然后在sql Server中为此帐户创建一个登录名和用户,该帐户也被锁定为运行所需的最低权限。 如果您以前从未这样做过,正确执行此操作可能会相对复杂。 然而,这是有益的,并将获得宝贵的经验,您将在职业生涯中发挥巨大作用。
至少,如果使用快速且脏的SQL登录方法,请加密连接字符串:https://msdn.microsoft.com/en-us/library/89211k9b(v=vs.110).aspx