Detailed information regarding the rules can be found in rules
These options are saved inside rules configuration file. It contains both request and response rules. The filename depends on the name of the rule list → nameOfRuleList.conf.
These are stored in the following format under rules:
Each rule might have:
* enabled - Boolean to indicate if the rule is active.
* type - Action of the rule inside the configuration file, such as Q → Allow.
* Patterns - The Java regex for queries to match on. Regex column from GUI.
* rowPatterns - Used by response rules.
* intrans - Determine if rule matches in transactions or only on auto-commit mode.
* properties - Parameters and their values for given rule.
* notes - Extra notes that can be left, their presence is marked by message icon next to enabled option. Editable after clicking edit button.
⚠️ Note: You can use SHIFT with mouse scroll to scroll horizontally!
Key
Type
Description
allow
Q
Explicity allow a query to bypass the learn and drop rule types
async execute
A
Execute insert/update/delete asynchronously, not supported by MySQL proxy
cache
C
Use the cache configuration for the VDB to cache matching queries, if possible
call
G
Execute (call) a named rule list, must also be included in the VDB config to work
debug
Z
Allows to enable and disable debug mode for a connection
drop
D
If not allowed with an allow rule, drop the request, and generate SQL Exception
extract plan
O
Automatically (periodically) retrieve query plan on queries
forward
F
Allows queries to be sent to alternate data sources for execution
ignore
I
Ignore rules of the specified type in the current rule-list that occur after this rule
learn pattern
P
Generate a firewall learn action to add a rule to a named rule list. A new rule will not be added if one with the same pattern and action type already exists.
log
L
Log the SQL observed in the query
multiplex
K
Manage multiplex behavior (works only when the multiplex is enabled in VDB config)
nocache
B
Disable caching for a query, overrides previous cache rules as well as prevents later cache rules from being evaluated
pool
M
Pool and connection multiplexing behavior overrides
procedure wrap
1
Wrap query into a procedure on proxy side (only for SQLServer).
reader eligible
V
Flag that the query is allowed to be processed by a read-only server in a cluster.
result
N
Return a (fixed) result
retry
E
Retry execution if exception occurs
stack trace
S
Generate a Java stack trace in logs on match
table cache
W
Apply a TTL to a query based on if the table specified is referenced by the query. Lower TTL values override higher ones
tag
X
A no-op action, for use with universal parameters only
transform
T
Change the query based on capture group manipulation
trigger
R
Trigger another SQL or script to execute as a result of a matching query
Parameters for rules
General parameters:
They can be used for any request rule:
Key
Description
delay
Adds X microseconds to each query, to help model the impact of latency between the db client and server, for hybrid cloud impact testing
evicttables
Tables that should be flagged as evicted when a query matches the rule
exclude
Exclude matching the rule 1/X times, to allow a small sample of queries to match
invalidate
Can be specified to override invalidation behavior of writes for matching queries, default is to allow invalidations to occur.
log
When specified, behave as if a log rule had matched, used to consolidate rules
matchdelta
Specifies the minimum time between matches on a per-proxy basis, overrides matchlimit
matchlimit
Specifies the frequency (in X per second) that a rule should match
matchthreshold
Only match to unknown queries or ones that are known to have an average runtime longer than X microseconds
maxburst
When using matchlimit or ratelimit, specify the number of seconds worth of bursting to allow before limiting the rate
notify
If specified as true, flag that the notification configuration should be used to notify on a match
notrack
When specified, don't track the performance of this query for statistics records. Useful to "hide" overhead queries that aren't impacted by performance
onlyTrans
When specified, only match queries that are in transaction (must have In-Trans checked as well)
olderthan
specify the time window in ms to allow content to not be evicted on eviction. Negative prevents caching into the future
preparedonly
Match only if a query is a prepared query. This can be used to trigger exceptions to change settings for users to optimize pooling behavior
printcapture
When a rule matches, print capture groups of the rule match
printmatch
When a rule matches, print the rule that matched
printmeta
Print the resultset metadata for results returned
printresults
Prints to logs the result of matching queries
printtables
If specified, print the table attributes to be used for caching & invalidation
printtiming
Prints to logs the execution time of this rule, useful for profiling called rulelists, such as for the SQL Firewall
ratelimit
Limits matching queries to X per second. This is tracked on a per-rule basis, so ratelimit and matchlimit can interact on the same rule
rowlimit
Set the connection to be limited to X rows per result-set as if the command 'set maxrows=x' had been made
sample
Match the rule only 1/X times, often to reduce frequency of logging, but remain proportionate to load
serverfilter
A filter (regex) to determine what read-only servers should be used to handle a request. If none match, this is ignored. Only used with forwarding & read/write split
stop
If specified on a matching rule, no further rule processing in the current rule list will occur
tables
For any matching rule, specifies the tables that should be added to a query's table list. Use "none" to allow caching without tables. Newlines and whitespace are acceptable between table names, but not in table names.
update
Specifies if the matching queries should be processed as updates by the cache engine
userReset
When executing a query, remove the user's credentials to use the default source user's connection pool and permissions
resultQuery
When executing a query, use an alternate query to retrieve the actual result, i.e. from a temp table
resultQueryTrans
When using resultQuery, should the initial query and the result query be wrapped together in a transaction?
serverFilter
If average runtime will be longer than given 'matchthreshold', then query will be forwarded to data source defined by 'serverfilter'.
queryTimeout
Query execution timeout
honorComments
The comments in the queries at the regex level are ignored by default. Use this flag to preserve them. Note: Enable it if you want to use the Capture Parameter.
Rule Specific
For Async Execute:
Key
Description
asyncsize
The maximum length of a query (in characters) that can be made asynchronous
batchSize
The maximum batch size of queries to be executed--queries will not be delayed to fill the queue, but this sets the maxiumim size of
maxPollInterval
The maximum time (in ms) to poll after an async query is received before a batch is processed, defaults to 0 for no delay the batch.
source
The name of the data source to forward the query to for async execute. This source must be specified in the VDB definition.
queueName
The per-source named async queue to process the query from. Defaults to the name of the data source the query is sent to. Set to ${table} to allow dynamic replacement of the table name (if only one).
holdUntil
When to hold the thread until
spoofedResult
The result the DML will return if the result is spoofed (only for immediate holdUntil values).
lockTable
Lock tables of async DML while the DML is pending, to serialize access to the table (default to TRUE)
For Cache
Key
Description
ttl
Specifies the TTL in ms of objects cached, if not evicted due to a write first
cachesystem
True if Heimdall should cache system tables, and not just user tables, can break things!
unconditional
if true, bypass many internal checks to insure a query is cacheable
maxLocalSize
Specify the largest size of a cachable object in local memory, defaults to Integer.MAX_VALUE
maxSize
Specify the largest size of a cachable object, defaults to Integer.MAX_VALUE
autoRefresh
Specify that queries may be automatically refreshed in cache if invalidated (but not on TTL expiration). Only a limit number of queries are tracked for this purpose, configurable on the vdb properties
revalidateOnly
Don't actually serve from cache, but validate that the result in the cache is the same as what the server serves
shared
Share a cache object across users. Note, this may bypass security, so should be used with caution. To globally trigger this, use the custom cache key option in the vdb cache settings.
For Result
Key
Description
responseInt
Return an integer value as a result of a SQL call, i.e. for rows updated
file
Return a file containing json result
For Retry
Key
Description
maxRetries
Maximum number of attempts that will be made if none of them succeeds
exception
String that exception should contain
retryDelay
Delay between retry attempts
query
The sql to execute before attempting to retry
For Forward
Key
Description
source
The name of the data source to forward the query to. This source must be specified in the VDB configuration.
setcatalog
If in forwarding, should we inherit/set the catalog from the parent connection on the forwarded connection.
setschema
If in forwarding, should we inherit/set the schema from the parent connection on the forwarded connection.
readonly
When forwarding, should the connection be allowed to read-only servers.
sticky
Continue forwarding to the designated source in an ongoing basis, and disables multiplexing so the same connection is reused.
For Call
Key
Description
rule
The rule name to call/execute in place of the call rule itself, if matched.
For Ignore
Key
Description
action
What type of action to ignore after matching
For Log
Key
Description
logcolumns
List of comma separated column names/aliases to save in log records, based on the resultset metadata. Use '*' or 'all' for all columns. Note: HIGHLY impacting on performance.
slowtime
Response time in microseconds above which logging should be triggered.
For Extract Plan
Key
Description
threshold
The response time threshold in ms after which the plan is requested, based on query pattern average response times
frequency
How many times the query plan can be requested per hour
format
What format to use when extracting an execution plan
force
By default Extract Plan works only for queries with result set from DB (for example, SELECT queries). To force explaining on any queries set the parameter to true.
checkTableMismatch
For SQL Server, check if tables in the explain match what is tracked internally by Heimdall
For Learn Pattern
Key
Description
rule
The name of the target rule list to add learned rules to.
action
Specifies the action of newly added rules, defaults to "allow".
For Trigger
Key
Description
type
Specifies the type of trigger action to perform. If execute, then it will call the named program or script, and execute on the central manager (always). If SQL, it will execute on the proxy/driver unless in parallel, delay and queueunique is TRUE, then it will process on the central manager.
command
The command to execute, either as sql or as a script. Accepts a replacement value of ${tables} to represent the tables in the query.
timing
When to execute the command, either before, after, or in parallel to the triggering sql. With before, if an exception is encountered on the initial query, the trigger action is not performed. If an exception is encountered with after, then the exception will be reported to the calling thread. When sql is set to execute in parallel mode, it will execute on the central manager if delayed, on the proxy/driver if not, and exceptions will only be reported in the logs.
delay
When running in parallel to the triggering sql, how much time to delay processing (in ms), if any
maxDelay
When running in parallel, delayed and queueunique, how often should we run (at least) even if the trigger action keeps occurring, i.e. to insure data inserted is flushed to another db at least X times an hour
queueUnique
When performing delayed parallel queries, should the execution queue only maintain unique command executions, to prevent the same command from executing over and over later?
source
The name of the data source to execute a SQL query on. This source must be specified in the VDB configuration.
onceOnly
Only do this trigger once during the lifetime of the proxy (or a reasonably long period). The call should be able to be triggered multiple times over time, this should be considered an optimization only.
For Stack Trace
Key
Description
threshold
Response time threshold for stack traces to trigger (in microseconds)
For Transform
Key
Description
target
When translating a query, the target of the translation, with ${1} representing the first capture group, ${2} the second, etc.
recursive
If a transformation should be repeated until no change is made between original and transformed query
escapeQuotes
If single quotes in the capture group should be escaped with ''
For Table Cache
Key
Description
ttl
Specifies the TTL of objects cached, if not evicted due to a write first
table
In table cache rules, specifies the name of the table to apply settings for
For Debug
Key
Description
enabled
If true, enables driver debug logging at that point
For Pool
Key
Description
maxUserActive
Sets the per-user active pool parameter (idle+busy), and overrides any default set in the source settings. Useful to allow individual users to have more connections than others, and can be set based on AD group, say to allow service accounts more connections than general users (Integer).
maxUserIdle
Overrides the per-user allowed idle connection limit (Integer).
multiplex
Override the vdb level multiplex setting to either enable or disable multiplexing (Boolean).
multiplexSkip
Triggers skipping multiplexing for X number of queries after the current matching one (Integer).
reuse
Control if connections can be reused on return by pooling, defaults to true (Boolean). Only impacts the primary (writer) connection, not read/write split connections.
For Reader Eligible
Key
Description
Lagignore
Ignore the lag detection logic when routing a query.
unconditional
If set to true bypass internal checks that would mark query as not viable for reader servers.
For Multiplex
Key
Description
disable
When the capture parameter from regex is matched, then it is saved in memory and from this point multiplex will be disabled for all queries, unless it will be enabled again.
enable
When the capture parameter from regex is matched, then it is removed from the memory (mentioned in the "disable" point) and multiplex will be enabled for next executed query (unless there are any other captured parameters disabled)