我们将应用程序的一部分作为Windows服务运行,它需要能够访问DSN才能通过ODBC导入。但是,通过试验和错误发现它可以访问的DSN似乎有很多限制。例如,似乎它不能 1.访问系统DSN,除非运行该服务的帐户具有管理员权限。 (尝试连接时出现Access Denied错误) 2.访问由不同用户创建的用户DSN(这个是可以理解的)。 3.通过网络访问文件DSN
我已经读过文件DSN的目的是允许其他计算机使用它来连接,但是我似乎无法使其工作。
所有人都知道,或者知道在哪里可以找到使用Windows服务时访问DSN的所有规则和限制。 感谢
答案 0 :(得分:1)
我认为你自己已经发现了三条主要规则。 : - )
除非您可能不需要服务帐户的管理员权限。 IANANA(我不是网络管理员),但您的服务帐户可能只需要对其中一个ODBC文件或目录进行读取访问。
答案 1 :(得分:1)
这介于#1和#2之间:有时也需要正确的文件权限。我曾经在连接到DB2 DSN的Vista机器上遇到麻烦,因为无论出于何种原因(可能写出临时文件;虽然我不知道为什么它会在这个位置做这样的事情而不是用户特定的) ,驱动程序需要对IBM安装了客户端二进制文件和库的目录的写访问权限,该目录由管理员完成并位于C驱动器的根目录中。
答案 2 :(得分:0)
您无法使用服务连接到映射的驱动器。映射驱动器必须与称为桌面堆的内存交互,后者跟踪桌面上的图标。服务无权访问该内存。如果必须使用dsn创建一个systemdsn。更好的方法是使用连接字符串并将其存储在app.config中,并使用加密api加密用户名和密码。