Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySQL&;JDBC:管理多个模式最安全的方法是什么?_Java_Mysql_Jdbc - Fatal编程技术网

Java MySQL&;JDBC:管理多个模式最安全的方法是什么?

Java MySQL&;JDBC:管理多个模式最安全的方法是什么?,java,mysql,jdbc,Java,Mysql,Jdbc,我正在使用JDBC和MySQL开发一个应用程序,我担心SQL注入。数据库将是多租户的,每个租户有不同的“模式”。因此,应用程序需要能够创建和删除模式 我的挑战是,这些类型的查询似乎不适用于PreparedStatements,我无法对它们进行参数化。这让我有点害怕,我不喜欢用SQL命令连接字符串 我唯一的安慰是,应用程序用户不能直接创建模式名称。它们由租户组织名称的前五个字符以及唯一索引组成。这至少是一种安慰 然而,我正在寻找最佳实践,如果有的话,我可以做些什么来保护以下SQL语句免受潜在的注入

我正在使用JDBC和MySQL开发一个应用程序,我担心SQL注入。数据库将是多租户的,每个租户有不同的“模式”。因此,应用程序需要能够创建和删除模式

我的挑战是,这些类型的查询似乎不适用于PreparedStatements,我无法对它们进行参数化。这让我有点害怕,我不喜欢用SQL命令连接字符串

我唯一的安慰是,应用程序用户不能直接创建模式名称。它们由租户组织名称的前五个字符以及唯一索引组成。这至少是一种安慰

然而,我正在寻找最佳实践,如果有的话,我可以做些什么来保护以下SQL语句免受潜在的注入攻击(参数显然只是这个问题的占位符,这些语句不能参数化):

如果您使用字符串连接“注入”的唯一字符串完全在您的控制下,您就可以了

但是,即使在您的控制之下,您仍然可以通过拒绝或转义包含特殊字符的值(SQL注入问题的原因)来保护自己。假设您使用
'
引用字符串文字,则需要考虑以下两个特殊字符:
'
\

如果您正确地转义了“注入”到SQL中的字符串,那么即使是用户提供的字符串也可以使用。正是缺少转义字符串导致了SQL注入漏洞

请注意,以上仅保证为真,因为您使用的是MySQL。其他RDBMS可能在带引号的字符串文字中使用其他特殊字符,这就是为什么使用
PreparedStatement
标记通常是防止SQL注入攻击的最佳方法,JDBC驱动程序可以在需要时进行正确的转义。

如果您“注入”的唯一字符串通过使用字符串连接完全在您的控制下,您会很好

但是,即使在您的控制之下,您仍然可以通过拒绝或转义包含特殊字符的值(SQL注入问题的原因)来保护自己。假设您使用
'
引用字符串文字,则需要考虑以下两个特殊字符:
'
\

如果您正确地转义了“注入”到SQL中的字符串,那么即使是用户提供的字符串也可以使用。正是缺少转义字符串导致了SQL注入漏洞

请注意,以上仅保证为真,因为您使用的是MySQL。其他RDBMS可能在带引号的字符串文字中使用其他特殊字符,这就是为什么使用
PreparedStatement
标记通常是防止SQL注入攻击的最佳方法,JDBC驱动程序可以在需要时进行正确转义

CREATE SCHEMA ?

SHOW TABLES FROM ? (used to verify that the schema DDL script was executed properly)

DROP SCHEMA IF EXISTS ?