MySQL 8.0.37
Source Code Documentation
sql_security_ctx.h
Go to the documentation of this file.
1/* Copyright (c) 2014, 2024, 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 <utility>
29
30#include "lex_string.h"
31#include "m_ctype.h"
32#include "m_string.h"
33#include "my_dbug.h"
34#include "my_hostname.h" // HOSTNAME_LENGTH
35#include "mysql_com.h" // USERNAME_LENGTH
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 ulong db_acl(LEX_CSTRING db, bool use_pattern_scan = true) const;
95 ulong procedure_acl(LEX_CSTRING db, LEX_CSTRING procedure_name);
96 ulong function_acl(LEX_CSTRING db, LEX_CSTRING procedure_name);
97 ulong table_acl(LEX_CSTRING db, LEX_CSTRING table);
99 LEX_CSTRING table);
100 bool has_with_admin_acl(const LEX_CSTRING &role_name,
101 const LEX_CSTRING &role_host);
102 bool any_sp_acl(const LEX_CSTRING &db);
103 bool any_table_acl(const LEX_CSTRING &db);
104
105 bool is_table_blocked(ulong priv, TABLE const *table);
106 bool has_column_access(ulong priv, TABLE const *table,
107 std::vector<std::string> column);
108
109 /**
110 Getter method for member m_host.
111
112 @retval LEX_CSTRING object having constant pointer to m_host.Ptr
113 and its length.
114 */
115
116 LEX_CSTRING host() const;
117
118 void set_host_ptr(const char *host_arg, const size_t host_arg_length);
119
120 void assign_host(const char *host_arg, const size_t host_arg_length);
121
122 /**
123 Getter method for member m_ip.
124
125 @retval LEX_CSTRING object having constant pointer to m_ip.Ptr
126 and its length
127 */
128 LEX_CSTRING ip() const;
129
130 void set_ip_ptr(const char *ip_arg, const int ip_arg_length);
131
132 void assign_ip(const char *ip_arg, const int ip_arg_length);
133
134 /**
135 Getter method for member m_host_or_ip.
136
137 @retval LEX_CSTRING object having constant pointer to m_host_or_ip.Ptr
138 and its length
139 */
140 LEX_CSTRING host_or_ip() const;
141
142 /**
143 Setter method for member m_host_or_ip.
144 */
145 void set_host_or_ip_ptr();
146
147 /**
148 Setter method for member m_host_or_ip.
149
150 @param[in] host_or_ip_arg New user value for m_host_or_ip.
151 @param[in] host_or_ip_arg_length Length of "host_or_ip_arg" param.
152 */
153 void set_host_or_ip_ptr(const char *host_or_ip_arg,
154 const int host_or_ip_arg_length);
155
156 /**
157 Getter method for member m_external_user.
158
159 @retval LEX_CSTRING object having constant pointer to m_external_host.Ptr
160 and its length
161 */
163
164 void set_external_user_ptr(const char *ext_user_arg,
165 const int ext_user_arg_length);
166
167 void assign_external_user(const char *ext_user_arg,
168 const int ext_user_arg_length);
169
170 /**
171 Getter method for member m_priv_user.
172
173 @retval LEX_CSTRING object having constant pointer to m_priv_user.Ptr
174 and its length
175 */
176 LEX_CSTRING priv_user() const;
177
178 void assign_priv_user(const char *priv_user_arg,
179 const size_t priv_user_arg_length);
180
181 /**
182 Getter method for member m_proxy_user.
183
184 @retval LEX_CSTRING object having constant pointer to m_proxy_user.Ptr
185 and its length
186 */
187 LEX_CSTRING proxy_user() const;
188
189 void assign_proxy_user(const char *proxy_user_arg,
190 const size_t proxy_user_arg_length);
191
192 /**
193 Getter method for member m_priv_host.
194
195 @retval LEX_CSTRING object having constant pointer to m_priv_host.Ptr
196 and its length
197 */
198 LEX_CSTRING priv_host() const;
199
200 void assign_priv_host(const char *priv_host_arg,
201 const size_t priv_host_arg_length);
202
203 const char *priv_host_name() const;
204
205 /**
206 Getter method for member m_master_access.
207 */
208 ulong master_access() const;
209
210 ulong master_access(const std::string &db_name) const;
211
212 const Restrictions restrictions() const;
213
215
217
218 /**
219 Check if a an account has been assigned to the security context
220
221 The account assignment to the security context is always executed in the
222 following order:
223 1) assign user's name to the context
224 2) assign user's hostname to the context
225 Whilst user name can be null, hostname cannot. This is why we can say that
226 the full account has been assigned to the context when hostname is not
227 equal to empty string.
228
229 @return Account assignment status
230 @retval true account has been assigned to the security context
231 @retval false account has not yet been assigned to the security context
232 */
233
234 bool has_account_assigned() const;
235
236 /**
237 Check permission against m_master_access
238 */
239
240 /**
241 Check global access
242 @param want_access The required privileges
243 @param db_name The database name to check if it has restrictions attached
244 @param match_any if the security context must match all or any of the req.
245 * privileges.
246 @return True if the security context fulfills the access requirements.
247 */
248 bool check_access(ulong want_access, const std::string &db_name = "",
249 bool match_any = false);
250
251 /**
252 Returns the schema level effective privileges (with applied roles)
253 for the currently active schema.
254 */
255 ulong current_db_access() const;
256
257 /**
258 Cache the schema level effective privileges (apply roles first!) for the
259 currently active schema.
260 */
261 void cache_current_db_access(ulong db_access);
262
263 /**
264 Getter method for member m_password_expired.
265 */
266 bool password_expired() const;
267
269
270 bool change_security_context(THD *thd, const LEX_CSTRING &definer_user,
271 const LEX_CSTRING &definer_host, const char *db,
272 Security_context **backup, bool force = false);
273
275
277
278 void logout();
279 /**
280 Locked account can still be used as routine definers and when they are
281 there shouldn't be any checks for expired passwords.
282 */
284
286
287 void set_drop_policy(const std::function<void(Security_context *)> &func);
288
289 void add_as_local_temp_privs(const std::vector<std::string> &privs);
290 bool check_in_local_temp_privs(const std::string &priv);
291
292 bool has_drop_policy(void);
293
294 bool has_executed_drop_policy(void);
295
296 void execute_drop_policy(void);
297
298 bool is_access_restricted_on_db(ulong want_access,
299 const std::string &db_name) const;
300
302
305
306 void set_thd(THD *thd);
307
308 THD *get_thd();
309
310 private:
311 void init();
312 void destroy();
313 void copy_security_ctx(const Security_context &src_sctx);
314 ulong filter_access(const ulong access, const std::string &db_name) const;
316 std::pair<bool, bool> fetch_global_grant(const ACL_USER &acl_user,
317 const std::string &privilege,
318 bool cumulative = false);
319 bool has_table_access(ulong priv, Table_ref *table);
320
321 private:
322 /**
323 m_user - user of the client, set to NULL until the user has been read from
324 the connection
325 */
327
328 /** m_host - host of the client */
330
331 /** m_ip - client IP */
333
334 /**
335 m_host_or_ip - points to host if host is available, otherwise points to ip
336 */
338
340
341 /**
342 m_priv_user - The user privilege we are using. May be "" for anonymous user.
343 */
346
349
350 /**
351 The host privilege we are using
352 */
355
356 /**
357 Global privileges from mysql.user.
358 */
360
361 /**
362 Privileges for current db
363 */
365
366 /**
367 password expiration flag.
368
369 This flag is set according to connecting user's context and not the
370 effective user.
371 */
375 /**
376 True if this account can't be logged into.
377 */
379 /**
380 True if the skip_grants_user is set.
381 */
383
388 /**
389 This flag tracks if server should be in sandbox mode or not.
390 When user account connects to server, with any of its authentication
391 plugin's registration step pending, in that case, the connection is
392 set in sandbox(or registration) mode i.e m_registration_sandbox_mode is set
393 to TRUE.
394 During this time only ALTER USER, SET PASSWORD statements are allowed.
395 Once user finishes the registration steps for the authentication plugin
396 via an ALTER USER statement, m_registration_sandbox_mode is set to FALSE,
397 making a full fledged connection, where user can execute any sql statement.
398 */
400
401 /**
402 m_thd - Thread handle, set to nullptr if this does not belong to any THD yet
403 */
405};
406
407/**
408 Getter method for member m_host_or_ip.
409
410 @retval LEX_CSTRING object having constant pointer to m_host_or_ip.Ptr
411 and its length
412*/
415
417
420
421 return host_or_ip;
422}
423
426
427 /*
428 Set host_or_ip to either host or ip if they are available else set it to
429 empty string.
430 */
431 const char *host_or_ip =
432 m_host.length() ? m_host.ptr() : (m_ip.length() ? m_ip.ptr() : "");
433
435}
436
438 const char *host_or_ip_arg, const int host_or_ip_arg_length) {
440
441 m_host_or_ip.set(host_or_ip_arg, host_or_ip_arg_length, system_charset_info);
442}
443
445 LEX_CSTRING ext_user;
446
448
449 ext_user.str = m_external_user.ptr();
450 ext_user.length = m_external_user.length();
451
452 return ext_user;
453}
454
455inline ulong Security_context::master_access() const { return m_master_access; }
456
458 return m_restrictions;
459}
460
461inline void Security_context::set_master_access(ulong master_access) {
464 DBUG_PRINT("info", ("Cached master access is %lu", m_master_access));
465}
466
468 ulong master_access, const Restrictions &restrictions) {
471}
472
473inline const char *Security_context::priv_host_name() const {
474 return (*m_priv_host ? m_priv_host : "%");
475}
476
478 return m_priv_host[0] != '\0';
479}
480
481inline ulong Security_context::current_db_access() const { return m_db_access; }
482
483inline void Security_context::cache_current_db_access(ulong db_access) {
484 m_db_access = db_access;
485}
486
488 return m_password_expired;
489}
490
491inline void Security_context::set_password_expired(bool password_expired) {
493}
494
497}
498
501}
502
505}
506
509}
510
511inline void Security_context::set_thd(THD *thd) { m_thd = thd; }
512
514
515#endif /* SQL_SECURITY_CTX_INCLUDED */
std::vector< Auth_id_ref > List_of_auth_id_refs
Definition: auth_common.h:80
Definition: sql_auth_cache.h:246
Container for global, schema, table/view and routine ACL maps.
Definition: sql_auth_cache.h:637
Storage container for default auth ids.
Definition: auth_common.h:1065
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:1502
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:311
String m_external_user
Definition: sql_security_ctx.h:339
ulong db_acl(LEX_CSTRING db, bool use_pattern_scan=true) const
Get grant information for given database.
Definition: sql_security_ctx.cc:498
bool has_table_access(ulong priv, Table_ref *table)
Check if required access to given table is granted.
Definition: sql_security_ctx.cc:1188
THD * get_thd()
Definition: sql_security_ctx.h:513
Grant_table_aggregate table_and_column_acls(LEX_CSTRING db, LEX_CSTRING table)
Definition: sql_security_ctx.cc:567
bool any_table_acl(const LEX_CSTRING &db)
Definition: sql_security_ctx.cc:615
void set_master_access(ulong master_access)
Definition: sql_security_ctx.h:461
String m_host
m_host - host of the client
Definition: sql_security_ctx.h:329
bool m_is_skip_grants_user
True if the skip_grants_user is set.
Definition: sql_security_ctx.h:382
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:386
void add_as_local_temp_privs(const std::vector< std::string > &privs)
void cache_current_db_access(ulong db_access)
Cache the schema level effective privileges (apply roles first!) for the currently active schema.
Definition: sql_security_ctx.h:483
const char * priv_host_name() const
Definition: sql_security_ctx.h:473
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:811
ulong function_acl(LEX_CSTRING db, LEX_CSTRING procedure_name)
Definition: sql_security_ctx.cc:549
void init()
Definition: sql_security_ctx.cc:78
LEX_CSTRING host() const
Getter method for member m_host.
Definition: sql_security_ctx.cc:849
LEX_CSTRING priv_user() const
Getter method for member m_priv_user.
Definition: sql_security_ctx.cc:777
void assign_user(const char *user_arg, const size_t user_arg_length)
Setter method for member m_user.
Definition: sql_security_ctx.cc:831
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:491
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:348
void set_registration_sandbox_mode(bool v)
Definition: sql_security_ctx.h:507
Restrictions m_restrictions
Definition: sql_security_ctx.h:387
char m_priv_user[USERNAME_LENGTH]
m_priv_user - The user privilege we are using.
Definition: sql_security_ctx.h:344
ulong filter_access(const ulong 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:1125
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:1054
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:379
size_t get_num_active_roles() const
Definition: sql_security_ctx.cc:446
THD * m_thd
m_thd - Thread handle, set to nullptr if this does not belong to any THD yet
Definition: sql_security_ctx.h:404
char m_proxy_user[USERNAME_LENGTH+HOSTNAME_LENGTH+6]
Definition: sql_security_ctx.h:347
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:976
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:326
String m_ip
m_ip - client IP
Definition: sql_security_ctx.h:332
ulong m_db_access
Privileges for current db.
Definition: sql_security_ctx.h:364
bool any_sp_acl(const LEX_CSTRING &db)
Definition: sql_security_ctx.cc:600
ulong master_access() const
Getter method for member m_master_access.
Definition: sql_security_ctx.h:455
bool has_account_assigned() const
Check if a an account has been assigned to the security context.
Definition: sql_security_ctx.h:477
size_t m_proxy_user_length
Definition: sql_security_ctx.h:348
bool has_column_access(ulong priv, TABLE const *table, std::vector< std::string > column)
Check if required access to given table column is granted.
Definition: sql_security_ctx.cc:1265
LEX_CSTRING external_user() const
Getter method for member m_external_user.
Definition: sql_security_ctx.h:444
void assign_host(const char *host_arg, const size_t host_arg_length)
Setter method for member m_host.
Definition: sql_security_ctx.cc:892
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:869
bool m_is_locked
True if this account can't be logged into.
Definition: sql_security_ctx.h:378
bool is_in_registration_sandbox_mode()
Definition: sql_security_ctx.h:503
bool is_access_restricted_on_db(ulong want_access, const std::string &db_name) const
Definition: sql_security_ctx.cc:1110
bool m_password_expired
password expiration flag.
Definition: sql_security_ctx.h:372
size_t m_priv_user_length
Definition: sql_security_ctx.h:345
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:283
ulong procedure_acl(LEX_CSTRING db, LEX_CSTRING procedure_name)
Definition: sql_security_ctx.cc:531
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:956
List_of_auth_id_refs * get_active_roles()
Definition: sql_security_ctx.cc:442
void init_restrictions(const Restrictions &restrictions)
Definition: sql_security_ctx.cc:1106
Acl_map * m_acl_map
Definition: sql_security_ctx.h:374
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:996
bool has_with_admin_acl(const LEX_CSTRING &role_name, const LEX_CSTRING &role_host)
Definition: sql_security_ctx.cc:586
bool password_expired() const
Getter method for member m_password_expired.
Definition: sql_security_ctx.h:487
LEX_CSTRING ip() const
Getter method for member m_ip.
Definition: sql_security_ctx.cc:916
char m_priv_host[HOSTNAME_LENGTH+1]
The host privilege we are using.
Definition: sql_security_ctx.h:353
size_t m_priv_host_length
Definition: sql_security_ctx.h:354
LEX_CSTRING priv_host() const
Getter method for member m_priv_host.
Definition: sql_security_ctx.cc:1074
ulong table_acl(LEX_CSTRING db, LEX_CSTRING table)
Definition: sql_security_ctx.cc:580
void set_host_or_ip_ptr()
Setter method for member m_host_or_ip.
Definition: sql_security_ctx.h:424
bool is_table_blocked(ulong priv, TABLE const *table)
Check if required access to given table is not restricted.
Definition: sql_security_ctx.cc:1232
bool check_access(ulong want_access, const std::string &db_name="", bool match_any=false)
Check permission against m_master_access.
Definition: sql_security_ctx.cc:320
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:1154
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:645
void set_thd(THD *thd)
Definition: sql_security_ctx.h:511
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:337
bool m_has_drop_policy
Definition: sql_security_ctx.h:385
LEX_CSTRING user() const
Getter method for member m_user.
Definition: sql_security_ctx.cc:791
void clear_db_restrictions()
Definition: sql_security_ctx.h:499
bool m_executed_drop_policy
Definition: sql_security_ctx.h:384
void logout()
Definition: sql_security_ctx.cc:99
void restore_security_context(THD *thd, Security_context *backup)
Definition: sql_security_ctx.cc:306
const Restrictions restrictions() const
Definition: sql_security_ctx.h:457
bool m_registration_sandbox_mode
This flag tracks if server should be in sandbox mode or not.
Definition: sql_security_ctx.h:399
void lock_account(bool is_locked)
Definition: sql_security_ctx.h:285
LEX_CSTRING host_or_ip() const
Getter method for member m_host_or_ip.
Definition: sql_security_ctx.h:413
bool is_skip_grants_user()
Definition: sql_security_ctx.h:495
ulong m_master_access
Global privileges from mysql.user.
Definition: sql_security_ctx.h:359
List_of_auth_id_refs m_active_roles
Definition: sql_security_ctx.h:373
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:1016
ulong current_db_access() const
Returns the schema level effective privileges (with applied roles) for the currently active schema.
Definition: sql_security_ctx.h:481
void set_ip_ptr(const char *ip_arg, const int ip_arg_length)
Setter method for member m_ip.
Definition: sql_security_ctx.cc:936
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:739
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:423
LEX_CSTRING proxy_user() const
Getter method for member m_proxy_user.
Definition: sql_security_ctx.cc:1036
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:1092
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
Definition: table.h:2790
A better implementation of the UNIX ctype(3) library.
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1545
#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:2438
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
Definition: table.h:1398
int is_locked(int fd)