MySQL 8.4.0
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 "my_dbug.h"
32#include "my_hostname.h" // HOSTNAME_LENGTH
33#include "mysql_com.h" // USERNAME_LENGTH
36#include "sql/mysqld_cs.h"
37#include "sql/sql_const.h"
38#include "sql_string.h"
39
40/* Forward declaration. Depends on sql_auth_cache.h (which depends on this file)
41 */
42class Acl_map;
43class ACL_USER;
44class THD;
45struct TABLE;
47
48/**
49 @class Security_context
50 @brief A set of THD members describing the current authenticated user.
51*/
52
54 public:
55 Security_context(THD *thd = nullptr);
57
58 Security_context(const Security_context &src_sctx);
59
61
62 void skip_grants(const char *user = "skip-grants user",
63 const char *host = "skip-grants host");
65
66 /**
67 Getter method for member m_user.
68
69 @retval LEX_CSTRING object having constant pointer to m_user.Ptr
70 and its length.
71 */
72 LEX_CSTRING user() const;
73
74 void set_user_ptr(const char *user_arg, const size_t user_arg_length);
75
76 void assign_user(const char *user_arg, const size_t user_arg_length);
77
78 std::pair<bool, bool> has_global_grant(const char *priv, size_t priv_len);
79 std::pair<bool, bool> has_global_grant(const Auth_id &auth_id,
80 const std::string &privilege,
81 bool cumulative = false);
82 bool can_operate_with(const Auth_id &auth_id, const std::string &privilege,
83 bool cumulative = false,
84 bool ignore_if_nonextant = true,
85 bool throw_error = true);
87 bool validate_access = false);
88 void clear_active_roles(void);
90 size_t get_num_active_roles() const;
92 void checkout_access_maps(void);
93 ulong db_acl(LEX_CSTRING db, bool use_pattern_scan = true) const;
94 static ulong check_db_level_access(THD *thd, const Security_context *sctx,
95 const char *host, const char *ip,
96 const char *user, const char *db,
97 size_t db_len, bool db_is_pattern = false);
98 ulong check_db_level_access(THD *thd, const char *db, size_t db_len,
99 bool db_is_pattern = false) const;
100 ulong procedure_acl(LEX_CSTRING db, LEX_CSTRING procedure_name);
101 ulong function_acl(LEX_CSTRING db, LEX_CSTRING procedure_name);
105 bool has_with_admin_acl(const LEX_CSTRING &role_name,
106 const LEX_CSTRING &role_host);
107 bool any_sp_acl(const LEX_CSTRING &db);
108 bool any_table_acl(const LEX_CSTRING &db);
109
110 bool is_table_blocked(ulong priv, TABLE const *table);
111 bool has_column_access(ulong priv, TABLE const *table,
112 std::vector<std::string> column);
113
114 /**
115 Getter method for member m_host.
116
117 @retval LEX_CSTRING object having constant pointer to m_host.Ptr
118 and its length.
119 */
120
121 LEX_CSTRING host() const;
122
123 void set_host_ptr(const char *host_arg, const size_t host_arg_length);
124
125 void assign_host(const char *host_arg, const size_t host_arg_length);
126
127 /**
128 Getter method for member m_ip.
129
130 @retval LEX_CSTRING object having constant pointer to m_ip.Ptr
131 and its length
132 */
133 LEX_CSTRING ip() const;
134
135 void set_ip_ptr(const char *ip_arg, const int ip_arg_length);
136
137 void assign_ip(const char *ip_arg, const int ip_arg_length);
138
139 /**
140 Getter method for member m_host_or_ip.
141
142 @retval LEX_CSTRING object having constant pointer to m_host_or_ip.Ptr
143 and its length
144 */
145 LEX_CSTRING host_or_ip() const;
146
147 /**
148 Setter method for member m_host_or_ip.
149 */
150 void set_host_or_ip_ptr();
151
152 /**
153 Setter method for member m_host_or_ip.
154
155 @param[in] host_or_ip_arg New user value for m_host_or_ip.
156 @param[in] host_or_ip_arg_length Length of "host_or_ip_arg" param.
157 */
158 void set_host_or_ip_ptr(const char *host_or_ip_arg,
159 const int host_or_ip_arg_length);
160
161 /**
162 Getter method for member m_external_user.
163
164 @retval LEX_CSTRING object having constant pointer to m_external_host.Ptr
165 and its length
166 */
168
169 void set_external_user_ptr(const char *ext_user_arg,
170 const int ext_user_arg_length);
171
172 void assign_external_user(const char *ext_user_arg,
173 const int ext_user_arg_length);
174
175 /**
176 Getter method for member m_priv_user.
177
178 @retval LEX_CSTRING object having constant pointer to m_priv_user.Ptr
179 and its length
180 */
181 LEX_CSTRING priv_user() const;
182
183 void assign_priv_user(const char *priv_user_arg,
184 const size_t priv_user_arg_length);
185
186 /**
187 Getter method for member m_proxy_user.
188
189 @retval LEX_CSTRING object having constant pointer to m_proxy_user.Ptr
190 and its length
191 */
192 LEX_CSTRING proxy_user() const;
193
194 void assign_proxy_user(const char *proxy_user_arg,
195 const size_t proxy_user_arg_length);
196
197 /**
198 Getter method for member m_priv_host.
199
200 @retval LEX_CSTRING object having constant pointer to m_priv_host.Ptr
201 and its length
202 */
203 LEX_CSTRING priv_host() const;
204
205 void assign_priv_host(const char *priv_host_arg,
206 const size_t priv_host_arg_length);
207
208 const char *priv_host_name() const;
209
210 /**
211 Getter method for member m_master_access.
212 */
213 ulong master_access() const;
214
215 ulong master_access(const std::string &db_name) const;
216
217 const Restrictions restrictions() const;
218
220
222
223 /**
224 Check if a an account has been assigned to the security context
225
226 The account assignment to the security context is always executed in the
227 following order:
228 1) assign user's name to the context
229 2) assign user's hostname to the context
230 Whilst user name can be null, hostname cannot. This is why we can say that
231 the full account has been assigned to the context when hostname is not
232 equal to empty string.
233
234 @return Account assignment status
235 @retval true account has been assigned to the security context
236 @retval false account has not yet been assigned to the security context
237 */
238
239 bool has_account_assigned() const;
240
241 /**
242 Check permission against m_master_access
243 */
244
245 /**
246 Check global access
247 @param want_access The required privileges
248 @param db_name The database name to check if it has restrictions attached
249 @param match_any if the security context must match all or any of the req.
250 * privileges.
251 @return True if the security context fulfills the access requirements.
252 */
253 bool check_access(ulong want_access, const std::string &db_name = "",
254 bool match_any = false);
255
256 /**
257 Returns the schema level effective privileges (with applied roles)
258 for the currently active schema.
259 */
260 ulong current_db_access() const;
261
262 /**
263 Cache the schema level effective privileges (apply roles first!) for the
264 currently active schema.
265 */
266 void cache_current_db_access(ulong db_access);
267
268 /**
269 Getter method for member m_password_expired.
270 */
271 bool password_expired() const;
272
274
275 bool change_security_context(THD *thd, const LEX_CSTRING &definer_user,
276 const LEX_CSTRING &definer_host, const char *db,
277 Security_context **backup, bool force = false);
278
280
282
283 void logout();
284 /**
285 Locked account can still be used as routine definers and when they are
286 there shouldn't be any checks for expired passwords.
287 */
289
291
292 void set_drop_policy(const std::function<void(Security_context *)> &func);
293
294 void add_as_local_temp_privs(const std::vector<std::string> &privs);
295 bool check_in_local_temp_privs(const std::string &priv);
296
297 bool has_drop_policy(void);
298
299 bool has_executed_drop_policy(void);
300
301 void execute_drop_policy(void);
302
303 bool is_access_restricted_on_db(ulong want_access,
304 const std::string &db_name) const;
305
307
310
311 void set_thd(THD *thd);
312
313 THD *get_thd();
314
315 private:
316 void init();
317 void destroy();
318 void copy_security_ctx(const Security_context &src_sctx);
319 ulong filter_access(const ulong access, const std::string &db_name) const;
321 std::pair<bool, bool> fetch_global_grant(const ACL_USER &acl_user,
322 const std::string &privilege,
323 bool cumulative = false);
324 bool has_table_access(ulong priv, Table_ref *table);
325
326 private:
327 /**
328 m_user - user of the client, set to NULL until the user has been read from
329 the connection
330 */
332
333 /** m_host - host of the client */
335
336 /** m_ip - client IP */
338
339 /**
340 m_host_or_ip - points to host if host is available, otherwise points to ip
341 */
343
345
346 /**
347 m_priv_user - The user privilege we are using. May be "" for anonymous user.
348 */
351
354
355 /**
356 The host privilege we are using
357 */
360
361 /**
362 Global privileges from mysql.user.
363 */
365
366 /**
367 Privileges for current db
368 */
370
371 /**
372 password expiration flag.
373
374 This flag is set according to connecting user's context and not the
375 effective user.
376 */
380 /**
381 True if this account can't be logged into.
382 */
384 /**
385 True if the skip_grants_user is set.
386 */
388
393 /**
394 This flag tracks if server should be in sandbox mode or not.
395 When user account connects to server, with any of its authentication
396 plugin's registration step pending, in that case, the connection is
397 set in sandbox(or registration) mode i.e m_registration_sandbox_mode is set
398 to TRUE.
399 During this time only ALTER USER, SET PASSWORD statements are allowed.
400 Once user finishes the registration steps for the authentication plugin
401 via an ALTER USER statement, m_registration_sandbox_mode is set to FALSE,
402 making a full fledged connection, where user can execute any sql statement.
403 */
405
406 /**
407 m_thd - Thread handle, set to nullptr if this does not belong to any THD yet
408 */
410};
411
412/**
413 Getter method for member m_host_or_ip.
414
415 @retval LEX_CSTRING object having constant pointer to m_host_or_ip.Ptr
416 and its length
417*/
420
422
425
426 return host_or_ip;
427}
428
431
432 /*
433 Set host_or_ip to either host or ip if they are available else set it to
434 empty string.
435 */
436 const char *host_or_ip =
437 m_host.length() ? m_host.ptr() : (m_ip.length() ? m_ip.ptr() : "");
438
440}
441
443 const char *host_or_ip_arg, const int host_or_ip_arg_length) {
445
446 m_host_or_ip.set(host_or_ip_arg, host_or_ip_arg_length, system_charset_info);
447}
448
450 LEX_CSTRING ext_user;
451
453
454 ext_user.str = m_external_user.ptr();
455 ext_user.length = m_external_user.length();
456
457 return ext_user;
458}
459
460inline ulong Security_context::master_access() const { return m_master_access; }
461
463 return m_restrictions;
464}
465
466inline void Security_context::set_master_access(ulong master_access) {
469 DBUG_PRINT("info", ("Cached master access is %lu", m_master_access));
470}
471
473 ulong master_access, const Restrictions &restrictions) {
476}
477
478inline const char *Security_context::priv_host_name() const {
479 return (*m_priv_host ? m_priv_host : "%");
480}
481
483 return m_priv_host[0] != '\0';
484}
485
486inline ulong Security_context::current_db_access() const { return m_db_access; }
487
488inline void Security_context::cache_current_db_access(ulong db_access) {
489 m_db_access = db_access;
490}
491
493 return m_password_expired;
494}
495
496inline void Security_context::set_password_expired(bool password_expired) {
498}
499
502}
503
506}
507
510}
511
514}
515
516inline void Security_context::set_thd(THD *thd) { m_thd = thd; }
517
519
520#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:1062
Definition: sql_list.h:467
Container of all restrictions for a given user.
Definition: partial_revokes.h:155
void clear_db()
Clear database restrictions.
Definition: partial_revokes.cc:1497
A set of THD members describing the current authenticated user.
Definition: sql_security_ctx.h:53
bool user_matches(Security_context *)
Definition: sql_security_ctx.cc:313
String m_external_user
Definition: sql_security_ctx.h:344
ulong db_acl(LEX_CSTRING db, bool use_pattern_scan=true) const
Get grant information for given database.
Definition: sql_security_ctx.cc:503
bool has_table_access(ulong priv, Table_ref *table)
Check if required access to given table is granted.
Definition: sql_security_ctx.cc:1243
THD * get_thd()
Definition: sql_security_ctx.h:518
Grant_table_aggregate table_and_column_acls(LEX_CSTRING db, LEX_CSTRING table)
Definition: sql_security_ctx.cc:622
bool any_table_acl(const LEX_CSTRING &db)
Definition: sql_security_ctx.cc:670
void set_master_access(ulong master_access)
Definition: sql_security_ctx.h:466
String m_host
m_host - host of the client
Definition: sql_security_ctx.h:334
bool m_is_skip_grants_user
True if the skip_grants_user is set.
Definition: sql_security_ctx.h:387
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:391
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:488
const char * priv_host_name() const
Definition: sql_security_ctx.h:478
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:866
ulong function_acl(LEX_CSTRING db, LEX_CSTRING procedure_name)
Definition: sql_security_ctx.cc:604
void init()
Definition: sql_security_ctx.cc:80
LEX_CSTRING host() const
Getter method for member m_host.
Definition: sql_security_ctx.cc:904
LEX_CSTRING priv_user() const
Getter method for member m_priv_user.
Definition: sql_security_ctx.cc:832
void assign_user(const char *user_arg, const size_t user_arg_length)
Setter method for member m_user.
Definition: sql_security_ctx.cc:886
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:496
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:350
void set_registration_sandbox_mode(bool v)
Definition: sql_security_ctx.h:512
Restrictions m_restrictions
Definition: sql_security_ctx.h:392
static ulong 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:552
char m_priv_user[USERNAME_LENGTH]
m_priv_user - The user privilege we are using.
Definition: sql_security_ctx.h:349
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:1180
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:1109
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:381
size_t get_num_active_roles() const
Definition: sql_security_ctx.cc:448
THD * m_thd
m_thd - Thread handle, set to nullptr if this does not belong to any THD yet
Definition: sql_security_ctx.h:409
char m_proxy_user[USERNAME_LENGTH+HOSTNAME_LENGTH+6]
Definition: sql_security_ctx.h:352
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:1031
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:331
String m_ip
m_ip - client IP
Definition: sql_security_ctx.h:337
ulong m_db_access
Privileges for current db.
Definition: sql_security_ctx.h:369
bool any_sp_acl(const LEX_CSTRING &db)
Definition: sql_security_ctx.cc:655
ulong master_access() const
Getter method for member m_master_access.
Definition: sql_security_ctx.h:460
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:353
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:1320
LEX_CSTRING external_user() const
Getter method for member m_external_user.
Definition: sql_security_ctx.h:449
void assign_host(const char *host_arg, const size_t host_arg_length)
Setter method for member m_host.
Definition: sql_security_ctx.cc:947
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:924
bool m_is_locked
True if this account can't be logged into.
Definition: sql_security_ctx.h:383
bool is_in_registration_sandbox_mode()
Definition: sql_security_ctx.h:508
bool is_access_restricted_on_db(ulong want_access, const std::string &db_name) const
Definition: sql_security_ctx.cc:1165
bool m_password_expired
password expiration flag.
Definition: sql_security_ctx.h:377
size_t m_priv_user_length
Definition: sql_security_ctx.h:350
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:288
ulong procedure_acl(LEX_CSTRING db, LEX_CSTRING procedure_name)
Definition: sql_security_ctx.cc:586
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:1011
List_of_auth_id_refs * get_active_roles()
Definition: sql_security_ctx.cc:444
void init_restrictions(const Restrictions &restrictions)
Definition: sql_security_ctx.cc:1161
Acl_map * m_acl_map
Definition: sql_security_ctx.h:379
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:1051
bool has_with_admin_acl(const LEX_CSTRING &role_name, const LEX_CSTRING &role_host)
Definition: sql_security_ctx.cc:641
bool password_expired() const
Getter method for member m_password_expired.
Definition: sql_security_ctx.h:492
LEX_CSTRING ip() const
Getter method for member m_ip.
Definition: sql_security_ctx.cc:971
char m_priv_host[HOSTNAME_LENGTH+1]
The host privilege we are using.
Definition: sql_security_ctx.h:358
size_t m_priv_host_length
Definition: sql_security_ctx.h:359
LEX_CSTRING priv_host() const
Getter method for member m_priv_host.
Definition: sql_security_ctx.cc:1129
ulong table_acl(LEX_CSTRING db, LEX_CSTRING table)
Definition: sql_security_ctx.cc:635
void set_host_or_ip_ptr()
Setter method for member m_host_or_ip.
Definition: sql_security_ctx.h:429
bool is_table_blocked(ulong priv, TABLE const *table)
Check if required access to given table is not restricted.
Definition: sql_security_ctx.cc:1287
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:322
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:1209
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:700
void set_thd(THD *thd)
Definition: sql_security_ctx.h:516
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:342
bool m_has_drop_policy
Definition: sql_security_ctx.h:390
LEX_CSTRING user() const
Getter method for member m_user.
Definition: sql_security_ctx.cc:846
void clear_db_restrictions()
Definition: sql_security_ctx.h:504
bool m_executed_drop_policy
Definition: sql_security_ctx.h:389
void logout()
Definition: sql_security_ctx.cc:101
void restore_security_context(THD *thd, Security_context *backup)
Definition: sql_security_ctx.cc:308
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:404
void lock_account(bool is_locked)
Definition: sql_security_ctx.h:290
LEX_CSTRING host_or_ip() const
Getter method for member m_host_or_ip.
Definition: sql_security_ctx.h:418
bool is_skip_grants_user()
Definition: sql_security_ctx.h:500
ulong m_master_access
Global privileges from mysql.user.
Definition: sql_security_ctx.h:364
List_of_auth_id_refs m_active_roles
Definition: sql_security_ctx.h:378
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:1071
ulong 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_ip_ptr(const char *ip_arg, const int ip_arg_length)
Setter method for member m_ip.
Definition: sql_security_ctx.cc:991
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:794
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:425
LEX_CSTRING proxy_user() const
Getter method for member m_proxy_user.
Definition: sql_security_ctx.cc:1091
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:1147
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:2863
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1542
#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: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:1405
int is_locked(int fd)