基于 C# 应用程序中的用户输入创建 SQL 数据库的安全方法
Secure way of creating SQL Database based on user input in C# app
我正在网上苦苦寻找解决办法。
我最近了解到@parameters 不能用来表示数据库名称。
在我的例子中,每个用户都应该依赖于指定的数据库(出于多种原因)。我考虑过使用 sql 命令创建数据库,该命令动态组合了 sql 命令和输入字符串,但被告知这是一个愚蠢的想法(我同意)。
我听说过 SMO,但不确定这是否适合我。
也许有一种方法可以在用户提示时为数据库生成随机名称,然后将该名称与用户名一起存储在 'master' 数据库的 table 中以供识别?
在我找到正确的解决方案之前,我的工作几乎都被搁置了。
好吧,我能想到的一种方法是使用存储过程创建数据库。您可以将用户输入传递给 SPROC,并通过 sp_executesql 中的参数或 QUOTENAME.
验证输入
与评论的其他人不同,我可以看到每个用户的数据库用例,特别是如果每个客户(公司)都是一个用户并且您想分离数据。
根据您关于所有数据库都是相同体系结构的评论,我想到的想法是使用模型数据库。以您想要的方式构造它。然后你可以有一个 SP 来创建具有生成名称的数据库,可能是用户名或其他静态 属性 以某种方式避免使用直接用户输入(注入...)
我构建了一个应用程序来执行与此类似的操作,我所做的是在 SQL 服务器上保留一个空白数据库,并创建一个存储过程来复制它(当然使用不同的名称)。
不管流氓怎么说,每个用户的单个数据库有很多用例。
我正在网上苦苦寻找解决办法。
我最近了解到@parameters 不能用来表示数据库名称。
在我的例子中,每个用户都应该依赖于指定的数据库(出于多种原因)。我考虑过使用 sql 命令创建数据库,该命令动态组合了 sql 命令和输入字符串,但被告知这是一个愚蠢的想法(我同意)。
我听说过 SMO,但不确定这是否适合我。
也许有一种方法可以在用户提示时为数据库生成随机名称,然后将该名称与用户名一起存储在 'master' 数据库的 table 中以供识别?
在我找到正确的解决方案之前,我的工作几乎都被搁置了。
好吧,我能想到的一种方法是使用存储过程创建数据库。您可以将用户输入传递给 SPROC,并通过 sp_executesql 中的参数或 QUOTENAME.
验证输入与评论的其他人不同,我可以看到每个用户的数据库用例,特别是如果每个客户(公司)都是一个用户并且您想分离数据。
根据您关于所有数据库都是相同体系结构的评论,我想到的想法是使用模型数据库。以您想要的方式构造它。然后你可以有一个 SP 来创建具有生成名称的数据库,可能是用户名或其他静态 属性 以某种方式避免使用直接用户输入(注入...)
我构建了一个应用程序来执行与此类似的操作,我所做的是在 SQL 服务器上保留一个空白数据库,并创建一个存储过程来复制它(当然使用不同的名称)。
不管流氓怎么说,每个用户的单个数据库有很多用例。