23#ifndef SQL_SECURITY_CTX_INCLUDED 
   24#define SQL_SECURITY_CTX_INCLUDED 
   65                   const char *
host = 
"skip-grants host");
 
   76  void set_user_ptr(
const char *user_arg, 
const size_t user_arg_length);
 
   78  void assign_user(
const char *user_arg, 
const size_t user_arg_length);
 
   82                                         const std::string &privilege,
 
   83                                         bool cumulative = 
false);
 
   85                        bool cumulative = 
false,
 
   86                        bool ignore_if_nonextant = 
true,
 
   87                        bool throw_error = 
true);
 
   89                    bool validate_access = 
false);
 
  108                         std::vector<std::string> column);
 
  119  void set_host_ptr(
const char *host_arg, 
const size_t host_arg_length);
 
  121  void assign_host(
const char *host_arg, 
const size_t host_arg_length);
 
  131  void set_ip_ptr(
const char *ip_arg, 
const int ip_arg_length);
 
  133  void assign_ip(
const char *ip_arg, 
const int ip_arg_length);
 
  155                          const int host_or_ip_arg_length);
 
  166                             const int ext_user_arg_length);
 
  169                            const int ext_user_arg_length);
 
  180                        const size_t priv_user_arg_length);
 
  191                         const size_t proxy_user_arg_length);
 
  202                        const size_t priv_host_arg_length);
 
  251                    bool match_any = 
false);
 
  301                                  const std::string &
db_name) 
const;
 
  317                               const std::string &
db_name) 
const;
 
  320                                           const std::string &privilege,
 
  321                                           bool cumulative = 
false);
 
  441    const char *host_or_ip_arg, 
const int host_or_ip_arg_length) {
 
uint32_t Access_bitmask
Definition: auth_acls.h:34
 
std::vector< Auth_id_ref > List_of_auth_id_refs
Definition: auth_common.h:83
 
Definition: sql_auth_cache.h:247
 
Container for global, schema, table/view and routine ACL maps.
Definition: sql_auth_cache.h:650
 
Storage container for default auth ids.
Definition: auth_common.h:1077
 
Definition: sql_list.h:434
 
Container of all restrictions for a given user.
Definition: partial_revokes.h:155
 
void clear_db()
Clear database restrictions.
Definition: partial_revokes.cc:1541
 
A set of THD members describing the current authenticated user.
Definition: sql_security_ctx.h:55
 
bool user_matches(Security_context *)
Definition: sql_security_ctx.cc:311
 
String m_external_user
Definition: sql_security_ctx.h:342
 
void cache_current_db_access(Access_bitmask db_access)
Cache the schema level effective privileges (apply roles first!) for the currently active schema.
Definition: sql_security_ctx.h:490
 
THD * get_thd()
Definition: sql_security_ctx.h:521
 
Access_bitmask master_access() const
Getter method for member m_master_access.
Definition: sql_security_ctx.h:458
 
Grant_table_aggregate table_and_column_acls(LEX_CSTRING db, LEX_CSTRING table)
Definition: sql_security_ctx.cc:570
 
bool any_table_acl(const LEX_CSTRING &db)
Definition: sql_security_ctx.cc:618
 
String m_host
m_host - host of the client
Definition: sql_security_ctx.h:332
 
bool m_is_skip_grants_user
True if the skip_grants_user is set.
Definition: sql_security_ctx.h:385
 
bool check_in_local_temp_privs(const std::string &priv)
 
std::unique_ptr< std::function< void(Security_context *)> > m_drop_policy
Definition: sql_security_ctx.h:389
 
void add_as_local_temp_privs(const std::vector< std::string > &privs)
 
Access_bitmask db_acl(LEX_CSTRING db, bool use_pattern_scan=true) const
Get grant information for given database.
Definition: sql_security_ctx.cc:499
 
bool check_access(Access_bitmask want_access, const std::string &db_name="", bool match_any=false)
Check permission against m_master_access.
Definition: sql_security_ctx.cc:320
 
const char * priv_host_name() const
Definition: sql_security_ctx.h:478
 
Access_bitmask current_db_access() const
Returns the schema level effective privileges (with applied roles) for the currently active schema.
Definition: sql_security_ctx.h:486
 
void set_user_ptr(const char *user_arg, const size_t user_arg_length)
Setter method for member m_user.
Definition: sql_security_ctx.cc:814
 
void init()
Definition: sql_security_ctx.cc:78
 
LEX_CSTRING host() const
Getter method for member m_host.
Definition: sql_security_ctx.cc:852
 
LEX_CSTRING priv_user() const
Getter method for member m_priv_user.
Definition: sql_security_ctx.cc:780
 
void assign_user(const char *user_arg, const size_t user_arg_length)
Setter method for member m_user.
Definition: sql_security_ctx.cc:834
 
void copy_security_ctx(const Security_context &src_sctx)
Deep copy status of sctx object to this.
Definition: sql_security_ctx.cc:201
 
void set_password_expired(bool password_expired)
Definition: sql_security_ctx.h:499
 
void set_drop_policy(const std::function< void(Security_context *)> &func)
Definition: sql_security_ctx.cc:125
 
int activate_role(LEX_CSTRING user, LEX_CSTRING host, bool validate_access=false)
This method pushes a role to the list of active roles.
Definition: sql_security_ctx.cc:349
 
void set_registration_sandbox_mode(bool v)
Definition: sql_security_ctx.h:515
 
bool has_column_access(Access_bitmask priv, TABLE const *table, std::vector< std::string > column)
Check if required access to given table column is granted.
Definition: sql_security_ctx.cc:1270
 
Restrictions m_restrictions
Definition: sql_security_ctx.h:390
 
char m_priv_user[USERNAME_LENGTH]
m_priv_user - The user privilege we are using.
Definition: sql_security_ctx.h:347
 
void assign_proxy_user(const char *proxy_user_arg, const size_t proxy_user_arg_length)
Setter method for member m_proxy_user.
Definition: sql_security_ctx.cc:1057
 
void skip_grants(const char *user="skip-grants user", const char *host="skip-grants host")
Grants all privilegs to user.
Definition: sql_security_ctx.cc:174
 
~Security_context()
Definition: sql_security_ctx.cc:59
 
void checkout_access_maps(void)
Subscribes to a cache entry of aggregated ACLs.
Definition: sql_security_ctx.cc:380
 
size_t get_num_active_roles() const
Definition: sql_security_ctx.cc:447
 
THD * m_thd
m_thd - Thread handle, set to nullptr if this does not belong to any THD yet
Definition: sql_security_ctx.h:407
 
char m_proxy_user[USERNAME_LENGTH+HOSTNAME_LENGTH+6]
Definition: sql_security_ctx.h:350
 
void set_master_access(Access_bitmask master_access)
Definition: sql_security_ctx.h:466
 
void set_external_user_ptr(const char *ext_user_arg, const int ext_user_arg_length)
Setter method for member m_external_user.
Definition: sql_security_ctx.cc:979
 
String m_user
m_user - user of the client, set to NULL until the user has been read from the connection
Definition: sql_security_ctx.h:329
 
String m_ip
m_ip - client IP
Definition: sql_security_ctx.h:335
 
bool any_sp_acl(const LEX_CSTRING &db)
Definition: sql_security_ctx.cc:603
 
bool has_account_assigned() const
Check if a an account has been assigned to the security context.
Definition: sql_security_ctx.h:482
 
size_t m_proxy_user_length
Definition: sql_security_ctx.h:351
 
LEX_CSTRING external_user() const
Getter method for member m_external_user.
Definition: sql_security_ctx.h:447
 
void assign_host(const char *host_arg, const size_t host_arg_length)
Setter method for member m_host.
Definition: sql_security_ctx.cc:895
 
Access_bitmask m_db_access
Privileges for current db.
Definition: sql_security_ctx.h:367
 
void set_host_ptr(const char *host_arg, const size_t host_arg_length)
Setter method for member m_host.
Definition: sql_security_ctx.cc:872
 
bool m_is_locked
True if this account can't be logged into.
Definition: sql_security_ctx.h:381
 
bool is_table_blocked(Access_bitmask priv, TABLE const *table)
Check if required access to given table is not restricted.
Definition: sql_security_ctx.cc:1236
 
bool is_in_registration_sandbox_mode()
Definition: sql_security_ctx.h:511
 
Access_bitmask function_acl(LEX_CSTRING db, LEX_CSTRING procedure_name)
Definition: sql_security_ctx.cc:551
 
bool m_password_expired
password expiration flag.
Definition: sql_security_ctx.h:375
 
size_t m_priv_user_length
Definition: sql_security_ctx.h:348
 
bool account_is_locked()
Locked account can still be used as routine definers and when they are there shouldn't be any checks ...
Definition: sql_security_ctx.h:285
 
Access_bitmask filter_access(const Access_bitmask access, const std::string &db_name) const
If there is a restriction attached to an access on the given database then remove that access otherwi...
Definition: sql_security_ctx.cc:1128
 
bool is_access_restricted_on_db(Access_bitmask want_access, const std::string &db_name) const
Definition: sql_security_ctx.cc:1113
 
Security_context(THD *thd=nullptr)
Definition: sql_security_ctx.cc:54
 
void execute_drop_policy(void)
Definition: sql_security_ctx.cc:118
 
void assign_ip(const char *ip_arg, const int ip_arg_length)
Setter method for member m_ip.
Definition: sql_security_ctx.cc:959
 
List_of_auth_id_refs * get_active_roles()
Definition: sql_security_ctx.cc:443
 
void init_restrictions(const Restrictions &restrictions)
Definition: sql_security_ctx.cc:1109
 
Acl_map * m_acl_map
Definition: sql_security_ctx.h:377
 
void assign_external_user(const char *ext_user_arg, const int ext_user_arg_length)
Setter method for member m_external_user.
Definition: sql_security_ctx.cc:999
 
bool has_with_admin_acl(const LEX_CSTRING &role_name, const LEX_CSTRING &role_host)
Definition: sql_security_ctx.cc:589
 
Access_bitmask procedure_acl(LEX_CSTRING db, LEX_CSTRING procedure_name)
Definition: sql_security_ctx.cc:533
 
bool password_expired() const
Getter method for member m_password_expired.
Definition: sql_security_ctx.h:495
 
LEX_CSTRING ip() const
Getter method for member m_ip.
Definition: sql_security_ctx.cc:919
 
char m_priv_host[HOSTNAME_LENGTH+1]
The host privilege we are using.
Definition: sql_security_ctx.h:356
 
size_t m_priv_host_length
Definition: sql_security_ctx.h:357
 
LEX_CSTRING priv_host() const
Getter method for member m_priv_host.
Definition: sql_security_ctx.cc:1077
 
void set_host_or_ip_ptr()
Setter method for member m_host_or_ip.
Definition: sql_security_ctx.h:427
 
std::pair< bool, bool > fetch_global_grant(const ACL_USER &acl_user, const std::string &privilege, bool cumulative=false)
Checks if the acl_user does have the asked dynamic privilege.
Definition: sql_security_ctx.cc:1157
 
std::pair< bool, bool > has_global_grant(const char *priv, size_t priv_len)
Checks if the Current_user has the asked dynamic privilege.
Definition: sql_security_ctx.cc:648
 
void set_thd(THD *thd)
Definition: sql_security_ctx.h:519
 
void destroy()
Definition: sql_security_ctx.cc:132
 
String m_host_or_ip
m_host_or_ip - points to host if host is available, otherwise points to ip
Definition: sql_security_ctx.h:340
 
bool m_has_drop_policy
Definition: sql_security_ctx.h:388
 
LEX_CSTRING user() const
Getter method for member m_user.
Definition: sql_security_ctx.cc:794
 
void clear_db_restrictions()
Definition: sql_security_ctx.h:507
 
bool m_executed_drop_policy
Definition: sql_security_ctx.h:387
 
void logout()
Definition: sql_security_ctx.cc:99
 
void restore_security_context(THD *thd, Security_context *backup)
Definition: sql_security_ctx.cc:306
 
Access_bitmask m_master_access
Global privileges from mysql.user.
Definition: sql_security_ctx.h:362
 
const Restrictions restrictions() const
Definition: sql_security_ctx.h:462
 
bool m_registration_sandbox_mode
This flag tracks if server should be in sandbox mode or not.
Definition: sql_security_ctx.h:402
 
void lock_account(bool is_locked)
Definition: sql_security_ctx.h:287
 
LEX_CSTRING host_or_ip() const
Getter method for member m_host_or_ip.
Definition: sql_security_ctx.h:416
 
bool is_skip_grants_user()
Definition: sql_security_ctx.h:503
 
Access_bitmask table_acl(LEX_CSTRING db, LEX_CSTRING table)
Definition: sql_security_ctx.cc:583
 
List_of_auth_id_refs m_active_roles
Definition: sql_security_ctx.h:376
 
bool has_executed_drop_policy(void)
Definition: sql_security_ctx.cc:114
 
bool has_drop_policy(void)
Definition: sql_security_ctx.cc:112
 
bool change_security_context(THD *thd, const LEX_CSTRING &definer_user, const LEX_CSTRING &definer_host, const char *db, Security_context **backup, bool force=false)
Initialize this security context from the passed in credentials and activate it in the current thread...
Definition: sql_security_ctx.cc:279
 
void assign_priv_user(const char *priv_user_arg, const size_t priv_user_arg_length)
Setter method for member m_priv_user.
Definition: sql_security_ctx.cc:1019
 
bool has_table_access(Access_bitmask priv, Table_ref *table)
Check if required access to given table is granted.
Definition: sql_security_ctx.cc:1191
 
void set_ip_ptr(const char *ip_arg, const int ip_arg_length)
Setter method for member m_ip.
Definition: sql_security_ctx.cc:939
 
Security_context & operator=(const Security_context &src_sctx)
Definition: sql_security_ctx.cc:66
 
bool can_operate_with(const Auth_id &auth_id, const std::string &privilege, bool cumulative=false, bool ignore_if_nonextant=true, bool throw_error=true)
Checks if the specified auth_id with privilege can work with the current_user.
Definition: sql_security_ctx.cc:742
 
void clear_active_roles(void)
This helper method clears the active roles list and frees the allocated memory used for any previousl...
Definition: sql_security_ctx.cc:424
 
LEX_CSTRING proxy_user() const
Getter method for member m_proxy_user.
Definition: sql_security_ctx.cc:1039
 
void assign_priv_host(const char *priv_host_arg, const size_t priv_host_arg_length)
Setter method for member m_priv_host.
Definition: sql_security_ctx.cc:1095
 
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:168
 
const char * ptr() const
Definition: sql_string.h:250
 
size_t length() const
Definition: sql_string.h:242
 
void set(String &str, size_t offset, size_t arg_length)
Definition: sql_string.h:281
 
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:34
 
A better implementation of the UNIX ctype(3) library.
 
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1546
 
#define DBUG_PRINT(keyword, arglist)
Definition: my_dbug.h:181
 
#define DBUG_TRACE
Definition: my_dbug.h:146
 
Common definition used by mysys, performance schema and server & client.
 
static constexpr int HOSTNAME_LENGTH
Definition: my_hostname.h:43
 
static bool backup
Definition: myisampack.cc:195
 
Common definition between mysql server & client.
 
#define USERNAME_LENGTH
Definition: mysql_com.h:69
 
const char * db_name
Definition: rules_table_service.cc:55
 
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:2443
 
File containing constants that can be used throughout the server.
 
Our own string classes, used pervasively throughout the executor.
 
Definition: auth_internal.h:59
 
Definition: mysql_lex_string.h:40
 
const char * str
Definition: mysql_lex_string.h:41
 
size_t length
Definition: mysql_lex_string.h:42