MySQL 9.3.0
Source Code Documentation
sql_security_ctx.h
Go to the documentation of this file.
1/* Copyright (c) 2014, 2025, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23#ifndef SQL_SECURITY_CTX_INCLUDED
24#define SQL_SECURITY_CTX_INCLUDED
25#include <string.h>
26#include <sys/types.h>
27#include <algorithm>
28#include <cinttypes>
29#include <utility>
30
31#include "lex_string.h"
32#include "my_dbug.h"
33#include "my_hostname.h" // HOSTNAME_LENGTH
34#include "mysql_com.h" // USERNAME_LENGTH
37#include "sql/mysqld_cs.h"
38#include "sql/sql_const.h"
39#include "sql_string.h"
40
41/* Forward declaration. Depends on sql_auth_cache.h (which depends on this file)
42 */
43class Acl_map;
44class ACL_USER;
45class THD;
46struct TABLE;
48
49/**
50 @class Security_context
51 @brief A set of THD members describing the current authenticated user.
52*/
53
55 public:
56 Security_context(THD *thd = nullptr);
58
59 Security_context(const Security_context &src_sctx);
60
62
63 void skip_grants(const char *user = "skip-grants user",
64 const char *host = "skip-grants host");
66
67 /**
68 Getter method for member m_user.
69
70 @retval LEX_CSTRING object having constant pointer to m_user.Ptr
71 and its length.
72 */
73 LEX_CSTRING user() const;
74
75 void set_user_ptr(const char *user_arg, const size_t user_arg_length);
76
77 void assign_user(const char *user_arg, const size_t user_arg_length);
78
79 std::pair<bool, bool> has_global_grant(const char *priv, size_t priv_len);
80 std::pair<bool, bool> has_global_grant(const Auth_id &auth_id,
81 const std::string &privilege,
82 bool cumulative = false);
83 bool can_operate_with(const Auth_id &auth_id, const std::string &privilege,
84 bool cumulative = false,
85 bool ignore_if_nonextant = true,
86 bool throw_error = true);
88 bool validate_access = false);
89 void clear_active_roles(void);
91 size_t get_num_active_roles() const;
93 void checkout_access_maps(void);
94 Access_bitmask db_acl(LEX_CSTRING db, bool use_pattern_scan = true) const;
96 const Security_context *sctx,
97 const char *host, const char *ip,
98 const char *user, const char *db,
99 size_t db_len,
100 bool db_is_pattern = false);
101 Access_bitmask check_db_level_access(THD *thd, const char *db, size_t db_len,
102 bool db_is_pattern = false) const;
109 bool has_with_admin_acl(const LEX_CSTRING &role_name,
110 const LEX_CSTRING &role_host);
111 bool any_sp_acl(const LEX_CSTRING &db);
112 bool any_table_acl(const LEX_CSTRING &db);
113
114 bool is_table_blocked(Access_bitmask priv, TABLE const *table);
116 std::vector<std::string> column);
117
118 /**
119 Getter method for member m_host.
120
121 @retval LEX_CSTRING object having constant pointer to m_host.Ptr
122 and its length.
123 */
124
125 LEX_CSTRING host() const;
126
127 void set_host_ptr(const char *host_arg, const size_t host_arg_length);
128
129 void assign_host(const char *host_arg, const size_t host_arg_length);
130
131 /**
132 Getter method for member m_ip.
133
134 @retval LEX_CSTRING object having constant pointer to m_ip.Ptr
135 and its length
136 */
137 LEX_CSTRING ip() const;
138
139 void set_ip_ptr(const char *ip_arg, const int ip_arg_length);
140
141 void assign_ip(const char *ip_arg, const int ip_arg_length);
142
143 /**
144 Getter method for member m_host_or_ip.
145
146 @retval LEX_CSTRING object having constant pointer to m_host_or_ip.Ptr
147 and its length
148 */
149 LEX_CSTRING host_or_ip() const;
150
151 /**
152 Setter method for member m_host_or_ip.
153 */
154 void set_host_or_ip_ptr();
155
156 /**
157 Setter method for member m_host_or_ip.
158
159 @param[in] host_or_ip_arg New user value for m_host_or_ip.
160 @param[in] host_or_ip_arg_length Length of "host_or_ip_arg" param.
161 */
162 void set_host_or_ip_ptr(const char *host_or_ip_arg,
163 const int host_or_ip_arg_length);
164
165 /**
166 Getter method for member m_external_user.
167
168 @retval LEX_CSTRING object having constant pointer to m_external_host.Ptr
169 and its length
170 */
172
173 void set_external_user_ptr(const char *ext_user_arg,
174 const int ext_user_arg_length);
175
176 void assign_external_user(const char *ext_user_arg,
177 const int ext_user_arg_length);
178
179 /**
180 Getter method for member m_priv_user.
181
182 @retval LEX_CSTRING object having constant pointer to m_priv_user.Ptr
183 and its length
184 */
185 LEX_CSTRING priv_user() const;
186
187 void assign_priv_user(const char *priv_user_arg,
188 const size_t priv_user_arg_length);
189
190 /**
191 Getter method for member m_proxy_user.
192
193 @retval LEX_CSTRING object having constant pointer to m_proxy_user.Ptr
194 and its length
195 */
196 LEX_CSTRING proxy_user() const;
197
198 void assign_proxy_user(const char *proxy_user_arg,
199 const size_t proxy_user_arg_length);
200
201 /**
202 Getter method for member m_priv_host.
203
204 @retval LEX_CSTRING object having constant pointer to m_priv_host.Ptr
205 and its length
206 */
207 LEX_CSTRING priv_host() const;
208
209 void assign_priv_host(const char *priv_host_arg,
210 const size_t priv_host_arg_length);
211
212 const char *priv_host_name() const;
213
214 /**
215 Getter method for member m_master_access.
216 */
218
219 Access_bitmask master_access(const std::string &db_name) const;
220
221 const Restrictions restrictions() const;
222
224
227
228 /**
229 Check if a an account has been assigned to the security context
230
231 The account assignment to the security context is always executed in the
232 following order:
233 1) assign user's name to the context
234 2) assign user's hostname to the context
235 Whilst user name can be null, hostname cannot. This is why we can say that
236 the full account has been assigned to the context when hostname is not
237 equal to empty string.
238
239 @return Account assignment status
240 @retval true account has been assigned to the security context
241 @retval false account has not yet been assigned to the security context
242 */
243
244 bool has_account_assigned() const;
245
246 /**
247 Check permission against m_master_access
248 */
249
250 /**
251 Check global access
252 @param want_access The required privileges
253 @param db_name The database name to check if it has restrictions attached
254 @param match_any if the security context must match all or any of the req.
255 * privileges.
256 @return True if the security context fulfills the access requirements.
257 */
258 bool check_access(Access_bitmask want_access, const std::string &db_name = "",
259 bool match_any = false);
260
261 /**
262 Returns the schema level effective privileges (with applied roles)
263 for the currently active schema.
264 */
266
267 /**
268 Cache the schema level effective privileges (apply roles first!) for the
269 currently active schema.
270 */
272
273 /**
274 Getter method for member m_password_expired.
275 */
276 bool password_expired() const;
277
279
280 bool change_security_context(THD *thd, const LEX_CSTRING &definer_user,
281 const LEX_CSTRING &definer_host, const char *db,
282 Security_context **backup, bool force = false);
283
285
287
288 void logout();
289 /**
290 Locked account can still be used as routine definers and when they are
291 there shouldn't be any checks for expired passwords.
292 */
294
296
297 void set_drop_policy(const std::function<void(Security_context *)> &func);
298
299 void add_as_local_temp_privs(const std::vector<std::string> &privs);
300 bool check_in_local_temp_privs(const std::string &priv);
301
302 bool has_drop_policy(void);
303
304 bool has_executed_drop_policy(void);
305
306 void execute_drop_policy(void);
307
309 const std::string &db_name) const;
310
312
315
316 void set_thd(THD *thd);
317
318 THD *get_thd();
319
320 private:
321 void init();
322 void destroy();
323 void copy_security_ctx(const Security_context &src_sctx);
325 const std::string &db_name) const;
327 std::pair<bool, bool> fetch_global_grant(const ACL_USER &acl_user,
328 const std::string &privilege,
329 bool cumulative = false);
331
332 private:
333 /**
334 m_user - user of the client, set to NULL until the user has been read from
335 the connection
336 */
338
339 /** m_host - host of the client */
341
342 /** m_ip - client IP */
344
345 /**
346 m_host_or_ip - points to host if host is available, otherwise points to ip
347 */
349
351
352 /**
353 m_priv_user - The user privilege we are using. May be "" for anonymous user.
354 */
357
360
361 /**
362 The host privilege we are using
363 */
366
367 /**
368 Global privileges from mysql.user.
369 */
371
372 /**
373 Privileges for current db
374 */
376
377 /**
378 password expiration flag.
379
380 This flag is set according to connecting user's context and not the
381 effective user.
382 */
386 /**
387 True if this account can't be logged into.
388 */
390 /**
391 True if the skip_grants_user is set.
392 */
394
399 /**
400 This flag tracks if server should be in sandbox mode or not.
401 When user account connects to server, with any of its authentication
402 plugin's registration step pending, in that case, the connection is
403 set in sandbox(or registration) mode i.e m_registration_sandbox_mode is set
404 to TRUE.
405 During this time only ALTER USER, SET PASSWORD statements are allowed.
406 Once user finishes the registration steps for the authentication plugin
407 via an ALTER USER statement, m_registration_sandbox_mode is set to FALSE,
408 making a full fledged connection, where user can execute any sql statement.
409 */
411
412 /**
413 m_thd - Thread handle, set to nullptr if this does not belong to any THD yet
414 */
416};
417
418/**
419 Getter method for member m_host_or_ip.
420
421 @retval LEX_CSTRING object having constant pointer to m_host_or_ip.Ptr
422 and its length
423*/
426
428
431
432 return host_or_ip;
433}
434
437
438 /*
439 Set host_or_ip to either host or ip if they are available else set it to
440 empty string.
441 */
442 const char *host_or_ip =
443 m_host.length() ? m_host.ptr() : (m_ip.length() ? m_ip.ptr() : "");
444
446}
447
449 const char *host_or_ip_arg, const int host_or_ip_arg_length) {
451
452 m_host_or_ip.set(host_or_ip_arg, host_or_ip_arg_length, system_charset_info);
453}
454
456 LEX_CSTRING ext_user;
457
459
460 ext_user.str = m_external_user.ptr();
461 ext_user.length = m_external_user.length();
462
463 return ext_user;
464}
465
467 return m_master_access;
468}
469
471 return m_restrictions;
472}
473
477 DBUG_PRINT("info", ("Cached master access is %" PRIu32, m_master_access));
478}
479
481 Access_bitmask master_access, const Restrictions &restrictions) {
484}
485
486inline const char *Security_context::priv_host_name() const {
487 return (*m_priv_host ? m_priv_host : "%");
488}
489
491 return m_priv_host[0] != '\0';
492}
493
495 return m_db_access;
496}
497
499 Access_bitmask db_access) {
500 m_db_access = db_access;
501}
502
504 return m_password_expired;
505}
506
507inline void Security_context::set_password_expired(bool password_expired) {
509}
510
513}
514
517}
518
521}
522
525}
526
527inline void Security_context::set_thd(THD *thd) { m_thd = thd; }
528
530
531#endif /* SQL_SECURITY_CTX_INCLUDED */
uint32_t Access_bitmask
Definition: auth_acls.h:34
std::vector< Auth_id_ref > List_of_auth_id_refs
Definition: auth_common.h:84
Definition: sql_auth_cache.h:248
Container for global, schema, table/view and routine ACL maps.
Definition: sql_auth_cache.h:653
Storage container for default auth ids.
Definition: auth_common.h:1078
Definition: sql_list.h:494
Container of all restrictions for a given user.
Definition: partial_revokes.h:155
void clear_db()
Clear database restrictions.
Definition: partial_revokes.cc:1536
A set of THD members describing the current authenticated user.
Definition: sql_security_ctx.h:54
bool user_matches(Security_context *)
Definition: sql_security_ctx.cc:313
String m_external_user
Definition: sql_security_ctx.h:350
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:498
THD * get_thd()
Definition: sql_security_ctx.h:529
Access_bitmask master_access() const
Getter method for member m_master_access.
Definition: sql_security_ctx.h:466
Grant_table_aggregate table_and_column_acls(LEX_CSTRING db, LEX_CSTRING table)
Definition: sql_security_ctx.cc:639
bool any_table_acl(const LEX_CSTRING &db)
Definition: sql_security_ctx.cc:687
String m_host
m_host - host of the client
Definition: sql_security_ctx.h:340
bool m_is_skip_grants_user
True if the skip_grants_user is set.
Definition: sql_security_ctx.h:393
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:397
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:504
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:322
const char * priv_host_name() const
Definition: sql_security_ctx.h:486
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:494
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:883
void init()
Definition: sql_security_ctx.cc:80
LEX_CSTRING host() const
Getter method for member m_host.
Definition: sql_security_ctx.cc:921
LEX_CSTRING priv_user() const
Getter method for member m_priv_user.
Definition: sql_security_ctx.cc:849
void assign_user(const char *user_arg, const size_t user_arg_length)
Setter method for member m_user.
Definition: sql_security_ctx.cc:903
void copy_security_ctx(const Security_context &src_sctx)
Deep copy status of sctx object to this.
Definition: sql_security_ctx.cc:203
void set_password_expired(bool password_expired)
Definition: sql_security_ctx.h:507
void set_drop_policy(const std::function< void(Security_context *)> &func)
Definition: sql_security_ctx.cc:127
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:351
void set_registration_sandbox_mode(bool v)
Definition: sql_security_ctx.h:523
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:1339
Restrictions m_restrictions
Definition: sql_security_ctx.h:398
char m_priv_user[USERNAME_LENGTH]
m_priv_user - The user privilege we are using.
Definition: sql_security_ctx.h:355
static Access_bitmask check_db_level_access(THD *thd, const Security_context *sctx, const char *host, const char *ip, const char *user, const char *db, size_t db_len, bool db_is_pattern=false)
Checks if any database level privileges are granted to the current session either directly or through...
Definition: sql_security_ctx.cc:554
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:1126
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:176
~Security_context()
Definition: sql_security_ctx.cc:61
void checkout_access_maps(void)
Subscribes to a cache entry of aggregated ACLs.
Definition: sql_security_ctx.cc:382
size_t get_num_active_roles() const
Definition: sql_security_ctx.cc:449
THD * m_thd
m_thd - Thread handle, set to nullptr if this does not belong to any THD yet
Definition: sql_security_ctx.h:415
char m_proxy_user[USERNAME_LENGTH+HOSTNAME_LENGTH+6]
Definition: sql_security_ctx.h:358
void set_master_access(Access_bitmask master_access)
Definition: sql_security_ctx.h:474
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:1048
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:337
String m_ip
m_ip - client IP
Definition: sql_security_ctx.h:343
bool any_sp_acl(const LEX_CSTRING &db)
Definition: sql_security_ctx.cc:672
bool has_account_assigned() const
Check if a an account has been assigned to the security context.
Definition: sql_security_ctx.h:490
size_t m_proxy_user_length
Definition: sql_security_ctx.h:359
LEX_CSTRING external_user() const
Getter method for member m_external_user.
Definition: sql_security_ctx.h:455
void assign_host(const char *host_arg, const size_t host_arg_length)
Setter method for member m_host.
Definition: sql_security_ctx.cc:964
Access_bitmask m_db_access
Privileges for current db.
Definition: sql_security_ctx.h:375
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:941
bool m_is_locked
True if this account can't be logged into.
Definition: sql_security_ctx.h:389
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:1305
bool is_in_registration_sandbox_mode()
Definition: sql_security_ctx.h:519
Access_bitmask function_acl(LEX_CSTRING db, LEX_CSTRING procedure_name)
Definition: sql_security_ctx.cc:605
bool m_password_expired
password expiration flag.
Definition: sql_security_ctx.h:383
size_t m_priv_user_length
Definition: sql_security_ctx.h:356
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:293
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:1197
bool is_access_restricted_on_db(Access_bitmask want_access, const std::string &db_name) const
Definition: sql_security_ctx.cc:1182
Security_context(THD *thd=nullptr)
Definition: sql_security_ctx.cc:56
void execute_drop_policy(void)
Definition: sql_security_ctx.cc:120
void assign_ip(const char *ip_arg, const int ip_arg_length)
Setter method for member m_ip.
Definition: sql_security_ctx.cc:1028
List_of_auth_id_refs * get_active_roles()
Definition: sql_security_ctx.cc:445
void init_restrictions(const Restrictions &restrictions)
Definition: sql_security_ctx.cc:1178
Acl_map * m_acl_map
Definition: sql_security_ctx.h:385
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:1068
bool has_with_admin_acl(const LEX_CSTRING &role_name, const LEX_CSTRING &role_host)
Definition: sql_security_ctx.cc:658
Access_bitmask procedure_acl(LEX_CSTRING db, LEX_CSTRING procedure_name)
Definition: sql_security_ctx.cc:587
bool password_expired() const
Getter method for member m_password_expired.
Definition: sql_security_ctx.h:503
LEX_CSTRING ip() const
Getter method for member m_ip.
Definition: sql_security_ctx.cc:988
char m_priv_host[HOSTNAME_LENGTH+1]
The host privilege we are using.
Definition: sql_security_ctx.h:364
size_t m_priv_host_length
Definition: sql_security_ctx.h:365
LEX_CSTRING priv_host() const
Getter method for member m_priv_host.
Definition: sql_security_ctx.cc:1146
void set_host_or_ip_ptr()
Setter method for member m_host_or_ip.
Definition: sql_security_ctx.h:435
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:1226
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:717
void set_thd(THD *thd)
Definition: sql_security_ctx.h:527
void destroy()
Definition: sql_security_ctx.cc:134
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:348
bool m_has_drop_policy
Definition: sql_security_ctx.h:396
LEX_CSTRING user() const
Getter method for member m_user.
Definition: sql_security_ctx.cc:863
void clear_db_restrictions()
Definition: sql_security_ctx.h:515
bool m_executed_drop_policy
Definition: sql_security_ctx.h:395
void logout()
Definition: sql_security_ctx.cc:101
void restore_security_context(THD *thd, Security_context *backup)
Definition: sql_security_ctx.cc:308
Access_bitmask library_acl(LEX_CSTRING db, LEX_CSTRING procedure_name)
Definition: sql_security_ctx.cc:623
Access_bitmask m_master_access
Global privileges from mysql.user.
Definition: sql_security_ctx.h:370
const Restrictions restrictions() const
Definition: sql_security_ctx.h:470
bool m_registration_sandbox_mode
This flag tracks if server should be in sandbox mode or not.
Definition: sql_security_ctx.h:410
void lock_account(bool is_locked)
Definition: sql_security_ctx.h:295
LEX_CSTRING host_or_ip() const
Getter method for member m_host_or_ip.
Definition: sql_security_ctx.h:424
bool is_skip_grants_user()
Definition: sql_security_ctx.h:511
Access_bitmask table_acl(LEX_CSTRING db, LEX_CSTRING table)
Definition: sql_security_ctx.cc:652
List_of_auth_id_refs m_active_roles
Definition: sql_security_ctx.h:384
bool has_executed_drop_policy(void)
Definition: sql_security_ctx.cc:116
bool has_drop_policy(void)
Definition: sql_security_ctx.cc:114
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:281
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:1088
bool has_table_access(Access_bitmask priv, Table_ref *table)
Check if required access to given table is granted.
Definition: sql_security_ctx.cc:1260
void set_ip_ptr(const char *ip_arg, const int ip_arg_length)
Setter method for member m_ip.
Definition: sql_security_ctx.cc:1008
Security_context & operator=(const Security_context &src_sctx)
Definition: sql_security_ctx.cc:68
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:811
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:426
LEX_CSTRING proxy_user() const
Getter method for member m_proxy_user.
Definition: sql_security_ctx.cc:1108
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:1164
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:167
const char * ptr() const
Definition: sql_string.h:249
size_t length() const
Definition: sql_string.h:241
void set(String &str, size_t offset, size_t arg_length)
Definition: sql_string.h:302
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Definition: table.h:2904
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1564
#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:198
Common definition between mysql server & client.
#define USERNAME_LENGTH
Definition: mysql_com.h:69
static PFS_engine_table_share_proxy table
Definition: pfs.cc:61
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:2440
File containing constants that can be used throughout the server.
Our own string classes, used pervasively throughout the executor.
Definition: auth_internal.h:57
Definition: mysql_lex_string.h:40
const char * str
Definition: mysql_lex_string.h:41
size_t length
Definition: mysql_lex_string.h:42
Definition: table.h:1425
int is_locked(int fd)