我在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="path\db.mdf";
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天里一直在努力解决这个问题。谢谢!
答案 0 :(得分:0)
如果您正在编写应用程序,则必须决定如何处理安全性。
SQL Server中有两种安全性解决方案。
1 - AD安全 - SQL Server是否会通过AD处理它?确保连接字符串使用可信安全性。确保将员工AD帐户添加为登录/用户,并将默认数据库设置为应用程序,而不是主数据库。请参阅我关于制作数据库的文章。
2 - 标准安全性 - 如果应用程序要处理它,您需要使用标准安全性。创建应用程序帐户(登录/用户)。
接下来,创建一个具有不同安全级别的内部用户表。您将需要使用应用程序角色来强制执行不同的安全级别。
总的来说,您可能希望使用模式来分离和保护数据库对象。
看起来你有一些阅读和家庭工作要做......