【发布时间】:2020-02-28 09:26:40
【问题描述】:
我正在尝试根据用户输入动态创建数据库和数据源。
我不确定是否可以在不使用数据源的情况下使用 cfquery 标签创建数据库。
用于创建数据源
<cfscript>
adminObj = createObject("component","cfide.adminapi.administrator");
adminObj.login("admin password");
myObj = createObject("component","cfide.adminapi.datasource");
myObj.setMSSQL(driver="MSSQLServer",
name="datasourceName", host = "127.0.0.1", port = "1433",
database = "database", username = "userName", password="password", login_timeout = "30",
timeout = "20", interval = 7, buffer = "64000", blob_buffer = "64000", setStringParameterAsUnicode = "false",
description = "", pooling = true, maxpooledstatements = 1000, enableMaxConnections = "true",
maxConnections = "300", enable_clob = true, enable_blob = true, disable = false, storedProc = true,
alter = false, grant = true, select = true, update = true, create = true, delete = true, drop = false,
revoke = false
);
</cfscript>
我尝试使用上述代码静态创建数据源,成功创建数据源
用于创建数据库
<cfquery name="createDB" result="res">
create database #form.dbname#
</cfquery>
但无法使用上述代码创建数据库。我得到了错误,我的目标需要使用用户输入字符串创建数据库然后数据源。
任何建议或帮助都是值得赞赏的
提前致谢。
【问题讨论】:
-
让用户在你的服务器上创建数据库是一个真的坏主意。
-
您需要在创建数据库的
中使用数据源名称 - 不过,我不确定这是否可行。您可能需要使用已经存在的数据源创建数据库,然后创建新的数据源。另外,我同意其他所有人的观点……这是一个坏主意……一个非常非常糟糕的主意。 -
据我记忆,我认为您可以创建另一个基线数据库(如 SQL Server 中的 Master)并备份和恢复该数据库。这使您可以使用实际的数据源数据库。但是,我会再次重申,我认为这是一个非常糟糕的主意。
-
我还强烈建议您创建一个仅 CF 使用的特殊用户,并将该帐户限制为允许执行的操作。
sa在您的数据库中拥有 很多 权限。而且您真的不希望可通过网络访问的用户能够对您的数据库执行DROP TABLE master之类的操作。 -
我将为未来的读者添加另一条注释:这是一个坏主意的原因之一(尽管有安全方面的问题)是您可以打开一个允许轻松拒绝的漏洞-服务,有意或无意。如果这被多次调用,则这些数据库中的每一个都有驱动器空间成本。您可以很快填满数据库服务器中的硬盘驱动器。驱动器空间不足可能是一个非常令人头疼的问题。更糟糕的是,如果您为使用的驱动器空间付费,您可能会收到相当昂贵的惊喜。
标签: sql-server coldfusion cfml coldfusion-2016