为何SQL Server的getExtraNameCharacters()未包含[].字符?
SQL Server JDBC驱动getExtraNameCharacters()不包含[]和.的原因
- 方法设计定位问题:
getExtraNameCharacters()的作用是返回可直接作为标识符(表名、列名等)一部分的额外合法字符,而非SQL语法里的分隔、引用类符号。 - []是标识符引用符号,不属于标识符内容:在SQL Server中,
[]是用来包裹包含特殊字符的标识符的语法标记——比如当表名里有空格或特殊符号时,才用[]把它括起来。[dbo].[myTable]里的实际标识符是dbo和myTable,[]本身不是标识符的组成部分,所以不会被该方法返回。 - .是对象层级分隔符,属于SQL语法符号:
.用来区分数据库、架构、表/列的层级关系,是SQL语法的一部分,不属于标识符本身的字符,自然也不在该方法的返回范围内。
另外需要提醒:直接把[].加入校验允许列表存在风险,正确的做法应该是先解析掉标识符的引用符号(比如去掉[])和层级分隔符,再对拆分后的实际标识符部分用getExtraNameCharacters()做校验,这样既符合SQL语法规范,也能避免不必要的注入风险。
内容的提问来源于stack exchange,提问作者Mikhail T.
相关产品推荐
相关产品推荐

