23#ifndef SQL_USER_CACHE_INCLUDED
24#define SQL_USER_CACHE_INCLUDED
30#include <boost/graph/adjacency_list.hpp>
31#include <boost/graph/graph_selectors.hpp>
32#include <boost/graph/graph_traits.hpp>
33#include <boost/graph/properties.hpp>
34#include <boost/pending/property.hpp>
38#include <unordered_map>
67template <
typename Element_type,
size_t Prealloc>
122 static bool calc_ip_mask(
const char *ip_arg,
long *val);
134 static const char *
calc_ip(
const char *ip_arg,
long *val);
221#define NUM_CREDENTIALS 2
222#define PRIMARY_CRED (NUM_CREDENTIALS - NUM_CREDENTIALS)
223#define SECOND_CRED (PRIMARY_CRED + 1)
329 bool update(
THD *thd,
bool successful_login,
long *ret_days_remaining);
384 void init(
const char *host_arg,
const char *user_arg,
385 const char *proxied_host_arg,
const char *proxied_user_arg,
386 bool with_grant_arg);
389 const char *proxied_host_arg,
const char *proxied_user_arg,
390 bool with_grant_arg);
403 bool matches(
const char *host_arg,
const char *user_arg,
const char *ip_arg,
404 const char *proxied_user_arg,
bool any_proxy_user);
407 return (a == b || (a !=
nullptr && b !=
nullptr && !strcmp(a, b)));
412 bool granted_on(
const char *host_arg,
const char *user_arg) {
414 ((!
user && (!user_arg || !user_arg[0])) ||
415 (
user && user_arg && !strcmp(
user, user_arg))) &&
434 const char *grantor);
466 GRANT_NAME(
const char *h,
const char *d,
const char *u,
const char *t,
472 const char *t,
bool is_routine);
482 GRANT_TABLE(
const char *h,
const char *d,
const char *u,
const char *t,
545 const char *
host,
const char *ip,
const char *db,
const char *
user,
546 const char *tname,
bool exact,
bool name_tolower) {
549 std::string
name = tname;
558 auto it_range = name_hash.equal_range(
key);
559 for (
auto it = it_range.first; it != it_range.second; ++it) {
560 T *grant_name = it->second.get();
562 if (!grant_name->host.get_host() ||
564 grant_name->host.get_host())) ||
565 (ip && !strcmp(ip, grant_name->host.get_host())))
568 if (grant_name->host.compare_hostname(
host, ip) &&
569 (!found || found->sort < grant_name->sort))
577 const char *db,
const char *
user,
578 const char *tname,
bool proc,
582 db,
user, tname, exact,
true);
586 const char *db,
const char *
user,
587 const char *tname,
bool exact) {
613 boost::property<boost::vertex_name_t, std::string>>
619typedef boost::adjacency_list<boost::setS,
621 boost::bidirectionalS,
627typedef boost::graph_traits<Granted_roles_graph>::vertex_descriptor
631typedef boost::graph_traits<Granted_roles_graph>::edge_descriptor
639using degree_s_t = boost::graph_traits<Granted_roles_graph>::degree_size_type;
643 boost::graph_traits<Granted_roles_graph>::out_edge_iterator;
647 boost::graph_traits<Granted_roles_graph>::in_edge_iterator;
661 void *
operator new(
size_t size);
662 void operator delete(
void *
p);
791 bool lock(
bool raise_error =
true);
866 uint remaining_login_attempts,
long daynr_locked);
874 uint remaining_login_attempts,
uint32_t Access_bitmask
Definition: auth_acls.h:34
std::pair< LEX_CSTRING, LEX_CSTRING > Auth_id_ref
user, host tuple which reference either acl_cache or g_default_roles
Definition: auth_common.h:82
std::vector< Auth_id_ref > List_of_auth_id_refs
Definition: auth_common.h:83
std::vector< ACL_temporary_lock_state > Lock_state_list
Definition: auth_common.h:72
std::map< std::string, Access_bitmask > SP_access_map
Definition: auth_internal.h:65
std::map< std::string, Access_bitmask > Db_access_map
Definition: auth_internal.h:66
std::map< std::string, bool > Dynamic_privileges
Definition: auth_internal.h:280
std::unordered_set< std::string > Grant_acl_set
Definition: auth_internal.h:90
Definition: sql_auth_cache.h:160
Access_bitmask access
Definition: sql_auth_cache.h:165
ACL_HOST_AND_IP host
Definition: sql_auth_cache.h:163
ACL_ACCESS()
Definition: sql_auth_cache.h:162
ulong sort
Definition: sql_auth_cache.h:164
Definition: sql_auth_cache.h:357
char * user
Definition: sql_auth_cache.h:359
char * db
Definition: sql_auth_cache.h:359
void set_user(MEM_ROOT *mem, const char *user_arg)
Definition: sql_auth_cache.cc:686
void set_host(MEM_ROOT *mem, const char *host_arg)
Definition: sql_auth_cache.cc:690
Definition: sql_auth_cache.h:74
bool check_allow_all_hosts()
Definition: sql_auth_cache.h:151
bool has_wildcard()
Definition: sql_auth_cache.h:146
static bool calc_cidr_mask(const char *ip_arg, long *val)
IP mask parsing in the CIDR format.
Definition: sql_auth_cache.cc:224
long ip_mask
Definition: sql_auth_cache.h:96
size_t get_host_len() const
Definition: sql_auth_cache.h:144
enum_ip_mask_type
IP mask type enum.
Definition: sql_auth_cache.h:79
@ ip_mask_type_cidr
IP specified with a mask in a CIDR form.
Definition: sql_auth_cache.h:87
@ ip_mask_type_subnet
IP specified with a mask in a form of a subnet.
Definition: sql_auth_cache.h:91
@ ip_mask_type_implicit
Only IP is specified.
Definition: sql_auth_cache.h:83
static const char * calc_ip(const char *ip_arg, long *val)
IP parsing.
Definition: sql_auth_cache.cc:247
long ip
Definition: sql_auth_cache.h:96
static bool calc_ip_mask(const char *ip_arg, long *val)
IP mask parsing in the subnet format.
Definition: sql_auth_cache.cc:235
size_t hostname_length
Definition: sql_auth_cache.h:95
void update_hostname(const char *host_arg)
Update the hostname.
Definition: sql_auth_cache.cc:268
ACL_HOST_AND_IP()
Definition: sql_auth_cache.h:137
const char * get_host() const
Definition: sql_auth_cache.h:143
enum_ip_mask_type ip_mask_type
IP mask type.
Definition: sql_auth_cache.h:100
const char * hostname
Definition: sql_auth_cache.h:94
bool compare_hostname(const char *host_arg, const char *ip_arg)
Definition: sql_auth_cache.cc:320
Definition: sql_auth_cache.h:216
char * db
Definition: sql_auth_cache.h:218
Definition: sql_auth_cache.h:365
ACL_HOST_AND_IP proxied_host
Definition: sql_auth_cache.h:367
static int store_data_record(TABLE *table, const LEX_CSTRING &host, const LEX_CSTRING &user, const LEX_CSTRING &proxied_host, const LEX_CSTRING &proxied_user, bool with_grant, const char *grantor)
Definition: sql_auth_cache.cc:660
bool get_with_grant()
Definition: sql_auth_cache.h:394
const char * get_proxied_host()
Definition: sql_auth_cache.h:397
void print_grant(THD *thd, String *str)
Definition: sql_auth_cache.cc:613
bool matches(const char *host_arg, const char *user_arg, const char *ip_arg, const char *proxied_user_arg, bool any_proxy_user)
Definition: sql_auth_cache.cc:564
const char * get_user()
Definition: sql_auth_cache.h:395
void set_host(MEM_ROOT *mem, const char *host_arg)
Definition: sql_auth_cache.cc:682
size_t get_proxied_user_length() const
Definition: sql_auth_cache.h:438
size_t get_user_length() const
Definition: sql_auth_cache.h:436
void init(const char *host_arg, const char *user_arg, const char *proxied_host_arg, const char *proxied_user_arg, bool with_grant_arg)
Definition: sql_auth_cache.cc:515
static int store_pk(TABLE *table, const LEX_CSTRING &host, const LEX_CSTRING &user, const LEX_CSTRING &proxied_host, const LEX_CSTRING &proxied_user)
Definition: sql_auth_cache.cc:624
bool pk_equals(ACL_PROXY_USER *grant)
Definition: sql_auth_cache.cc:590
bool check_validity(bool check_no_resolve)
Definition: sql_auth_cache.cc:551
static bool auth_element_equals(const char *a, const char *b)
Definition: sql_auth_cache.h:406
void set_user(MEM_ROOT *mem, const char *user_arg)
Definition: sql_auth_cache.cc:678
static int store_with_grant(TABLE *table, bool with_grant)
Definition: sql_auth_cache.cc:650
void set_data(ACL_PROXY_USER *grant)
Definition: sql_auth_cache.h:422
old_acl_proxy_users
Definition: sql_auth_cache.h:371
@ MYSQL_PROXIES_PRIV_PROXIED_HOST
Definition: sql_auth_cache.h:374
@ MYSQL_PROXIES_PRIV_HOST
Definition: sql_auth_cache.h:372
@ MYSQL_PROXIES_PRIV_WITH_GRANT
Definition: sql_auth_cache.h:376
@ MYSQL_PROXIES_PRIV_GRANTOR
Definition: sql_auth_cache.h:377
@ MYSQL_PROXIES_PRIV_PROXIED_USER
Definition: sql_auth_cache.h:375
@ MYSQL_PROXIES_PRIV_TIMESTAMP
Definition: sql_auth_cache.h:378
@ MYSQL_PROXIES_PRIV_USER
Definition: sql_auth_cache.h:373
const char * proxied_user
Definition: sql_auth_cache.h:368
const char * get_proxied_user()
Definition: sql_auth_cache.h:396
const char * user
Definition: sql_auth_cache.h:366
bool granted_on(const char *host_arg, const char *user_arg)
Definition: sql_auth_cache.h:412
bool with_grant
Definition: sql_auth_cache.h:369
Definition: sql_auth_cache.h:308
Password_locked_state()
Definition: sql_auth_cache.h:330
bool is_default() const
Definition: sql_auth_cache.h:313
void set_parameters(int password_lock_time_days, uint failed_login_attempts)
Definition: sql_auth_cache.cc:378
int m_password_lock_time_days
read from the user config.
Definition: sql_auth_cache.h:340
uint get_failed_login_attempts() const
Definition: sql_auth_cache.h:320
bool is_active() const
Definition: sql_auth_cache.h:310
void set_temporary_lock_state_parameters(uint remaining_login_attempts, long daynr_locked)
Definition: sql_auth_cache.cc:372
uint m_remaining_login_attempts
The remaining login tries, valid only if m_failed_login_attempts and m_password_lock_time_days are no...
Definition: sql_auth_cache.h:350
long m_daynr_locked
The day the account is locked, 0 if not locked.
Definition: sql_auth_cache.h:352
uint get_remaining_login_attempts() const
Definition: sql_auth_cache.h:321
uint m_failed_login_attempts
read from the user config.
Definition: sql_auth_cache.h:345
int get_password_lock_time_days() const
Definition: sql_auth_cache.h:317
bool update(THD *thd, bool successful_login, long *ret_days_remaining)
Updates the password locked state based on the time of day fetched from the THD.
Definition: sql_auth_cache.cc:397
long get_daynr_locked() const
Definition: sql_auth_cache.h:324
Class that compares ACL_USER objects.
Definition: sql_auth_cache.h:195
bool operator()(const ACL_USER &a, const ACL_USER &b)
Determine sort order of two user accounts.
Definition: sql_auth_cache.cc:3943
Definition: sql_auth_cache.h:247
bool account_locked
Specifies whether the user account is locked or unlocked.
Definition: sql_auth_cache.h:262
Acl_credential credentials[NUM_CREDENTIALS]
Additional credentials.
Definition: sql_auth_cache.h:299
void set_mfa(MEM_ROOT *mem, I_multi_factor_auth *m)
Definition: sql_auth_cache.cc:497
MYSQL_TIME password_last_changed
Definition: sql_auth_cache.h:256
bool use_default_password_reuse_interval
Ignore password_reuse_interval, use the global default global_password_reuse_interval.
Definition: sql_auth_cache.h:289
uint password_lifetime
Definition: sql_auth_cache.h:257
Lex_acl_attrib_udyn password_require_current
The current password needed to be specified while changing it.
Definition: sql_auth_cache.h:294
bool can_authenticate
Definition: sql_auth_cache.h:255
bool is_role
If this ACL_USER was used as a role id then this flag is true.
Definition: sql_auth_cache.h:268
void set_host(MEM_ROOT *mem, const char *host_arg)
Definition: sql_auth_cache.cc:493
LEX_CSTRING plugin
Definition: sql_auth_cache.h:253
bool use_default_password_history
Ignore password_history_length, use the global default global_password_history.
Definition: sql_auth_cache.h:279
ACL_USER()
Definition: sql_auth_cache.cc:334
enum SSL_type ssl_type
Definition: sql_auth_cache.h:251
const char * x509_subject
Definition: sql_auth_cache.h:252
const char * ssl_cipher
Definition: sql_auth_cache.h:252
size_t get_username_length() const
Definition: sql_auth_cache.h:307
uint32 password_reuse_interval
The number of days that would have to pass before a password can be reused.
Definition: sql_auth_cache.h:284
I_multi_factor_auth * m_mfa
Definition: sql_auth_cache.h:354
bool password_expired
Definition: sql_auth_cache.h:254
USER_RESOURCES user_resource
Definition: sql_auth_cache.h:249
void set_user(MEM_ROOT *mem, const char *user_arg)
Definition: sql_auth_cache.cc:489
class ACL_USER::Password_locked_state password_locked_state
char * user
Definition: sql_auth_cache.h:250
const char * x509_issuer
Definition: sql_auth_cache.h:252
bool use_default_password_lifetime
Definition: sql_auth_cache.h:258
uint32 password_history_length
The number of old passwords to check when setting a new password.
Definition: sql_auth_cache.h:273
ACL_USER * copy(MEM_ROOT *root)
Definition: sql_auth_cache.cc:455
Class that compares ACL_ACCESS objects.
Definition: sql_auth_cache.h:173
bool operator()(const ACL_ACCESS &a, const ACL_ACCESS &b)
Determine sort order of two user accounts.
Definition: sql_auth_cache.cc:3913
Enables preserving temporary account locking attributes during ACL DDL.
Definition: sql_auth_cache.h:863
static bool is_modified(ACL_USER *acl_user)
Definition: sql_auth_cache.cc:2150
const char * m_host
Definition: sql_auth_cache.h:882
const uint m_remaining_login_attempts
Definition: sql_auth_cache.h:884
static void restore_temporary_account_locking(Prealloced_array< ACL_USER, ACL_PREALLOC_SIZE > *old_acl_users, Lock_state_list *modified_user_lock_state_list)
Enables restoring temporary account locking attributes of all users after ACL reload.
Definition: sql_auth_cache.cc:2219
const long m_daynr_locked
Definition: sql_auth_cache.h:885
static void restore_user_lock_state(const char *host, const char *user, uint remaining_login_attempts, long daynr_locked)
Enables restoring temporary account locking attributes of a user after ACL reload.
Definition: sql_auth_cache.cc:2197
const char * m_user
Definition: sql_auth_cache.h:883
ACL_temporary_lock_state(const char *host, const char *user, uint remaining_login_attempts, long daynr_locked)
Definition: sql_auth_cache.cc:2142
static ACL_USER * preserve_user_lock_state(const char *host, const char *user, Lock_state_list &user_list)
Enables preserving temporary account locking attributes of a user during ACL DDL.
Definition: sql_auth_cache.cc:2169
Definition: sql_auth_cache.h:498
Acl_cache_allocator(const Acl_cache_allocator< U > &other)
Definition: sql_auth_cache.h:507
Acl_cache_allocator & operator=(const Acl_cache_allocator< U > &other)
Definition: sql_auth_cache.h:511
Acl_cache_allocator()
Definition: sql_auth_cache.h:500
Lock guard for ACL Cache.
Definition: sql_auth_cache.h:780
Acl_cache_lock_guard(THD *thd, Acl_cache_lock_mode mode)
Acl_cache_lock_guard constructor.
Definition: sql_auth_cache.cc:3694
Acl_cache_lock_mode m_mode
Lock mode.
Definition: sql_auth_cache.h:801
bool lock(bool raise_error=true)
Explicitly take lock on Acl_cache_lock_cache object.
Definition: sql_auth_cache.cc:3710
void unlock()
Explicitly unlock all acquired locks.
Definition: sql_auth_cache.cc:3740
~Acl_cache_lock_guard()
Acl_cache_lock_guard destructor.
Definition: sql_auth_cache.h:789
bool already_locked()
Check whether lock is already obtained or not.
Definition: sql_auth_cache.cc:3772
bool m_locked
Lock status.
Definition: sql_auth_cache.h:803
THD * m_thd
Handle to THD object.
Definition: sql_auth_cache.h:799
Definition: sql_auth_cache.h:695
int32 size()
Return a snapshot of the number of items in the cache.
Definition: sql_auth_cache.cc:3456
void increase_version()
When ever the role graph is modified we must flatten the privileges again.
Definition: sql_auth_cache.cc:3434
uint64 version()
Return a lower boundary to the current version count.
Definition: sql_auth_cache.cc:3454
~Acl_cache()
Definition: sql_auth_cache.cc:3355
Acl_map * create_acl_map(uint64 version, Security_context *sctx)
Creates a new acl map for the authorization id of the security context.
Definition: sql_auth_cache.cc:3595
mysql_mutex_t m_cache_flush_mutex
Definition: sql_auth_cache.h:764
void flush_cache()
Removes all acl map objects with a references count of zero.
Definition: sql_auth_cache.cc:3543
std::atomic< uint64 > m_role_graph_version
Role graph version counter.
Definition: sql_auth_cache.h:762
void clear_acl_cache()
Removes all acl map objects when shutdown_acl_cache is called.
Definition: sql_auth_cache.cc:3577
Acl_cache_internal m_cache
Definition: sql_auth_cache.h:763
Acl_cache()
Definition: sql_auth_cache.cc:3342
Acl_map * checkout_acl_map(Security_context *sctx, Auth_id_ref &uid, List_of_auth_id_refs &active_roles)
Returns a pointer to an acl map to the caller and increase the reference count on the object,...
Definition: sql_auth_cache.cc:3458
void return_acl_map(Acl_map *map)
When the security context is done with the acl map it calls the cache to decrease the reference count...
Definition: sql_auth_cache.cc:3514
Definition: sql_auth_cache.h:225
uint8 m_salt[SCRAMBLE_LENGTH+1]
The salt variable is used as the password hash for native_password_authetication.
Definition: sql_auth_cache.h:239
uint8 m_salt_len
In the old protocol the salt_len indicated what type of autnetication protocol was used: 0 - no passw...
Definition: sql_auth_cache.h:244
LEX_CSTRING m_auth_string
Definition: sql_auth_cache.h:234
Acl_credential()
Definition: sql_auth_cache.h:227
Container for global, schema, table/view and routine ACL maps.
Definition: sql_auth_cache.h:650
Grant_acl_set * grant_acls()
Definition: sql_auth_cache.cc:3418
void increase_reference_count()
Definition: sql_auth_cache.cc:3430
std::atomic< int32 > m_reference_count
Definition: sql_auth_cache.h:680
Dynamic_privileges * dynamic_privileges()
Definition: sql_auth_cache.cc:3424
Restrictions & restrictions()
Definition: sql_auth_cache.cc:3428
Acl_map(Security_context *sctx, uint64 ver)
Definition: sql_auth_cache.cc:3360
Acl_map & operator=(const Acl_map &map)
Definition: sql_auth_cache.cc:3408
void decrease_reference_count()
Definition: sql_auth_cache.cc:3432
Acl_map(const Acl_map &map)=delete
~Acl_map()
Definition: sql_auth_cache.cc:3387
Db_access_map * db_acls()
Definition: sql_auth_cache.cc:3412
SP_access_map m_sp_acls
Definition: sql_auth_cache.h:686
Table_access_map m_table_acls
Definition: sql_auth_cache.h:684
Access_bitmask m_global_acl
Definition: sql_auth_cache.h:685
uint32 reference_count()
Definition: sql_auth_cache.h:677
Db_access_map * db_wild_acls()
Definition: sql_auth_cache.cc:3414
Access_bitmask global_acl()
Definition: sql_auth_cache.cc:3410
Db_access_map m_db_acls
Definition: sql_auth_cache.h:682
uint64 m_version
Definition: sql_auth_cache.h:681
Db_access_map m_db_wild_acls
Definition: sql_auth_cache.h:683
Table_access_map * table_acls()
Definition: sql_auth_cache.cc:3416
SP_access_map * sp_acls()
Definition: sql_auth_cache.cc:3420
Dynamic_privileges m_dynamic_privileges
Definition: sql_auth_cache.h:689
SP_access_map * func_acls()
Definition: sql_auth_cache.cc:3422
Restrictions m_restrictions
Definition: sql_auth_cache.h:690
SP_access_map m_func_acls
Definition: sql_auth_cache.h:687
Grant_acl_set m_with_admin_acls
Definition: sql_auth_cache.h:688
uint64 version()
Definition: sql_auth_cache.h:676
Cache to store the Restrictions of every auth_id.
Definition: sql_auth_cache.h:816
Acl_restrictions(Acl_restrictions &&)=delete
malloc_unordered_map< std::string, Restrictions > m_restrictions_map
Definition: sql_auth_cache.h:833
Acl_restrictions(const Acl_restrictions &)=delete
Acl_restrictions & operator=(Acl_restrictions &&)=delete
void upsert_restrictions(const ACL_USER *acl_user, const Restrictions &restriction)
Update, insert or remove the Restrictions for the ACL_USER.
Definition: sql_auth_cache.cc:4000
Restrictions find_restrictions(const ACL_USER *acl_user) const
Find the Restrictions of the ACL_USER.
Definition: sql_auth_cache.cc:4027
size_t size() const
Definition: sql_auth_cache.cc:4041
void remove_restrictions(const ACL_USER *acl_user)
Remove the Restrictions of the ACL_USER.
Definition: sql_auth_cache.cc:3980
Acl_restrictions & operator=(const Acl_restrictions &)=delete
Acl_restrictions()
Construstor.
Definition: sql_auth_cache.cc:3973
Definition: sql_auth_cache.h:450
Access_bitmask rights
Definition: sql_auth_cache.h:452
GRANT_COLUMN(String &c, Access_bitmask y)
Definition: sql_auth_cache.cc:920
std::string column
Definition: sql_auth_cache.h:453
Definition: sql_auth_cache.h:457
void set_user_details(const char *h, const char *d, const char *u, const char *t, bool is_routine)
Definition: sql_auth_cache.cc:923
std::string hash_key
Definition: sql_auth_cache.h:465
char * tname
Definition: sql_auth_cache.h:462
const char * user
Definition: sql_auth_cache.h:461
Access_bitmask privs
Definition: sql_auth_cache.h:463
ACL_HOST_AND_IP host
Definition: sql_auth_cache.h:459
char * db
Definition: sql_auth_cache.h:460
virtual ~GRANT_NAME()=default
ulong sort
Definition: sql_auth_cache.h:464
GRANT_NAME(const char *h, const char *d, const char *u, const char *t, Access_bitmask p, bool is_routine)
Definition: sql_auth_cache.cc:947
virtual bool ok()
Definition: sql_auth_cache.h:470
Definition: sql_auth_cache.h:475
collation_unordered_multimap< std::string, unique_ptr_destroy_only< GRANT_COLUMN > > hash_columns
Definition: sql_auth_cache.h:480
GRANT_TABLE(const char *h, const char *d, const char *u, const char *t, Access_bitmask p, Access_bitmask c)
Definition: sql_auth_cache.cc:953
bool init(TABLE *col_privs)
Definition: sql_auth_cache.cc:1011
bool ok() override
Definition: sql_auth_cache.h:487
Access_bitmask cols
Definition: sql_auth_cache.h:477
An interface to access information about Multi factor authentication methods.
Definition: sql_mfa.h:45
Malloc_allocator is a C++ STL memory allocator based on my_malloc/my_free.
Definition: malloc_allocator.h:63
A typesafe replacement for DYNAMIC_ARRAY.
Definition: prealloced_array.h:71
Container of all restrictions for a given user.
Definition: partial_revokes.h:155
A set of THD members describing the current authenticated user.
Definition: sql_security_ctx.h:55
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:168
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:34
Definition: auth_internal.h:68
Definition: sql_auth_cache.h:443
uint16 length
Definition: sql_auth_cache.h:446
char key[1]
Definition: sql_auth_cache.h:447
Access_bitmask access
Definition: sql_auth_cache.h:445
std::unordered_map, but with my_malloc and collation-aware comparison.
Definition: map_helpers.h:210
std::unordered_multimap, but with my_malloc and collation-aware comparison.
Definition: map_helpers.h:226
std::unordered_map, but with my_malloc, so that you can track the memory used using PSI memory keys.
Definition: map_helpers.h:148
std::unordered_multimap, but with my_malloc, so that you can track the memory used using PSI memory k...
Definition: map_helpers.h:189
const char * p
Definition: ctype-mb.cc:1237
Fido Client Authentication nullptr
Definition: fido_client_plugin.cc:222
A better implementation of the UNIX ctype(3) library.
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1545
#define my_strcasecmp(s, a, b)
Definition: m_ctype.h:718
#define my_casedn_str(s, a)
Definition: m_ctype.h:770
static auto find_or_nullptr(const Container &container, const Key &key)
Some useful helpers for associative arrays with MySQL-specific semantics.
Definition: map_helpers.h:54
const char wild_many
Character constant for wildcard representing zero or more characters (SQL style).
Definition: mf_wcomp.h:43
const char wild_one
Character constant for wildcard representing any one character (SQL style).
Definition: mf_wcomp.h:37
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
std::unique_ptr< T, Destroy_only< T > > unique_ptr_destroy_only
std::unique_ptr, but only destroying.
Definition: my_alloc.h:489
Header for compiler-dependent features.
Some integer typedefs for easier portability.
uint8_t uint8
Definition: my_inttypes.h:63
int32_t int32
Definition: my_inttypes.h:66
uint64_t uint64
Definition: my_inttypes.h:69
uint16_t uint16
Definition: my_inttypes.h:65
uint32_t uint32
Definition: my_inttypes.h:67
#define UINT_MAX32
Definition: my_inttypes.h:79
Functions related to handling of plugins and other dynamically loaded libraries.
#define MYSQL_PLUGIN_IMPORT
Definition: my_sharedlib.h:71
Common header for many mysys elements.
Common definition between mysql server & client.
#define SCRAMBLE_LENGTH
Length of random string sent by server on handshake; this is also length of obfuscated password,...
Definition: mysql_com.h:128
ABI for instrumented mutexes.
Time declarations shared between the server and client API: you should not add anything to this heade...
char * user
Definition: mysqladmin.cc:60
const char * host
Definition: mysqladmin.cc:59
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1057
Tag dispatch for custom Role_properties.
Definition: sql_auth_cache.h:601
BOOST_INSTALL_PROPERTY(vertex, acl_user)
vertex_acl_user_t
Definition: sql_auth_cache.h:602
@ vertex_acl_user
Definition: sql_auth_cache.h:602
const std::string password_lock_time_days("password_lock_time_days")
underkeys of password locking
const std::string failed_login_attempts("failed_login_attempts")
underkeys of password locking
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:76
mode
Definition: file_handle.h:60
std::map< Key, Value, Compare, ut::allocator< std::pair< const Key, Value > > > map
Specialization of map which uses ut_allocator.
Definition: ut0new.h:2893
std::conditional_t< !std::is_array< T >::value, std::unique_ptr< T, detail::Deleter< T > >, std::conditional_t< detail::is_unbounded_array_v< T >, std::unique_ptr< T, detail::Array_deleter< std::remove_extent_t< T > > >, void > > unique_ptr
The following is a common type that is returned by all the ut::make_unique (non-aligned) specializati...
Definition: ut0new.h:2439
PSI_memory_key key_memory_acl_cache
Definition: psi_memory_key.cc:96
required string key
Definition: replication_asynchronous_connection_failover.proto:60
Lex_acl_attrib_udyn
This is generic enum.
Definition: table.h:2544
uint grant_version
Definition: sql_auth_cache.cc:163
std::unique_ptr< malloc_unordered_multimap< std::string, unique_ptr_destroy_only< GRANT_TABLE > > > column_priv_hash
Definition: sql_auth_cache.cc:140
Prealloced_array< ACL_DB, ACL_PREALLOC_SIZE > * acl_dbs
Definition: sql_auth_cache.cc:132
std::unique_ptr< malloc_unordered_multimap< std::string, unique_ptr_destroy_only< GRANT_NAME > > > proc_priv_hash
Definition: sql_auth_cache.cc:143
Acl_user_ptr_list * cached_acl_users_for_name(const char *name)
Fetch the list of ACL_USERs which share name or have no name.
Definition: sql_auth_cache.cc:1156
Acl_cache_allocator< ACL_USER * > Acl_user_ptr_allocator
Definition: sql_auth_cache.h:514
boost::adjacency_list< boost::setS, boost::vecS, boost::bidirectionalS, Role_properties, Role_edge_properties > Granted_roles_graph
A graph of all users/roles privilege inheritance.
Definition: sql_auth_cache.h:624
T * name_hash_search(const malloc_unordered_multimap< std::string, unique_ptr_destroy_only< T > > &name_hash, const char *host, const char *ip, const char *db, const char *user, const char *tname, bool exact, bool name_tolower)
Definition: sql_auth_cache.h:542
Acl_cache_lock_mode
Enum for specifying lock type over Acl cache.
Definition: sql_auth_cache.h:773
MYSQL_PLUGIN_IMPORT CHARSET_INFO * files_charset_info
Definition: mysqld.cc:1545
MEM_ROOT global_acl_memory
Definition: sql_auth_cache.cc:128
Prealloced_array< ACL_USER, ACL_PREALLOC_SIZE > * acl_users
Definition: sql_auth_cache.cc:130
bool allow_all_hosts
Definition: sql_auth_cache.cc:162
boost::property< boost::vertex_acl_user_t, ACL_USER, boost::property< boost::vertex_name_t, std::string > > Role_properties
Custom vertex properties used in Granted_roles_graph TODO ACL_USER contains too much information.
Definition: sql_auth_cache.h:614
boost::graph_traits< Granted_roles_graph >::in_edge_iterator in_edge_itr_t
The type for the iterator returned by in_edges().
Definition: sql_auth_cache.h:647
Acl_cache * get_global_acl_cache()
Definition: sql_auth_cache.cc:106
std::unique_ptr< malloc_unordered_multimap< std::string, unique_ptr_destroy_only< GRANT_NAME > > > func_priv_hash
Definition: sql_auth_cache.h:532
boost::graph_traits< Granted_roles_graph >::out_edge_iterator out_edge_itr_t
The type for the iterator returned by out_edges().
Definition: sql_auth_cache.h:643
std::unique_ptr< Acl_restrictions > acl_restrictions
Definition: sql_auth_cache.cc:147
Prealloced_array< ACL_HOST_AND_IP, ACL_PREALLOC_SIZE > * acl_wild_hosts
Definition: sql_auth_cache.cc:133
void rebuild_cached_acl_users_for_name(void)
Build the lists of ACL_USERs which share name or have no name.
Definition: sql_auth_cache.cc:1106
#define NUM_CREDENTIALS
Definition: sql_auth_cache.h:221
boost::property< boost::edge_capacity_t, int > Role_edge_properties
Definition: sql_auth_cache.h:616
MEM_ROOT memex
Definition: sql_auth_cache.cc:129
boost::graph_traits< Granted_roles_graph >::vertex_descriptor Role_vertex_descriptor
The data type of a vertex in the Granted_roles_graph.
Definition: sql_auth_cache.h:628
boost::graph_traits< Granted_roles_graph >::edge_descriptor Role_edge_descriptor
The data type of an edge in the Granted_roles_graph.
Definition: sql_auth_cache.h:632
GRANT_TABLE * table_hash_search(const char *host, const char *ip, const char *db, const char *user, const char *tname, bool exact)
Definition: sql_auth_cache.h:585
std::list< ACL_USER *, Acl_user_ptr_allocator > Acl_user_ptr_list
Definition: sql_auth_cache.h:515
std::unordered_map< std::string, Role_vertex_descriptor > Role_index_map
The datatype of the map between authids and graph vertex descriptors.
Definition: sql_auth_cache.h:635
boost::graph_traits< Granted_roles_graph >::degree_size_type degree_s_t
The type used for the number of edges incident to a vertex in the graph.
Definition: sql_auth_cache.h:639
GRANT_NAME * routine_hash_search(const char *host, const char *ip, const char *db, const char *user, const char *tname, bool proc, bool exact)
Definition: sql_auth_cache.h:576
collation_unordered_map< std::string, ACL_USER * > * acl_check_hosts
Definition: sql_auth_cache.cc:146
const size_t ACL_PREALLOC_SIZE
Definition: sql_auth_cache.h:522
Prealloced_array< ACL_PROXY_USER, ACL_PREALLOC_SIZE > * acl_proxy_users
Definition: sql_auth_cache.cc:131
GRANT_COLUMN * column_hash_search(GRANT_TABLE *t, const char *cname, size_t length)
Definition: sql_auth_cache.h:593
LF_HASH Acl_cache_internal
Definition: sql_auth_cache.h:693
static MEM_ROOT mem
Definition: sql_servers.cc:99
case opt name
Definition: sslopt-case.h:33
Definition: sql_auth_cache.h:502
Acl_cache_allocator< U > other
Definition: sql_auth_cache.h:503
Definition: m_ctype.h:385
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83
Definition: mysql_lex_string.h:40
Definition: mysql_time.h:82
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:50
Definition: sql_connect.h:41
unsigned int uint
Definition: uca9-dump.cc:75
SSL_type
Definition: violite.h:305