【问题标题】:how to access localDB from Windows Service如何从 Windows 服务访问 localDB
【发布时间】:2014-03-16 20:18:36
【问题描述】:

我需要在本地使用数据库。我已经使用 Visual Studio 2012 在 (LocalDB)\v11.0 服务器中创建了数据库。从例如连接时一切正常。控制台应用程序。但我的应用程序是 Windows 服务。尝试通过以下方式连接到我的数据库输出:

"... The login failed.Login failed for user 'NT AUTHORITY\SYSTEM"

有什么解决办法吗?也许我应该考虑为它设置其他数据库服务器?如果是,如何设置使其仅在本地可见?

【问题讨论】:

    标签: c# sql .net sql-server


    【解决方案1】:

    所以我自己找到了解决方案,如何从作为本地系统运行的 Windows 服务连接 (localdb) 的实例:

    我用过这篇文章: http://technet.microsoft.com/pl-pl/library/hh212961.aspx http://dba.fyicenter.com/faq/sql_server_2/Verifying_a_Login_Name_with_SQLCMD_Tool.html http://social.technet.microsoft.com/wiki/contents/articles/4609.troubleshoot-sql-server-2012-express-localdb.aspx

    所以我分享了我的 localdb(如第 1 篇文章中所述),问题是我无法连接名为 pipe np:// 的 sqlcmd。我在第 3 篇文章中找到了答案:

    使用 sqlcmd 时,请确保您使用的是 SQL Server 2012 版本(在 %Program Files%\Microsoft SQL 中找到 服务器\110\工具\Binn)。如果您有以前版本的 sqlcmd 安装,从命令行单独调用 sqlcmd 很可能 使用旧版本(不支持 localdb),因为旧路径 首先出现在您的 PATH 环境变量中。这可能是一个好 想法,一般来说,手动调整你的 PATH 环境变量,所以 110个版本先捡起来。

    这个小信息实际上是至关重要的;)

    所以我创建了用户:user,密码:pass321!@

    在我的 Windows 服务中,我的 Sql connectionString 看起来:

    "Data Source=(localdb)\\.\\MyInstanceShared;Integrated Security=false;User Id=user;Password=pass321!@"
    

    将集成安全设置为 false 值也很重要。

    也许它会对某人有所帮助。

    【讨论】:

    • 为了避免附加 / 为 C# 字符串转义连接字符串引起的混淆,应如下所示(使用单个 `\`): Data Source=(localdb)\.\MyInstanceShared;Integrated Security=false;用户 ID=user;Password=pass321!@
    【解决方案2】:

    您的连接字符串可能正在使用当前的 Windows 用户帐户(运行服务的帐户可能是错误中看到的帐户)连接到数据库(并且该用户帐户没有访问权限)。 我要做的是更改数据库以允许“混合身份验证”(这也意味着 SQL 用户和 Windows 用户),然后我将创建一个新用户,为该用户分配使用您的应用程序所需的权限,然后使用来自 Windows 服务的连接字符串中的用户名和密码。 您也可以保留数据库原样并从 Windows 添加用户“系统”,然后为其分配所需的权限。您可以向用户添加“dbo”配置文件以使其快速运行(但稍后在发布产品之前检查安全性)。

    【讨论】:

    • 你能告诉我如何从 Visual Studio 管理用户吗?
    • 你应该有SQL Server管理工作室,实际上你是如何创建你正在使用的数据库的?我不知道您是否可以从 Visual Studio 管理安全性,但从 SQL 管理工作室我相信您可以。只需使用管理工作室连接到您的本地服务器,然后打开安全选项卡/文件夹并将“SYSTEM”用户添加到您的数据库。检查这些链接,它们可能会有所帮助:stackoverflow.com/questions/360141/…msdn.microsoft.com/en-us/evalcenter/hh230763
    【解决方案3】:

    我认为您需要允许远程连接到您的 SqlServer。

    在 Sql Server 配置管理器的 SQL 网络配置下,选择您的服务器并检查 TCP/IP 是否已启用。

    在我的例子中,双击 TCP/IP,转到底部的“IPAll”并将动态端口设置为空,并将 TCP 端口设置为 1433。

    让我知道是否足够。

    【讨论】:

    • 但我不想启用到数据库的远程连接。
    • Windows 服务使用 tcp/ip 协议连接到数据库。即使你在同一台机器上..
    • 不确定,但是当您启动 Web 服务时,它使用的是 ASP.Net 开发人员服务器,这对于您的 SQL Server 而言不被视为“本地”。现在对你有用吗?
    • 它的 windows 服务不是 web 服务。我读到在 express localdb 上启用 txp 不是一个好习惯
    • 但是你测试过这个设置吗?我使用 3 种类型的应用程序:WPF、Windows 服务、Web 服务。所有连接都使用相同的类,但如果未启用 TCP/IP,它将不起作用。我使用 SQL Server 而不是 Express。
    猜你喜欢
    • 2011-02-17
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多