无法使用登录名和密码访问sql数据库,C#应用程序

时间:2013-11-26 21:06:58

标签: c# sql-server entity-framework windows-services database-connection

我在C#中编写Windows服务,在其中我无法连接到数据库。 这是我最近提出的问题: SqlException:无法打开登录请求的数据库“path \ db.mdf”。登录失败。用户'NT AUTHORITY \ SYSTEM'

登录失败

到目前为止我做了什么:

1)在服务器属性中设置标志“使用Sql Server和Windows进行身份验证” 2)为sql server创建登录。使用该登录将用户添加到数据库。 3)为此登录添加了所有可用角色。

第1部分: 如果我使用Sql Server 2012身份验证连接到服务器,而不是尝试附加某个文件夹中的数据库,我得到:

CREATE FILE encountered operating system error 5(Access is denied.) 
while attempting to open or create the physical file 'path\db.mdf'. 
(Microsoft SQL Server, error: 5123)

但是我可以附加数据库,如果它在这个文件夹中:

C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA

那是在SSMS中。

第2部分: 尝试从Visual Studio 2012附加数据库时我会得到什么:

The attempt to attach to the database failed with the following information:  
Login failed for user test_user

如果我在代码中使用此连接字符串:

<add name="ConnectionName"
         connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
     provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;
     attachdbfilename=&quot;path\db.mdf&quot;;
     connect timeout=30;
     User Id=test_user;Password=1;
     MultipleActiveResultSets=True;
     App=EntityFramework'"
         providerName="System.Data.EntityClient" />

我从我的Windows服务应用程序(用C#编写)获得以下异常:

EntityException: The underlying provider failed on open. 

Inner excetion: SqlException: Login failed for user test_user.

我确定我正确输入了登录信息。无论数据库是否在MSSQL \ DATA文件夹中,我都会收到此错误。

访问计算机上的某些文件夹的权限有问题,但我不知道为什么,我已经为此用户授予了所有权限!

此外,一次计算机重启后,Windows服务正常启动并能够连接到数据库,但一段时间后它失去了这种能力。我不知道为什么。

请帮助,我在过去的4天里一直在努力解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:0)

如果您正在编写应用程序,则必须决定如何处理安全性。

SQL Server中有两种安全性解决方案。

1 - AD安全 - SQL Server是否会通过AD处理它?确保连接字符串使用可信安全性。确保将员工AD帐户添加为登录/用户,并将默认数据库设置为应用程序,而不是主数据库。请参阅我关于制作数据库的文章。

http://craftydba.com/?p=656

2 - 标准安全性 - 如果应用程序要处理它,您需要使用标准安全性。创建应用程序帐户(登录/用户)。

接下来,创建一个具有不同安全级别的内部用户表。您将需要使用应用程序角色来强制执行不同的安全级别。

总的来说,您可能希望使用模式来分离和保护数据库对象。

http://craftydba.com/?p=1532

看起来你有一些阅读和家庭工作要做......