0

每当我使用查询时,我都需要登录数据库(因为我没有 ODBC 设置来执行此操作)

<cfquery name="rsUser" datasource="dbname" username="admin" password="adminpass">
    SELECT * 
    FROM dbo.UsersView
    WHERE UserID = #session.userid#
</cfquery>

我不喜欢的部分是每次查询时都可以看到用户名和密码。我可以使用 a#parameter#但这只是一个很小的改进。除了在服务器上设置 ODBC 之外还有什么其他想法吗?

4

2 回答 2

6

如果您使用数据源,则无需提供用户名和密码,它们在您设置数据源时提供。如果您没有在 CF 管理员中设置数据源,那么您必须使用用户名和密码属性,但您还必须提供数据库服务器信息。

所以,简而言之,只要拿出你的用户名和密码,你就可以了。

此外,最佳实践是使用传入查询的值(在本例中为 session.userid)。cfqueryparam 不仅有助于保护您免受 SQL 注入攻击等安全问题的影响,它还告诉数据库服务器创建一个准备好的语句,该语句将在后续的查询调用中重用,从而提高查询的性能。

于 2011-04-21T21:14:09.473 回答
2

有时人们不喜欢将他们的用户名和密码放入 CF Admin 中,有一种简单的方法是将您的数据源信息放入 Application.cf(c|m) 中。

如果使用 Application.cfm,只需在 Application.cfm 的某处执行以下操作

Application.dsn = {
    datasource = 'mydatasource',
    username = 'myusername',
    password = 'mypassword'
}

如果使用 Application.cfc 将相同的代码放入您的 onApplicationStart 方法中。然后在您的查询中只需使用以下内容

<cfquery name="myquery" attributeCollection="#Application.dsn#">
     SELECT * FROM mytable
</cfquery>

如您所见,这使您的代码变得美观且易于管理,如果您的 DSN 发生更改,您只需在一个地方进行更改。

于 2011-04-22T02:16:27.083 回答