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