diff --git a/src/main/java/com/alibaba/druid/wall/spi/SQLServerWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/SQLServerWallVisitor.java index e7e91a06ed..c122b229eb 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/SQLServerWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/SQLServerWallVisitor.java @@ -206,12 +206,29 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements } if (config.isVariantCheck() && varName.startsWith("@@")) { - violations.add(new IllegalSQLObjectViolation(ErrorCode.VARIANT_DENY, "global variable not allow", toSQL(x))); + + boolean allow = true; + if (WallVisitorUtils.isWhereOrHaving(x) && isDeny(varName)) { + allow = false; + } + + if (!allow) { + violations.add(new IllegalSQLObjectViolation(ErrorCode.VARIANT_DENY, "variable not allow : " + + x.getName(), toSQL(x))); + } } return false; } + public boolean isDeny(String varName) { + if (varName.startsWith("@@")) { + varName = varName.substring(2); + } + + return config.getDenyVariants().contains(varName); + } + @Override public boolean visit(SQLServerObjectReferenceExpr x) { if (x.getSchema() != null && !provider.checkDenySchema(x.getSchema())) {