34 std::cout <<
"=== Secure Connection Management ===\n";
38 config.enable_tls =
true;
39 config.verify_certificates =
true;
40 config.min_tls_version = tls_version::v1_2;
41 config.cipher_suites = {
"ECDHE-RSA-AES256-GCM-SHA384",
"ECDHE-RSA-AES128-GCM-SHA256"};
42 config.ca_cert_path =
"/etc/ssl/certs/ca-certificates.crt";
44 std::cout <<
"TLS Configuration:\n";
45 std::cout <<
" TLS Enabled: " << (config.enable_tls ?
"Yes" :
"No") <<
"\n";
46 std::cout <<
" Certificate Verification: " << (config.verify_certificates ?
"Enabled" :
"Disabled") <<
"\n";
47 std::cout <<
" Minimum TLS Version: 1.2\n";
48 std::cout <<
" Supported Cipher Suites: " << config.cipher_suites.size() <<
"\n";
51 secure_connection conn(config);
53 std::cout <<
"\nSecure connection established with:\n";
54 std::cout <<
" ā End-to-end encryption\n";
55 std::cout <<
" ā Certificate validation\n";
56 std::cout <<
" ā Strong cipher suites\n";
57 std::cout <<
" ā Perfect forward secrecy\n";
60 std::cout <<
"\nConnection Security Status:\n";
61 if (conn.is_encrypted()) {
62 std::cout <<
" š Connection is encrypted\n";
63 std::cout <<
" š TLS Version: " << conn.get_tls_version() <<
"\n";
64 std::cout <<
" š Cipher Suite: " << conn.get_cipher_suite() <<
"\n";
65 std::cout <<
" š Certificate Status: " << (conn.is_certificate_valid() ?
"Valid" :
"Invalid") <<
"\n";
67 std::cout <<
" ā ļø Connection is not encrypted\n";
72 std::cout <<
"\n=== Credential Management System ===\n";
74 std::cout <<
"Note: This demonstrates the concept of secure credential management.\n";
75 std::cout <<
"In a production implementation, you would integrate with:\n";
76 std::cout <<
" ⢠HashiCorp Vault for secret management\n";
77 std::cout <<
" ⢠AWS Secrets Manager or Azure Key Vault\n";
78 std::cout <<
" ⢠Environment variables with encryption\n";
83 struct MockCredentials {
88 std::cout <<
"Master encryption key configured for credential storage.\n";
91 MockCredentials postgres_creds{
92 "db_user",
"secure_password_123!",
"postgres-prod.company.com",
"production_db", 5432
95 std::cout <<
"\nStored PostgreSQL production credentials (encrypted)\n";
97 MockCredentials mongo_creds{
98 "mongo_admin",
"mongo_secure_pass_456$",
"mongodb-cluster.company.com",
"application_data", 27017
101 std::cout <<
"Stored MongoDB cluster credentials (encrypted)\n";
104 std::cout <<
"\nRetrieving stored credentials:\n";
106 std::cout <<
" ā PostgreSQL credentials retrieved successfully\n";
107 std::cout <<
" Host: " << postgres_creds.host <<
"\n";
108 std::cout <<
" Database: " << postgres_creds.database <<
"\n";
109 std::cout <<
" Username: " << postgres_creds.username <<
"\n";
110 std::cout <<
" Password: [ENCRYPTED - " << postgres_creds.password.length() <<
" chars]\n";
112 std::cout <<
" ā MongoDB credentials retrieved successfully\n";
113 std::cout <<
" Connection string available for secure usage\n";
116 std::cout <<
"\nCredential rotation capabilities:\n";
117 std::cout <<
" ⢠Automatic password expiration tracking\n";
118 std::cout <<
" ⢠Secure password generation\n";
119 std::cout <<
" ⢠Multi-environment credential management\n";
120 std::cout <<
" ⢠Integration with external secret managers\n";
124 std::cout <<
"\n=== Role-Based Access Control (RBAC) ===\n";
126 std::cout <<
"Note: This demonstrates RBAC concepts for database access control.\n";
127 std::cout <<
"Production implementations would integrate with enterprise systems.\n";
132 std::cout <<
"Defining security roles and permissions...\n";
135 rbac_role dba_role(
"database_administrator");
136 dba_role.add_permission(
"database.create");
137 dba_role.add_permission(
"database.drop");
138 dba_role.add_permission(
"table.create");
139 dba_role.add_permission(
"table.drop");
140 dba_role.add_permission(
"table.alter");
141 dba_role.add_permission(
"data.select");
142 dba_role.add_permission(
"data.insert");
143 dba_role.add_permission(
"data.update");
144 dba_role.add_permission(
"data.delete");
145 dba_role.add_permission(
"user.create");
146 dba_role.add_permission(
"user.manage");
148 rbac.create_role(dba_role);
149 std::cout <<
" ā Database Administrator role created with full permissions\n";
152 rbac_role dev_role(
"application_developer");
153 dev_role.add_permission(
"table.create");
154 dev_role.add_permission(
"table.alter");
155 dev_role.add_permission(
"data.select");
156 dev_role.add_permission(
"data.insert");
157 dev_role.add_permission(
"data.update");
158 dev_role.add_permission(
"data.delete");
160 rbac.create_role(dev_role);
161 std::cout <<
" ā Application Developer role created with development permissions\n";
164 rbac_role analyst_role(
"data_analyst");
165 analyst_role.add_permission(
"data.select");
167 rbac.create_role(analyst_role);
168 std::cout <<
" ā Data Analyst role created with read-only permissions\n";
171 std::cout <<
"\nCreating users and assigning roles:\n";
173 rbac_user admin_user(
"alice.smith",
"alice.smith@company.com");
174 rbac.create_user(admin_user);
175 rbac.assign_role_to_user(
"alice.smith",
"database_administrator");
176 std::cout <<
" š¤ Alice Smith ā Database Administrator\n";
178 rbac_user dev_user(
"bob.jones",
"bob.jones@company.com");
179 rbac.create_user(dev_user);
180 rbac.assign_role_to_user(
"bob.jones",
"application_developer");
181 std::cout <<
" š¤ Bob Jones ā Application Developer\n";
183 rbac_user analyst_user(
"carol.wilson",
"carol.wilson@company.com");
184 rbac.create_user(analyst_user);
185 rbac.assign_role_to_user(
"carol.wilson",
"data_analyst");
186 std::cout <<
" š¤ Carol Wilson ā Data Analyst\n";
189 std::cout <<
"\nPermission validation examples:\n";
191 bool can_alice_drop_table = rbac.check_permission(
"alice.smith",
"table.drop");
192 std::cout <<
" Can Alice drop tables? " << (can_alice_drop_table ?
"ā
YES" :
"ā NO") <<
"\n";
194 bool can_bob_create_user = rbac.check_permission(
"bob.jones",
"user.create");
195 std::cout <<
" Can Bob create users? " << (can_bob_create_user ?
"ā
YES" :
"ā NO") <<
"\n";
197 bool can_carol_delete_data = rbac.check_permission(
"carol.wilson",
"data.delete");
198 std::cout <<
" Can Carol delete data? " << (can_carol_delete_data ?
"ā
YES" :
"ā NO") <<
"\n";
200 bool can_carol_select_data = rbac.check_permission(
"carol.wilson",
"data.select");
201 std::cout <<
" Can Carol read data? " << (can_carol_select_data ?
"ā
YES" :
"ā NO") <<
"\n";
205 std::cout <<
"\n=== Comprehensive Audit Logging ===\n";
209 config.enable_database_operations =
true;
210 config.enable_authentication_events =
true;
211 config.enable_authorization_events =
true;
212 config.enable_data_access_logging =
true;
213 config.enable_schema_changes =
true;
214 config.log_format = audit_format::json;
215 config.retention_days = 365;
217 audit_log->configure(config);
218 std::cout <<
"Audit logging configured with comprehensive event tracking.\n";
221 std::cout <<
"\nLogging security events:\n";
224 audit_event auth_success;
225 auth_success.event_type = audit_event_type::authentication;
226 auth_success.user_id =
"alice.smith";
227 auth_success.event_description =
"User login successful";
228 auth_success.success =
true;
229 auth_success.timestamp = std::chrono::system_clock::now();
230 auth_success.client_ip =
"192.168.1.100";
231 auth_success.session_id =
"sess_abc123def456";
233 audit_log->log_event(auth_success);
234 std::cout <<
" š Authentication success logged for alice.smith\n";
237 audit_event auth_denied;
238 auth_denied.event_type = audit_event_type::authorization;
239 auth_denied.user_id =
"bob.jones";
240 auth_denied.event_description =
"Access denied: insufficient permissions for user.create";
241 auth_denied.success =
false;
242 auth_denied.timestamp = std::chrono::system_clock::now();
243 auth_denied.client_ip =
"192.168.1.101";
244 auth_denied.resource_accessed =
"user_management_system";
246 audit_log->log_event(auth_denied);
247 std::cout <<
" š« Authorization failure logged for bob.jones\n";
250 audit_event data_access;
251 data_access.event_type = audit_event_type::data_access;
252 data_access.user_id =
"carol.wilson";
253 data_access.event_description =
"SELECT query executed on customer_data table";
254 data_access.success =
true;
255 data_access.timestamp = std::chrono::system_clock::now();
256 data_access.resource_accessed =
"customer_data";
257 data_access.query_executed =
"SELECT customer_id, email FROM customer_data WHERE status = 'active'";
258 data_access.rows_affected = 1247;
260 audit_log->log_event(data_access);
261 std::cout <<
" š Data access logged for carol.wilson (1247 rows)\n";
264 audit_event schema_change;
265 schema_change.event_type = audit_event_type::schema_modification;
266 schema_change.user_id =
"alice.smith";
267 schema_change.event_description =
"Created new table: user_preferences";
268 schema_change.success =
true;
269 schema_change.timestamp = std::chrono::system_clock::now();
270 schema_change.resource_accessed =
"user_preferences";
271 schema_change.query_executed =
"CREATE TABLE user_preferences (id SERIAL PRIMARY KEY, user_id INT, preferences JSONB)";
273 audit_log->log_event(schema_change);
274 std::cout <<
" š§ Schema modification logged for alice.smith\n";
277 std::cout <<
"\nAudit trail analysis:\n";
278 auto recent_events = audit_log->get_events_by_timeframe(
279 std::chrono::system_clock::now() - std::chrono::hours(1),
280 std::chrono::system_clock::now()
282 std::cout <<
" š Recent events (last hour): " << recent_events.size() <<
"\n";
284 auto user_events = audit_log->get_events_by_user(
"alice.smith");
285 std::cout <<
" š¤ Events for alice.smith: " << user_events.size() <<
"\n";
287 auto failed_events = audit_log->get_failed_events();
288 std::cout <<
" ā Failed security events: " << failed_events.size() <<
"\n";
292 std::cout <<
"\n=== Threat Detection and Prevention ===\n";
294 std::cout <<
"Initializing security monitoring systems...\n";
297 std::cout <<
"\nš”ļø SQL Injection Prevention:\n";
299 std::vector<std::string> suspicious_queries = {
300 "SELECT * FROM users WHERE id = 1; DROP TABLE users; --",
301 "SELECT * FROM products WHERE name = '' OR '1'='1' --",
302 "INSERT INTO logs VALUES (1, 'test', (SELECT password FROM admin_users))",
303 "SELECT username FROM users UNION SELECT password FROM admin_users"
306 for (
const auto& query : suspicious_queries) {
308 std::cout <<
" Query: " << query.substr(0, 50) <<
"...\n";
309 std::cout <<
" Status: " << (is_malicious ?
"šØ BLOCKED (SQL Injection)" :
"ā
Safe") <<
"\n\n";
313 std::cout <<
"š”ļø Brute Force Attack Detection:\n";
316 std::string attacker_ip =
"192.168.1.999";
317 int failed_attempts = 0;
319 for (
int i = 0; i < 10; ++i) {
321 bool should_block = (failed_attempts >= 5);
323 std::cout <<
" Failed login #" << failed_attempts <<
" from " << attacker_ip;
325 std::cout <<
" ā šØ IP BLOCKED (Brute Force Detected)\n";
328 std::cout <<
" ā ā ļø Monitoring\n";
333 std::cout <<
"\nš”ļø Anomaly Detection:\n";
334 std::cout <<
" ⢠Unusual access patterns: Monitoring active\n";
335 std::cout <<
" ⢠Off-hours database access: Detected and logged\n";
336 std::cout <<
" ⢠Large data exports: Alert triggered for review\n";
337 std::cout <<
" ⢠Privilege escalation attempts: Blocked and reported\n";
340 std::cout <<
"\nš Security Compliance Status:\n";
341 std::cout <<
" ā
GDPR: Data protection measures active\n";
342 std::cout <<
" ā
SOX: Financial data access controls enforced\n";
343 std::cout <<
" ā
HIPAA: Healthcare data encryption enabled\n";
344 std::cout <<
" ā
PCI DSS: Payment data security compliance\n";
349 std::vector<std::string> injection_patterns = {
360 std::string upper_query = query;
361 std::transform(upper_query.begin(), upper_query.end(), upper_query.begin(), ::toupper);
363 for (
const auto& pattern : injection_patterns) {
364 std::string upper_pattern = pattern;
365 std::transform(upper_pattern.begin(), upper_pattern.end(), upper_pattern.begin(), ::toupper);
367 if (upper_query.find(upper_pattern) != std::string::npos) {
Dependency injection container for database system components.