MySQL 8.0.37
Source Code Documentation
migrate_keyring.h
Go to the documentation of this file.
1/* Copyright (c) 2017, 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
24#ifndef MIGRATE_KEYRING_H_INCLUDED
25#define MIGRATE_KEYRING_H_INCLUDED
26
27#include <string>
28#include "mysql.h"
30#include "sql_common.h" // NET_SERVER
31
34
35class THD;
36
37#define MAX_KEY_LEN 16384
38
40
41class Key_info {
42 public:
43 Key_info() = default;
44 Key_info(char *key_id, char *user_id) {
45 m_key_id = key_id;
46 m_user_id = user_id;
47 }
48 Key_info(const Key_info &ki) {
49 this->m_key_id = ki.m_key_id;
50 this->m_user_id = ki.m_user_id;
51 }
52
53 public:
54 std::string m_key_id;
55 std::string m_user_id;
56};
57
58using const_keyring_writer_t = SERVICE_TYPE(keyring_writer);
59using const_keyring_load_t = SERVICE_TYPE(keyring_load);
60
62 public:
63 Destination_keyring_component(const std::string component_path,
64 const std::string implementation_name);
66
69
70 bool ok() { return ok_; }
71
72 private:
73 const std::string component_path_;
77 bool ok_;
78};
79
81 public:
82 /**
83 Standard constructor.
84 */
86 /**
87 Initialize all needed parameters to proceed with migration process.
88 */
89 bool init(int argc, char **argv, char *source_plugin,
90 char *destination_plugin, char *user, char *host, char *password,
91 char *socket, ulong port, bool migrate_to_component);
92 /**
93 Migrate keys from source keyring to destination keyring.
94 */
95 bool execute();
96 /**
97 Standard destructor
98 */
100
101 private:
102 /**
103 Load source or destination plugin.
104 */
105 bool load_plugin(enum_plugin_type plugin_type);
106 /**
107 Load component
108 */
109 bool load_component();
110 /**
111 Fetch keys from source plugin and store in destination plugin.
112 */
114 /**
115 Disable @@keyring_operations variable.
116 */
118 /**
119 Enable @@keyring_operations variable.
120 */
122
123 private:
125 char **m_argv;
130 std::string m_internal_option[2];
133 std::vector<Key_info> m_source_keys;
138};
139
140#endif /* MIGRATE_KEYRING_H_INCLUDED */
Definition: migrate_keyring.h:61
const_keyring_writer_t * writer()
Definition: migrate_keyring.h:67
Destination_keyring_component(const std::string component_path, const std::string implementation_name)
Definition: migrate_keyring.cc:36
~Destination_keyring_component()
Definition: migrate_keyring.cc:93
bool ok_
Definition: migrate_keyring.h:77
const std::string component_path_
Definition: migrate_keyring.h:73
const_keyring_load_t * initializer()
Definition: migrate_keyring.h:68
const_keyring_load_t * keyring_load_service_
Definition: migrate_keyring.h:74
const_keyring_writer_t * keyring_writer_service_
Definition: migrate_keyring.h:75
bool component_loaded_
Definition: migrate_keyring.h:76
bool ok()
Definition: migrate_keyring.h:70
Definition: migrate_keyring.h:41
std::string m_key_id
Definition: migrate_keyring.h:54
Key_info(char *key_id, char *user_id)
Definition: migrate_keyring.h:44
Key_info(const Key_info &ki)
Definition: migrate_keyring.h:48
std::string m_user_id
Definition: migrate_keyring.h:55
Key_info()=default
Definition: migrate_keyring.h:80
st_mysql_keyring * m_source_plugin_handle
Definition: migrate_keyring.h:131
std::string m_source_plugin_option
Definition: migrate_keyring.h:126
Destination_keyring_component * m_destination_component
Definition: migrate_keyring.h:137
int m_argc
Definition: migrate_keyring.h:124
NET_SERVER server_extn
Definition: migrate_keyring.h:135
st_mysql_keyring * m_destination_plugin_handle
Definition: migrate_keyring.h:132
bool enable_keyring_operations()
Enable @keyring_operations variable.
Definition: migrate_keyring.cc:543
std::string m_destination_plugin_option
Definition: migrate_keyring.h:127
bool load_component()
Load component.
Definition: migrate_keyring.cc:360
bool fetch_and_store_keys()
Fetch keys from source plugin and store in destination plugin.
Definition: migrate_keyring.cc:438
bool init(int argc, char **argv, char *source_plugin, char *destination_plugin, char *user, char *host, char *password, char *socket, ulong port, bool migrate_to_component)
Initialize all needed parameters to proceed with migration process.
Definition: migrate_keyring.cc:151
~Migrate_keyring()
Standard destructor.
Definition: migrate_keyring.cc:561
MYSQL * mysql
Definition: migrate_keyring.h:134
char ** m_argv
Definition: migrate_keyring.h:125
Migrate_keyring()
Standard constructor.
Definition: migrate_keyring.cc:114
std::string m_source_plugin_name
Definition: migrate_keyring.h:128
bool m_migrate_to_component
Definition: migrate_keyring.h:136
std::vector< Key_info > m_source_keys
Definition: migrate_keyring.h:133
std::string m_internal_option[2]
Definition: migrate_keyring.h:130
bool disable_keyring_operations()
Disable @keyring_operations variable.
Definition: migrate_keyring.cc:526
std::string m_destination_plugin_name
Definition: migrate_keyring.h:129
bool load_plugin(enum_plugin_type plugin_type)
Load source or destination plugin.
Definition: migrate_keyring.cc:380
bool execute()
Migrate keys from source keyring to destination keyring.
Definition: migrate_keyring.cc:289
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:34
enum_plugin_type
Definition: migrate_keyring.h:39
This file defines the client API to MySQL and also the ABI of the dynamically linked libmysqlclient.
static char * password
Definition: mysql_secure_installation.cc:56
char * user
Definition: mysqladmin.cc:60
const char * host
Definition: mysqladmin.cc:59
stdx::expected< native_handle_type, error_type > socket(int family, int sock_type, int protocol)
Definition: socket.h:63
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:33
#define SERVICE_TYPE(name)
Generates the standard Service type name.
Definition: service.h:76
Definition: mysql.h:299
Definition: mysql_com_server.h:59
Keyring load service provides way to initialize or reiniitalize keyring component.
Definition: keyring_load.h:52
Keyring writer service provides APIs to add/remove sensitive data to/from keyring backend.
Definition: keyring_writer.h:70
The descriptor structure for the plugin, that is referred from st_mysql_plugin.
Definition: plugin_keyring.h:39