Coldfusion 9无数据源连接MSSQL 2008 Windows身份验证

3

更新:

尽管原问题是关于Windows身份验证的,但任何连接方法都可以。只要不需要创建DSN。


我正在尝试使用Windows身份验证连接我的数据库。以下是代码。请建议。谢谢。

<cfscript>
  classLoader = createObject("java", "java.lang.Class");
  classLoader.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
  dm = createObject("java","java.sql.DriverManager");
  dburl = "jdbc:sqlserver://192.168.3.150:1433;databasename=RsDB;integratedSecurity=true";
  con = dm.getConnection(dburl,"", "");
  st = con.createStatement();
  rs = st.ExecuteQuery("SELECT top 10 * FROM pa (nolock)");
  q = createObject("java", "coldfusion.sql.QueryTable").init(rs);   
</cfscript>

<cfoutput query="q">
  email = #email#<br />
</cfoutput>

错误:

处理请求时发生错误,此驱动程序未配置为集成身份验证。


考虑到使用Windows身份验证设置ColdFusion数据源的简便性,你为什么还要尝试这个呢? - Dan Bracuk
2个回答

3

(暂且忽略你的问题,...)

虽然可以使用手动连接方式来实现,但是有没有特别的原因不能使用标准的数据源名称(DSN)呢?这样会更加高效,需要的代码和清理工作也会少得多。此外,它还避免了一些手动连接的常见陷阱

据我所知,您可以在“显示高级设置>连接字符串”下输入AuthenticationMethod=Type2来设置DSN以使用Windows身份验证。将“用户名”和“密码”字段留空。

<cfquery name="qTest" datasource="YourDSN">
   SELECT SYSTEM_USER AS LoginName, DB_NAME() AS DatabaseName
</cfquery>

<cfdump var="#qTest#" label="Show Connection Settings">

*注意:DSN将使用CF服务用户帐户,因此根据需要进行调整。

更新:

如果您绝对必须使用手动连接,请尝试使用内置驱动程序而不是JDBCODBC桥接器。但是,请务必始终关闭数据库对象。否则,打开的连接将开始堆积,会发生糟糕的事情。

请记住,打开数据库连接是昂贵的。通过不使用DSN,您失去了连接池的好处。因此,总体而言,这种方法将比仅使用DSN不太有效率。

<cfscript>
   classLoader = createObject("java", "java.lang.Class");
   classLoader.forName("macromedia.jdbc.MacromediaDriver"); 
   dm = createObject("java","java.sql.DriverManager");
   dburl = "jdbc:macromedia:sqlserver://127.0.0.1:1433;databasename=RsDB;AuthenticationMethod=Type2";
   con = dm.getConnection(dburl);
   st = con.createStatement();
   rs = st.ExecuteQuery("SELECT getDate() AS TestValue");
   q = createObject("java", "coldfusion.sql.QueryTable").init(rs); 
   // ALWAYS close all objects!
   rs.close();
   st.close();
   con.close();
   writeDump(q);
</cfscript>

你也可以使用SQL Server JDBC驱动程序。另请参见在Windows上使用集成身份验证进行连接。但是,这需要将驱动程序jar文件和一个DLL(sqljdbc_auth.dll)添加到服务器中,听起来你无法这样做。
  • 驱动程序类: com.microsoft.sqlserver.jdbc.SQLServerDriver
  • URL: jdbc:sqlserver://localhost:1433;integratedSecurity=true;

1

在这里找到一个例子这里,显示了用户名和密码在URL中。

<cfset connection = driverManager
.getConnection("jdbc:mysql://localhost:3306/demodb?user=demouser&password=demopass")>

您的 SQL Server URL 没有传递任何凭据,请尝试一下。


1
但这违背了集成身份验证的目的;-) - Leigh
为什么我使用DSNless?因为我没有CFadmin访问权限。 - M.A
为什么不请管理员为您创建一个DSN呢?虽然您可以手动完成,但这样会远没有那么高效。 - Leigh
我只有读取生产环境的权限...对于开发,我现在有开发数据库,但是我需要对数据进行一些调试,然后这些数据我无法在开发环境中刷新...我正在尝试连接到生产环境以获取记录并进行一些调试...就是这样。 - M.A
这不是一个可以通过巧妙的代码解决的编程问题。你只是被拒绝使用工具来完成工作。与你的老板谈谈吧。 - Dan Bracuk
@knowledgeSeeker - 尽管上述内容完全有效,但它并不是Windows身份验证。听起来你真正的问题与你所问的不同。FYI:问题已更新,以免误导下一个搜索档案的人。 - Leigh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接