Coldfusion 9 DSN 少连接 MSSQL 2008 Windows 身份验证

Coldfusion 9 DSN less Connection MSSQL 2008 Windows Authentication

更新:

虽然最初的问题询问的是 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>

错误:

处理请求时出错 此驱动程序未针对集成身份验证进行配置。

在 URL 中找到了显示用户名和密码的示例 here

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

您的 URL 用于 SQL 服务器没有传递任何凭据,试一试。

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

虽然可以通过手动连接来完成,但是否有特定原因不能仅使用标准 DSN?那会更有效率并且需要更少 code/cleanup。更不用说它避免了一些 common pitfalls of manual connections

AFAIK,您可以通过在 "Show Advanced Settings > Connection String" 下输入 AuthenticationMethod=Type2 将 DSN 设置为使用 windows authentication。将 "username" 和 "password" 字段留空。

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

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

*NB: DSN会使用CF服务用户账号,所以按需调整

更新:

如果您绝对必须使用手动连接,请尝试使用内置的 driver 而不是 JDBCODBC 桥。但是,请务必始终 关闭数据库objects。否则,打开的连接将开始堆积,坏事就会发生。

请记住,打开数据库连接的成本很高。如果不使用 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 Driver instead. See also Connecting with Integrated Authentication On Windows。但是,这需要将 driver jar 和一个 DLL (sqljdbc_auth.dll) 添加到服务器,这听起来你做不到。

  • Driver Class: com.microsoft.sqlserver.jdbc.SQLServerDriver
  • URL: jdbc:sqlserver://localhost:1433;integratedSecurity=true;