Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
secure_connection.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
5#pragma once
6
7#include "../database_types.h"
9#include <string>
10#include <vector>
11#include <memory>
12#include <unordered_map>
13#include <chrono>
14#include <mutex>
15#include <functional>
16#include <optional>
17
18namespace database::security
19{
24 enum class encryption_type {
25 none,
26 tls,
27 ssl,
28 aes256
29 };
30
39 oauth2,
40 jwt
41 };
42
48 {
49 std::string username;
50 std::string password_hash;
51 std::string certificate_path;
52 std::string private_key_path;
53 std::string ca_cert_path;
56
57 // OAuth2/JWT specific
58 std::string client_id;
59 std::string client_secret;
60 std::string token;
61 std::chrono::system_clock::time_point token_expiry;
62
63 // Additional security options
64 bool verify_certificate = true;
66 std::string allowed_ciphers;
67 };
68
74 {
75 std::chrono::system_clock::time_point timestamp;
76 std::string user_id;
77 std::string session_id;
78 std::string operation;
79 std::string table_name;
80 std::string query_hash;
81 bool success;
82 std::string error_message;
83 std::string client_ip;
84 std::string user_agent;
85 };
86
100 {
101 public:
106
107 // Credential management
108 bool store_credentials(const std::string& connection_id, const security_credentials& credentials);
109 std::optional<security_credentials> get_credentials(const std::string& connection_id) const;
110 bool remove_credentials(const std::string& connection_id);
111
112 // Encryption key management
113 void set_master_key(const std::string& key);
115
116 // Password utilities
117 std::string hash_password(const std::string& password) const;
118 bool verify_password(const std::string& password, const std::string& hash) const;
119
120 private:
121 std::string encrypt_data(const std::string& data) const;
122 std::string decrypt_data(const std::string& encrypted_data) const;
123
124 mutable std::mutex credentials_mutex_;
125 std::unordered_map<std::string, std::string> encrypted_credentials_;
126 std::string master_key_;
127 };
128
134 {
135 public:
137
138 // Connection security
139 bool establish_secure_connection(const std::string& host, int port);
140 bool verify_server_certificate(const std::string& certificate) const;
142
143 // TLS/SSL configuration
144 bool configure_tls(const std::string& cert_file, const std::string& key_file, const std::string& ca_file);
145 bool set_cipher_suite(const std::string& ciphers);
146
147 // Connection string encryption
148 std::string encrypt_connection_string(const std::string& connection_string) const;
149 std::string decrypt_connection_string(const std::string& encrypted_string) const;
150
151 private:
153 bool tls_configured_ = false;
154 };
155
161 {
162 public:
163 // SQL injection prevention
164 static bool is_query_safe(const std::string& query);
165 static std::string sanitize_input(const std::string& input);
166 static std::string escape_sql_string(const std::string& value);
167
168 // Query pattern analysis
169 static bool detect_suspicious_patterns(const std::string& query);
170 static std::vector<std::string> extract_table_names(const std::string& query);
171 static bool validate_table_access(const std::string& table, const std::string& operation, const std::string& user);
172
173 // Prepared statement support
174 static std::string convert_to_prepared_statement(const std::string& query, const std::vector<core::database_value>& parameters);
175
176 private:
177 static const std::vector<std::string> dangerous_keywords_;
178 static const std::vector<std::string> injection_patterns_;
179 };
180
194 {
195 public:
196 enum class permission {
197 select = 1,
198 insert = 2,
199 update = 4,
200 delete_record = 8,
201 create = 16,
202 drop = 32,
203 alter = 64,
204 admin = 128
205 };
206
207 struct role {
208 std::string name;
209 std::vector<permission> permissions;
210 std::vector<std::string> allowed_tables;
211 std::vector<std::string> denied_tables;
212 std::chrono::system_clock::time_point created_at;
213 bool active = true;
214 };
215
217 std::string user_id;
218 std::string session_id;
219 std::vector<std::string> roles;
220 std::chrono::system_clock::time_point login_time;
221 std::chrono::system_clock::time_point last_activity;
222 std::string client_ip;
223 bool active = true;
224 };
225
229 access_control() = default;
230
231
232 // Role management
233 bool create_role(const role& new_role);
234 bool assign_role_to_user(const std::string& user_id, const std::string& role_name);
235 bool revoke_role_from_user(const std::string& user_id, const std::string& role_name);
236 std::vector<role> get_user_roles(const std::string& user_id) const;
237
238 // Permission checking
239 bool check_permission(const std::string& user_id, const std::string& table,
240 const std::string& operation) const;
241 bool check_table_access(const std::string& user_id, const std::string& table) const;
242
243 // Session management
244 std::string create_session(const std::string& user_id, const std::string& client_ip);
245 bool validate_session(const std::string& session_id) const;
246 bool terminate_session(const std::string& session_id);
248
249 private:
250 mutable std::mutex access_mutex_;
251 std::unordered_map<std::string, role> roles_;
252 std::unordered_map<std::string, std::vector<std::string>> user_roles_;
253 std::unordered_map<std::string, user_session> active_sessions_;
254 };
255
269 {
270 public:
274 audit_logger() = default;
275
283 explicit audit_logger(const std::string& log_file_path);
284
285 // Audit logging
286 void log_database_access(const std::string& user_id, const std::string& session_id,
287 const std::string& operation, const std::string& table,
288 const std::string& query_hash, bool success,
289 const std::string& error_message = "");
290
291 void log_authentication_event(const std::string& user_id, const std::string& client_ip,
292 bool success, const std::string& method);
293
294 void log_authorization_failure(const std::string& user_id, const std::string& operation,
295 const std::string& table, const std::string& reason);
296
297 // Audit retrieval
298 std::vector<audit_log_entry> get_audit_logs(std::chrono::hours window) const;
299 std::vector<audit_log_entry> get_user_audit_logs(const std::string& user_id,
300 std::chrono::hours window) const;
301
302 // Security reporting
303 std::string generate_security_report(std::chrono::hours window) const;
304 std::vector<std::string> detect_suspicious_activity(std::chrono::hours window) const;
305
306 // Log management
307 void set_log_retention_period(std::chrono::hours retention);
308 void cleanup_old_logs();
309 bool export_logs_to_file(const std::string& filename) const;
310
311 private:
312 void persist_entry(const audit_log_entry& entry);
313
314 mutable std::mutex audit_mutex_;
315 std::vector<audit_log_entry> audit_logs_;
316 std::chrono::hours retention_period_{24 * 30}; // 30 days
317 std::string log_file_path_;
318 };
319
333 {
334 public:
335 enum class threat_level {
336 low,
337 medium,
338 high,
340 };
341
344 std::string type;
345 std::string description;
346 std::string user_id;
347 std::string session_id;
348 std::chrono::system_clock::time_point timestamp;
349 };
350
354 security_monitor() = default;
355
356 // Threat detection
357 void analyze_query_patterns(const std::string& user_id, const std::string& query);
358 void detect_brute_force_attempts(const std::string& client_ip);
359 void monitor_privilege_escalation(const std::string& user_id, const std::string& operation);
360
361 // Alert management
362 void register_security_handler(std::function<void(const security_alert&)> handler);
363 std::vector<security_alert> get_recent_alerts(std::chrono::hours window) const;
364
365 // Security metrics
366 size_t get_failed_login_count(std::chrono::hours window) const;
367 size_t get_suspicious_query_count(std::chrono::hours window) const;
369
370 private:
371 void emit_security_alert(threat_level level, const std::string& type,
372 const std::string& description, const std::string& user_id = "");
373
374 mutable std::mutex monitor_mutex_;
375 std::vector<security_alert> security_alerts_;
376 std::vector<std::function<void(const security_alert&)>> alert_handlers_;
377
378 // Attack pattern tracking
379 std::unordered_map<std::string, size_t> failed_login_attempts_;
380 std::unordered_map<std::string, std::vector<std::string>> user_query_patterns_;
381 };
382
396 {
397 public:
402
403 // Data encryption
404 std::string encrypt_field_data(const std::string& data, const std::string& field_name) const;
405 std::string decrypt_field_data(const std::string& encrypted_data, const std::string& field_name) const;
406
407 // Key management
408 bool generate_field_key(const std::string& field_name);
409 bool rotate_field_key(const std::string& field_name);
410 void set_master_encryption_key(const std::string& key);
411
412 // Column-level encryption
413 bool configure_encrypted_column(const std::string& table, const std::string& column,
414 encryption_type type);
415 bool is_column_encrypted(const std::string& table, const std::string& column) const;
416
417 private:
418 std::string derive_key(const std::string& field_name) const;
419
420 mutable std::mutex encryption_mutex_;
421 std::string master_key_;
422 std::unordered_map<std::string, std::string> field_keys_;
423 std::unordered_map<std::string, encryption_type> encrypted_columns_;
424 };
425
426 // Utility functions for permission checking
428 return static_cast<access_control::permission>(static_cast<int>(a) | static_cast<int>(b));
429 }
430
432 return (static_cast<int>(permissions) & static_cast<int>(check)) != 0;
433 }
434
435
436} // namespace database::security
Role-based access control (RBAC) system.
bool terminate_session(const std::string &session_id)
bool check_table_access(const std::string &user_id, const std::string &table) const
access_control()=default
Default constructor - used by database_context.
bool create_role(const role &new_role)
std::unordered_map< std::string, role > roles_
std::string create_session(const std::string &user_id, const std::string &client_ip)
bool revoke_role_from_user(const std::string &user_id, const std::string &role_name)
std::vector< role > get_user_roles(const std::string &user_id) const
std::unordered_map< std::string, std::vector< std::string > > user_roles_
bool check_permission(const std::string &user_id, const std::string &table, const std::string &operation) const
bool assign_role_to_user(const std::string &user_id, const std::string &role_name)
bool validate_session(const std::string &session_id) const
std::unordered_map< std::string, user_session > active_sessions_
Security audit logging system.
void log_database_access(const std::string &user_id, const std::string &session_id, const std::string &operation, const std::string &table, const std::string &query_hash, bool success, const std::string &error_message="")
std::string generate_security_report(std::chrono::hours window) const
std::vector< audit_log_entry > get_user_audit_logs(const std::string &user_id, std::chrono::hours window) const
void set_log_retention_period(std::chrono::hours retention)
audit_logger()=default
Default constructor - used by database_context.
std::vector< audit_log_entry > audit_logs_
std::vector< std::string > detect_suspicious_activity(std::chrono::hours window) const
void persist_entry(const audit_log_entry &entry)
void log_authentication_event(const std::string &user_id, const std::string &client_ip, bool success, const std::string &method)
bool export_logs_to_file(const std::string &filename) const
void log_authorization_failure(const std::string &user_id, const std::string &operation, const std::string &table, const std::string &reason)
std::vector< audit_log_entry > get_audit_logs(std::chrono::hours window) const
Handles secure database connections.
std::string decrypt_connection_string(const std::string &encrypted_string) const
std::string encrypt_connection_string(const std::string &connection_string) const
bool set_cipher_suite(const std::string &ciphers)
connection_security(const security_credentials &credentials)
bool establish_secure_connection(const std::string &host, int port)
bool verify_server_certificate(const std::string &certificate) const
bool configure_tls(const std::string &cert_file, const std::string &key_file, const std::string &ca_file)
Manages encrypted credential storage and retrieval.
std::optional< security_credentials > get_credentials(const std::string &connection_id) const
std::string encrypt_data(const std::string &data) const
void set_master_key(const std::string &key)
bool verify_password(const std::string &password, const std::string &hash) const
std::string hash_password(const std::string &password) const
bool remove_credentials(const std::string &connection_id)
std::unordered_map< std::string, std::string > encrypted_credentials_
bool store_credentials(const std::string &connection_id, const security_credentials &credentials)
std::string decrypt_data(const std::string &encrypted_data) const
credential_manager()=default
Default constructor - used by database_context.
Data encryption and key management.
std::unordered_map< std::string, std::string > field_keys_
bool configure_encrypted_column(const std::string &table, const std::string &column, encryption_type type)
bool generate_field_key(const std::string &field_name)
bool is_column_encrypted(const std::string &table, const std::string &column) const
encryption_manager()=default
Default constructor - used by database_context.
bool rotate_field_key(const std::string &field_name)
std::unordered_map< std::string, encryption_type > encrypted_columns_
std::string derive_key(const std::string &field_name) const
void set_master_encryption_key(const std::string &key)
std::string decrypt_field_data(const std::string &encrypted_data, const std::string &field_name) const
std::string encrypt_field_data(const std::string &data, const std::string &field_name) const
SQL injection prevention and query security.
static std::string convert_to_prepared_statement(const std::string &query, const std::vector< core::database_value > &parameters)
static std::string escape_sql_string(const std::string &value)
static std::string sanitize_input(const std::string &input)
static const std::vector< std::string > injection_patterns_
static bool is_query_safe(const std::string &query)
static bool detect_suspicious_patterns(const std::string &query)
static std::vector< std::string > extract_table_names(const std::string &query)
static const std::vector< std::string > dangerous_keywords_
static bool validate_table_access(const std::string &table, const std::string &operation, const std::string &user)
Real-time security monitoring and alerting.
size_t get_suspicious_query_count(std::chrono::hours window) const
std::unordered_map< std::string, std::vector< std::string > > user_query_patterns_
size_t get_failed_login_count(std::chrono::hours window) const
std::vector< security_alert > security_alerts_
void monitor_privilege_escalation(const std::string &user_id, const std::string &operation)
security_monitor()=default
Default constructor - used by database_context.
std::vector< std::function< void(const security_alert &)> > alert_handlers_
std::unordered_map< std::string, size_t > failed_login_attempts_
void emit_security_alert(threat_level level, const std::string &type, const std::string &description, const std::string &user_id="")
void detect_brute_force_attempts(const std::string &client_ip)
std::vector< security_alert > get_recent_alerts(std::chrono::hours window) const
void register_security_handler(std::function< void(const security_alert &)> handler)
void analyze_query_patterns(const std::string &user_id, const std::string &query)
Abstract interface for database backends.
Defines the enumeration of supported database types.
access_control::permission operator|(access_control::permission a, access_control::permission b)
bool has_permission(access_control::permission permissions, access_control::permission check)
authentication_method
Authentication methods supported.
encryption_type
Types of encryption supported.
std::chrono::system_clock::time_point created_at
std::chrono::system_clock::time_point last_activity
std::chrono::system_clock::time_point login_time
Audit log entry for security events.
std::string operation
std::string table_name
std::string error_message
std::string user_agent
std::string user_id
std::string query_hash
std::string client_ip
std::chrono::system_clock::time_point timestamp
std::string session_id
bool success
std::chrono::system_clock::time_point token_expiry
std::chrono::system_clock::time_point timestamp