MySQL 8.0.39
Source Code Documentation
|
#include "sql/sql_audit.h"
#include <sys/types.h>
#include "lex_string.h"
#include "m_ctype.h"
#include "my_compiler.h"
#include "my_dbug.h"
#include "my_inttypes.h"
#include "my_loglevel.h"
#include "my_macros.h"
#include "my_psi_config.h"
#include "my_sqlcommand.h"
#include "my_sys.h"
#include "mysql/components/services/bits/mysql_mutex_bits.h"
#include "mysql/components/services/bits/psi_bits.h"
#include "mysql/components/services/bits/psi_mutex_bits.h"
#include "mysql/components/services/log_builtins.h"
#include "mysql/components/services/log_shared.h"
#include "mysql/mysql_lex_string.h"
#include "mysql/plugin.h"
#include "mysql/psi/mysql_mutex.h"
#include "mysqld_error.h"
#include "prealloced_array.h"
#include "sql/auto_thd.h"
#include "sql/current_thd.h"
#include "sql/error_handler.h"
#include "sql/log.h"
#include "sql/mysqld.h"
#include "sql/sql_class.h"
#include "sql/sql_error.h"
#include "sql/sql_lex.h"
#include "sql/sql_plugin.h"
#include "sql/sql_plugin_ref.h"
#include "sql/sql_rewrite.h"
#include "sql/table.h"
#include "sql_string.h"
#include "thr_mutex.h"
Classes | |
class | Audit_error_handler |
Error handler that controls error reporting by plugin. More... | |
struct | st_mysql_event_generic |
struct | st_mysql_subscribe_event |
Plugin event subscription structure. More... | |
class | Ignore_event_error_handler |
Ignore all errors notified from within plugin. More... | |
class | Ignore_command_start_error_handler |
Ignore error for specified commands. More... | |
Functions | |
static int | event_class_dispatch (THD *thd, mysql_event_class_t event_class, const void *event) |
Distributes an audit event to plug-ins. More... | |
static int | event_class_dispatch_error (THD *thd, mysql_event_class_t event_class, const char *event_name, const void *event) |
static void | add_audit_mask (unsigned long *mask, unsigned long rhs) |
Add mask specified by the rhs parameter to the mask parameter. More... | |
static void | add_audit_mask (unsigned long *dst, const unsigned long *src) |
Add entire audit mask specified by the src to dst. More... | |
static bool | check_audit_mask (const unsigned long lhs, const unsigned long rhs) |
Check, whether masks specified by lhs parameter and rhs parameters overlap. More... | |
static bool | check_audit_mask (const unsigned long *lhs, const unsigned long *rhs) |
Check, whether mask arrays specified by the lhs parameter and rhs parameter overlap. More... | |
const CHARSET_INFO * | thd_get_audit_query (THD *thd, MYSQL_LEX_CSTRING *query) |
Fill query info extracted from the thread object and return the thread object charset info. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_general_subclass_t subclass, const char *subclass_name, int error_code, const char *msg, size_t msg_len) |
Call audit plugins of GENERAL audit class. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_connection_subclass_t subclass, const char *subclass_name, int errcode) |
Call audit plugins of CONNECTION audit class. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_connection_subclass_t subclass, const char *subclass_name) |
Call audit plugins of CONNECTION audit class. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_parse_subclass_t subclass, const char *subclass_name, mysql_event_parse_rewrite_plugin_flag *flags, LEX_CSTRING *rewritten_query) |
Call audit plugins of PARSE audit class. More... | |
bool | generate_table_access_event (THD *thd, Table_ref *table) |
Check whether the table access event for a specified table will be generated. More... | |
static void | set_table_access_subclass (mysql_event_table_access_subclass_t *out_subclass, const char **out_subclass_name, mysql_event_table_access_subclass_t subclass, const char *subclass_name) |
Function that allows to use AUDIT_EVENT macro for setting subclass and subclass name values. More... | |
static int | mysql_audit_notify (THD *thd, mysql_event_table_access_subclass_t subclass, const char *subclass_name, Table_ref *table) |
Generate table access event for a specified table. More... | |
int | mysql_audit_table_access_notify (THD *thd, Table_ref *table) |
Call audit plugins of TABLE ACCESS audit class events for all tables available in the list. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_global_variable_subclass_t subclass, const char *subclass_name, const char *name, const char *value, const unsigned int value_length) |
Call audit plugins of GLOBAL VARIABLE audit class. More... | |
int | mysql_audit_notify (mysql_event_server_startup_subclass_t subclass, const char *subclass_name, const char **argv, unsigned int argc) |
Call audit plugins of SERVER STARTUP audit class. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_server_shutdown_subclass_t subclass, mysql_server_shutdown_reason_t reason, int exit_code) |
Call audit plugins of SERVER SHUTDOWN audit class. More... | |
int | mysql_audit_notify (mysql_event_server_shutdown_subclass_t subclass, mysql_server_shutdown_reason_t reason, int exit_code) |
Call audit plugins of SERVER SHUTDOWN audit class. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_command_subclass_t subclass, const char *subclass_name, enum_server_command command, const char *command_text) |
Call audit plugins of COMMAND audit class. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_query_subclass_t subclass, const char *subclass_name) |
Call audit plugins of QUERY audit class. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_stored_program_subclass_t subclass, const char *subclass_name, const char *database, const char *name, void *parameters) |
Call audit plugins of STORED PROGRAM audit class. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_authentication_subclass_t subclass, const char *subclass_name, int status, const char *user, const char *host, const char *authentication_plugin, bool is_role, const char *new_user, const char *new_host) |
Call audit plugins of AUTHENTICATION audit class. More... | |
int | mysql_audit_notify (THD *thd, mysql_event_message_subclass_t subclass, const char *subclass_name, const char *component, size_t component_length, const char *producer, size_t producer_length, const char *message, size_t message_length, mysql_event_message_key_value_t *key_value_map, size_t key_value_map_length) |
Call audit plugins of MESSAGE audit class. More... | |
static bool | acquire_lookup_mask (THD *, plugin_ref plugin, void *arg) |
Acquire plugin masks subscribing to the specified event of the specified class, passed by arg parameter. More... | |
static bool | acquire_plugins (THD *thd, plugin_ref plugin, void *arg) |
Acquire and lock any additional audit plugins, whose subscription mask overlaps with the lookup_mask. More... | |
int | mysql_audit_acquire_plugins (THD *thd, mysql_event_class_t event_class, unsigned long event_subclass, bool check_audited) |
Acquire audit plugins. More... | |
void | mysql_audit_release (THD *thd) |
Release any resources associated with the current thd. More... | |
void | mysql_audit_enable_auditing (THD *thd) |
Enable auditing of the specified THD. More... | |
void | mysql_audit_init_thd (THD *thd) |
Initialize thd variables used by Audit. More... | |
void | mysql_audit_free_thd (THD *thd) |
Free thd variables used by Audit. More... | |
static void | init_audit_psi_keys (void) |
void | mysql_audit_initialize () |
Initialize Audit global variables. More... | |
void | mysql_audit_finalize () |
Finalize Audit global variables. More... | |
int | initialize_audit_plugin (st_plugin_int *plugin) |
Initialize an Audit plug-in. More... | |
static bool | calc_class_mask (THD *, plugin_ref plugin, void *arg) |
Performs a bitwise OR of the installed plugins event class masks. More... | |
int | finalize_audit_plugin (st_plugin_int *plugin) |
Finalize an Audit plug-in. More... | |
static int | plugins_dispatch (THD *thd, plugin_ref plugin, void *arg) |
Dispatches an event by invoking the plugin's event_notify method. More... | |
static bool | plugins_dispatch_bool (THD *thd, plugin_ref plugin, void *arg) |
bool | is_audit_plugin_class_active (THD *thd, unsigned long event_class) |
There's at least one active audit plugin tracking a specified class. More... | |
bool | is_global_audit_mask_set () |
Checks presence of active audit plugin. More... | |
size_t | make_user_name (Security_context *sctx, char *buf) |
Variables | |
unsigned long | mysql_global_audit_mask [MYSQL_AUDIT_CLASS_MASK_SIZE] |
static mysql_mutex_t | LOCK_audit_mask |
static PSI_mutex_key | key_LOCK_audit_mask |
static PSI_mutex_info | all_audit_mutexes [] |
|
static |
Acquire plugin masks subscribing to the specified event of the specified class, passed by arg parameter.
lookup_mask of the st_mysql_subscribe_event structure is filled, when the plugin is interested in receiving the event.
plugin | Plugin reference. | |
[in,out] | arg | Opaque st_mysql_subscribe_event pointer. |
|
static |
Acquire and lock any additional audit plugins, whose subscription mask overlaps with the lookup_mask.
thd | Current session THD. | |
plugin | Plugin reference. | |
[in,out] | arg | Opaque st_mysql_subscribe_event pointer. |
|
inlinestatic |
Add entire audit mask specified by the src to dst.
dst | Destination mask array pointer. |
src | Source mask array pointer. |
|
inlinestatic |
Add mask specified by the rhs parameter to the mask parameter.
mask | Mask, to which rhs mask is to be added. |
rhs | Mask to be added to mask parameter. |
|
static |
Performs a bitwise OR of the installed plugins event class masks.
[in] | plugin | Source of the audit mask. |
[in] | arg | Destination, where the audit mask is copied. |
false | always |
|
inlinestatic |
Check, whether mask arrays specified by the lhs parameter and rhs parameter overlap.
lhs | First mask array to check. |
rhs | Second mask array to check. |
|
inlinestatic |
Check, whether masks specified by lhs parameter and rhs parameters overlap.
lhs | First mask to check. |
rhs | Second mask to check. |
|
static |
Distributes an audit event to plug-ins.
[in] | thd | THD that generated the event. |
event_class | Audit event class. | |
[in] | event | Opaque pointer to the event data. |
|
static |
int finalize_audit_plugin | ( | st_plugin_int * | plugin | ) |
Finalize an Audit plug-in.
[in] | plugin | Plugin data pointer to be deinitialized. |
false | OK |
true | There was an error. |
Check whether the table access event for a specified table will be generated.
Events for Views, table catogories other than 'SYSTEM' or 'USER' and temporary tables are not generated.
thd | Thread handler |
table | Table that is to be check. |
true | - generate event, otherwise not. |
|
static |
int initialize_audit_plugin | ( | st_plugin_int * | plugin | ) |
Initialize an Audit plug-in.
[in] | plugin | Plugin structure pointer to be initialized. |
false | OK |
true | There was an error. |
bool is_audit_plugin_class_active | ( | THD * | thd, |
unsigned long | event_class | ||
) |
There's at least one active audit plugin tracking a specified class.
bool is_global_audit_mask_set | ( | ) |
Checks presence of active audit plugin.
TRUE | At least one audit plugin is present |
FALSE | No audit plugin is present |
size_t make_user_name | ( | Security_context * | sctx, |
char * | buf | ||
) |
int mysql_audit_acquire_plugins | ( | THD * | thd, |
mysql_event_class_t | event_class, | ||
unsigned long | event_subclass, | ||
bool | check_audited | ||
) |
Acquire audit plugins.
Ensure that audit plugins interested in given event class are locked by current thread.
thd | MySQL thread handle. |
event_class | Audit event class. |
event_subclass | Audit event subclass. |
check_audited | Take into account m_auditing_activated flag of the THD. |
void mysql_audit_enable_auditing | ( | THD * | thd | ) |
Enable auditing of the specified THD.
[in] | thd | THD whose auditing capability is turned on. |
void mysql_audit_finalize | ( | ) |
Finalize Audit global variables.
void mysql_audit_free_thd | ( | THD * | thd | ) |
Free thd variables used by Audit.
thd | Current thread |
void mysql_audit_init_thd | ( | THD * | thd | ) |
Initialize thd variables used by Audit.
[in] | thd | Current thread |
void mysql_audit_initialize | ( | ) |
Initialize Audit global variables.
int mysql_audit_notify | ( | mysql_event_server_shutdown_subclass_t | subclass, |
mysql_server_shutdown_reason_t | reason, | ||
int | exit_code | ||
) |
Call audit plugins of SERVER SHUTDOWN audit class.
[in] | subclass | Type of the server abort audit event. |
[in] | reason | Reason code of the shutdown. |
[in] | exit_code | Abort exit code. |
int mysql_audit_notify | ( | mysql_event_server_startup_subclass_t | subclass, |
const char * | subclass_name, | ||
const char ** | argv, | ||
unsigned int | argc | ||
) |
Call audit plugins of SERVER STARTUP audit class.
[in] | subclass | Type of the server startup audit event. |
[in] | subclass_name | Name of the subclass. |
[in] | argv | Array of program arguments. |
[in] | argc | Program arguments array length. |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_authentication_subclass_t | subclass, | ||
const char * | subclass_name, | ||
int | status, | ||
const char * | user, | ||
const char * | host, | ||
const char * | authentication_plugin, | ||
bool | is_role, | ||
const char * | new_user, | ||
const char * | new_host | ||
) |
Call audit plugins of AUTHENTICATION audit class.
[in] | thd | Current thread data. |
[in] | subclass | Type of the authentication audit event. |
[in] | subclass_name | Name of the subclass. |
[in] | status | Status of the event. |
[in] | user | Name of the user. |
[in] | host | Name of the host. |
[in] | authentication_plugin | Current authentication plugin for user. |
[in] | is_role | Whether given AuthID is a role or not |
[in] | new_user | Name of the new user - In case of rename |
[in] | new_host | Name of the new host - In case of rename |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_command_subclass_t | subclass, | ||
const char * | subclass_name, | ||
enum_server_command | command, | ||
const char * | command_text | ||
) |
Call audit plugins of COMMAND audit class.
Internal connection info is extracted from the thd object.
[in] | thd | Current thread data. |
[in] | subclass | Type of the command audit event. |
[in] | subclass_name | Name of the subclass. |
[in] | command | Command id value. |
[in] | command_text | Command string value. |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_connection_subclass_t | subclass, | ||
const char * | subclass_name | ||
) |
Call audit plugins of CONNECTION audit class.
Internal connection info is extracted from the thd object.
[in] | thd | Current thread data. |
[in] | subclass | Type of the connection audit event. |
[in] | subclass_name | Name of the subclass. |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_connection_subclass_t | subclass, | ||
const char * | subclass_name, | ||
int | errcode | ||
) |
Call audit plugins of CONNECTION audit class.
[in] | thd | Current thread context. |
[in] | subclass | Type of the connection audit event. |
[in] | subclass_name | Name of the subclass. |
[in] | errcode | Error code. |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_general_subclass_t | subclass, | ||
const char * | subclass_name, | ||
int | error_code, | ||
const char * | msg, | ||
size_t | msg_len | ||
) |
Call audit plugins of GENERAL audit class.
[in] | thd | Current thread data. |
[in] | subclass | Type of general audit event. |
[in] | subclass_name | Subclass name. |
[in] | error_code | Error code |
[in] | msg | Message |
[in] | msg_len | Message length. |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_global_variable_subclass_t | subclass, | ||
const char * | subclass_name, | ||
const char * | name, | ||
const char * | value, | ||
const unsigned int | value_length | ||
) |
Call audit plugins of GLOBAL VARIABLE audit class.
[in] | thd | Current thread data. |
[in] | subclass | Type of the global variable audit event. |
[in] | subclass_name | Name of the subclass. |
[in] | name | Name of the variable. |
[in] | value | Textual value of the variable. |
[in] | value_length | Textual value length. |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_message_subclass_t | subclass, | ||
const char * | subclass_name, | ||
const char * | component, | ||
size_t | component_length, | ||
const char * | producer, | ||
size_t | producer_length, | ||
const char * | message, | ||
size_t | message_length, | ||
mysql_event_message_key_value_t * | key_value_map, | ||
size_t | key_value_map_length | ||
) |
Call audit plugins of MESSAGE audit class.
[in] | thd | Current thread data. |
[in] | subclass | Message class subclass name. |
[in] | subclass_name | Subclass name length. |
[in] | component | Component name. |
[in] | component_length | Component name length. |
[in] | producer | Producer name. |
[in] | producer_length | Producer name length. |
[in] | message | Message text. |
[in] | message_length | Message text length. |
[in] | key_value_map | Key value map pointer. |
[in] | key_value_map_length | Key value map length. |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_parse_subclass_t | subclass, | ||
const char * | subclass_name, | ||
mysql_event_parse_rewrite_plugin_flag * | flags, | ||
LEX_CSTRING * | rewritten_query | ||
) |
Call audit plugins of PARSE audit class.
[in] | thd | Current thread context. |
[in] | subclass | Type of the parse audit event. |
[in] | subclass_name | Name of the subclass. |
[out] | flags | Rewritten query flags. |
[out] | rewritten_query | Rewritten query |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_query_subclass_t | subclass, | ||
const char * | subclass_name | ||
) |
Call audit plugins of QUERY audit class.
Internal query info is extracted from the thd object.
[in] | thd | Current thread data. |
[in] | subclass | Type of the query audit event. |
[in] | subclass_name | Name of the subclass. |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_server_shutdown_subclass_t | subclass, | ||
mysql_server_shutdown_reason_t | reason, | ||
int | exit_code | ||
) |
Call audit plugins of SERVER SHUTDOWN audit class.
[in] | thd | Client thread info or NULL. |
[in] | subclass | Type of the server abort audit event. |
[in] | reason | Reason code of the shutdown. |
[in] | exit_code | Abort exit code. |
int mysql_audit_notify | ( | THD * | thd, |
mysql_event_stored_program_subclass_t | subclass, | ||
const char * | subclass_name, | ||
const char * | database, | ||
const char * | name, | ||
void * | parameters | ||
) |
Call audit plugins of STORED PROGRAM audit class.
[in] | thd | Current thread data. |
[in] | subclass | Type of the stored program audit event. |
[in] | subclass_name | Name of the subclass. |
[in] | database | Stored program database name. |
[in] | name | Name of the stored program. |
[in] | parameters | Parameters of the stored program execution. |
|
static |
Generate table access event for a specified table.
Table is being verified, whether the event for this table is to be generated.
thd | Current thread data. |
subclass | Subclass value. |
subclass_name | Subclass name. |
table | Table, for which table access event is to be generated. |
void mysql_audit_release | ( | THD * | thd | ) |
Release any resources associated with the current thd.
[in] | thd | Current thread |
Call audit plugins of TABLE ACCESS audit class events for all tables available in the list.
Event subclass value depends on the thd->lex->sql_command value.
The event is generated for 'USER' and 'SYS' tables only.
[in] | thd | Current thread data. |
[in] | table | Connected list of tables, for which event is generated. |
|
static |
Dispatches an event by invoking the plugin's event_notify method.
[in] | thd | Session THD containing references to the audit plugins. |
[in] | plugin | Plugin used for dispatching the event. |
[in] | arg | Opaque event data structure. |
false | always |
|
static |
|
inlinestatic |
Function that allows to use AUDIT_EVENT macro for setting subclass and subclass name values.
[out] | out_subclass | Subclass value pointer to be set. |
[out] | out_subclass_name | Subclass name pointer to be set. |
subclass | Subclass that sets out_subclass value. | |
subclass_name | Subclass name that sets out_subclass_name. |
|
inline |
Fill query info extracted from the thread object and return the thread object charset info.
[in] | thd | Thread data. |
[out] | query | SQL query text. |
|
static |
|
static |
|
static |
unsigned long mysql_global_audit_mask[MYSQL_AUDIT_CLASS_MASK_SIZE] |