# c77_secure_db **Enterprise-grade PostgreSQL extension for secure database operations with tamper detection and transaction control.** [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-14%2B-blue.svg)](https://www.postgresql.org/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Version](https://img.shields.io/badge/Version-2.0-orange.svg)](CHANGELOG.md) ## ๐Ÿ”’ **Security-First Database Protection** c77_secure_db provides database-level security that cannot be bypassed by application bugs or SQL injection attacks. All data modifications go through secure, audited operations with cryptographic tamper detection. ### **Why c77_secure_db?** - **๐Ÿ›ก๏ธ Unbypassable Security**: Token-based authorization prevents all unauthorized access - **๐Ÿ” Tamper Detection**: SHA-256 content hashing detects any unauthorized data changes - **๐Ÿ“Š Complete Audit Trail**: Every operation logged with user context and performance metrics - **๐Ÿ”— RBAC Integration**: Seamless integration with c77_rbac extension for advanced permissions - **โšก Production Ready**: Optimized for high-performance enterprise workloads - **๐Ÿ—๏ธ Framework Agnostic**: Works with Laravel, Django, Node.js, and any PostgreSQL client ## ๐Ÿš€ **Quick Start** ### Installation ```bash # Copy files to PostgreSQL extension directory sudo cp c77_secure_db.control $(pg_config --sharedir)/extension/ sudo cp c77_secure_db--1.0.sql $(pg_config --sharedir)/extension/ ``` ```sql -- Install extension (requires superuser) sudo -u postgres psql CREATE EXTENSION IF NOT EXISTS pgcrypto; CREATE EXTENSION c77_secure_db; -- Verify installation (CRITICAL - must pass!) SELECT c77_secure_db_run_all_tests(); -- Set up application user CREATE USER myapp_user WITH PASSWORD 'secure_password'; GRANT c77_secure_db_user TO myapp_user; ``` ### Basic Usage ```sql -- Create secure schema CREATE SCHEMA myapp; SELECT c77_secure_db_manage_secure_schemas('add', 'myapp'); -- Create secure table CREATE TABLE myapp.users ( id BIGSERIAL PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL, -- Required security columns content_hash TEXT, hash_version INTEGER DEFAULT 1, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW(), deleted_at TIMESTAMPTZ ); -- Secure operations (direct SQL is automatically blocked) SELECT c77_secure_db_operation(jsonb_build_object( 'schema_name', 'myapp', 'table_name', 'users', 'operation', 'insert', 'data', jsonb_build_object( 'name', 'John Doe', 'email', 'john@example.com' ) )); ``` ## โœจ **Key Features** ### **Token-Based Security** - **5-second expiring tokens** prevent replay attacks - **Single-use authorization** - tokens cannot be reused - **Session-specific** - tied to database connection - **Automatic cleanup** - no token buildup ### **Content Hash Verification** - **SHA-256 cryptographic hashing** for tamper detection - **Configurable exclusions** - exclude frequently changing columns - **Automatic calculation** - hashes computed transparently - **Bulk verification** - check entire tables for integrity ### **Comprehensive Audit Logging** - **Every operation logged** with complete context - **Performance metrics** - execution time tracking - **User attribution** - who did what, when - **Error tracking** - detailed failure analysis ### **RBAC Integration** - **Optional c77_rbac integration** - works standalone or with advanced permissions - **Feature-based security** - granular permission control - **Scope-based access** - department, region, or custom scopes - **Graceful degradation** - works without RBAC if not needed ## ๐Ÿ”ง **Advanced Features** ### **Bulk Operations** ```sql -- Verify multiple records at once SELECT c77_secure_db_check_freshness_bulk( 'myapp', 'users', '[{"id":1,"name":"John"},{"id":2,"name":"Jane"}]'::jsonb ); ``` ### **Hash Verification** ```sql -- Check all records in a table SELECT c77_secure_db_verify_content_hashes('myapp', 'users'); -- Fix any hash mismatches SELECT c77_secure_db_verify_content_hashes('myapp', 'users', true); ``` ### **RBAC-Protected Operations** ```sql -- Set user context SET "c77_rbac.external_id" TO '123'; -- Use operation with permission checking SELECT c77_secure_db_operation( jsonb_build_object(...), true, -- check RBAC 'secure_db_insert' -- required permission ); ``` ## ๐Ÿ—๏ธ **Framework Integration** ### **Laravel** ```php // Service class integration class SecureDbService { public function insert(string $table, array $data): array { $result = DB::selectOne('SELECT c77_secure_db_operation(?) as result', [ json_encode([ 'schema_name' => 'myapp', 'table_name' => $table, 'operation' => 'insert', 'data' => $data ]) ]); return json_decode($result->result, true); } } ``` ### **Node.js** ```javascript // Express integration const secureDb = { async insert(table, data) { const result = await pool.query( 'SELECT c77_secure_db_operation($1) as result', [JSON.stringify({ schema_name: 'myapp', table_name: table, operation: 'insert', data: data })] ); return JSON.parse(result.rows[0].result); } }; ``` ### **Django** ```python # Django service integration class SecureDbService: def insert(self, table, data): with connection.cursor() as cursor: cursor.execute( "SELECT c77_secure_db_operation(%s) as result", [json.dumps({ 'schema_name': 'myapp', 'table_name': table, 'operation': 'insert', 'data': data })] ) result = cursor.fetchone()[0] return json.loads(result) ``` ## ๐Ÿ“Š **Monitoring & Maintenance** ### **Health Monitoring** ```sql -- System health check SELECT c77_secure_db_health_check(); -- Performance monitoring SELECT operation_type, avg(execution_time_ms) as avg_time, count(*) as operation_count FROM c77_secure_db_operation_audit WHERE created_at > now() - interval '1 hour' GROUP BY operation_type; ``` ### **Maintenance** ```sql -- Daily cleanup SELECT c77_secure_db_cleanup_expired_tokens(); -- Weekly integrity check SELECT c77_secure_db_verify_content_hashes('myapp', 'users'); ``` ## ๐Ÿ›ก๏ธ **Security Architecture** ### **Multi-Layer Protection** 1. **Trigger Layer**: Prevents all direct SQL modifications 2. **Token Layer**: Authorizes legitimate operations with expiring tokens 3. **Hash Layer**: Detects unauthorized data tampering 4. **Audit Layer**: Logs all operations for compliance 5. **RBAC Layer**: Optional permission-based access control ### **Threat Mitigation** - โœ… **SQL Injection**: Cannot bypass trigger protection - โœ… **Data Tampering**: Detected by content hash verification - โœ… **Unauthorized Access**: Blocked by token validation - โœ… **Replay Attacks**: Prevented by single-use tokens - โœ… **Session Hijacking**: Mitigated by session-specific tokens - โœ… **Application Bugs**: Cannot bypass database-level security ## ๐Ÿ”„ **Migration from v1.x** **โš ๏ธ BREAKING CHANGES**: Version 2.0 is a complete security rewrite. The vulnerable session variable approach has been completely removed: ```sql -- โŒ v1.x had this vulnerability (NEVER use this approach) SET "myapp.allow_direct_modification" TO 'true'; -- Could bypass security! -- โœ… v2.0 uses secure token-based authorization (unbypassable) -- All security is handled internally by the extension ``` **Migration Steps:** 1. Backup your data 2. Drop old extension: `DROP EXTENSION c77_secure_db CASCADE;` 3. Install v2.0: `CREATE EXTENSION c77_secure_db;` 4. Re-register secure schemas 5. Run security tests: `SELECT c77_secure_db_run_all_tests();` ## ๐Ÿ“š **Documentation** - **[USAGE.md](USAGE.md)** - Comprehensive usage guide with examples - **[INSTALL.md](INSTALL.md)** - Detailed installation instructions - **[CHANGELOG.md](CHANGELOG.md)** - Version history and changes - **[SECURITY.md](SECURITY.md)** - Security policies and reporting ## โšก **Performance** Designed for production workloads: - **Optimized hash calculations** - Efficient SHA-256 implementation - **Indexed operations** - Fast token lookups and audit queries - **Bulk processing** - Handle thousands of records efficiently - **Minimal overhead** - < 10ms typical operation time - **Scalable architecture** - Tested with millions of records ## ๐Ÿงช **Testing** Built-in comprehensive test suite: ```sql -- Run all tests (must pass before production use) SELECT c77_secure_db_run_all_tests(); -- Security-specific tests SELECT c77_secure_db_test_security(); -- RBAC integration tests SELECT c77_secure_db_test_rbac_integration(); ``` ## ๐Ÿข **Production Use Cases** ### **Healthcare** - HIPAA compliance with audit trails - Patient data integrity verification - Role-based access by department ### **Financial Services** - Transaction integrity protection - Regulatory audit requirements - Multi-level approval workflows ### **E-commerce** - Customer data protection - Order processing security - Payment data integrity ### **Government** - Classification-based access control - Data integrity verification - Complete audit trails ## ๐Ÿค **Contributing** Contributions are welcome! Please: 1. Fork the repository 2. Create a feature branch 3. Add tests for new functionality 4. Ensure all tests pass 5. Submit a pull request ### **Development Setup** ```bash # Clone repository git clone https://github.com/yourusername/c77_secure_db.git cd c77_secure_db # Install in development PostgreSQL make install # Run tests make test ``` ## ๐Ÿ“‹ **Requirements** - **PostgreSQL**: 14 or later - **Extensions**: pgcrypto (required), c77_rbac (optional) - **Installation**: Superuser privileges required for installation - **Usage**: Regular database users (with granted roles) - **Platform**: Linux, macOS, Windows (with PostgreSQL) ## ๐Ÿ“ **License** MIT License - see [LICENSE](LICENSE) file for details. ## ๐Ÿ†˜ **Support** - **Documentation**: Check [USAGE.md](USAGE.md) for comprehensive guides - **Issues**: Report bugs via GitHub Issues - **Security**: See [SECURITY.md](SECURITY.md) for vulnerability reporting - **Discussions**: Use GitHub Discussions for questions ## ๐Ÿ”— **Related Projects** - **[c77_rbac](https://github.com/yourusername/c77_rbac)** - Role-Based Access Control extension - **PostgreSQL Extensions** - Part of the c77_ extension family ## โญ **Why Choose c77_secure_db?** > "Traditional application-level security can be bypassed by bugs, SQL injection, or direct database access. c77_secure_db provides unbypassable database-level protection with cryptographic integrity verification." ### **Before c77_secure_db** ```sql -- โŒ Vulnerable to bypasses INSERT INTO users (name) VALUES ('Hacker'); -- Could work! ``` ### **After c77_secure_db** ```sql -- โŒ Automatically blocked INSERT INTO users (name) VALUES ('Hacker'); -- ERROR: Direct modifications not allowed -- โœ… Must use secure API SELECT c77_secure_db_operation(...); -- Audited, authorized, verified ``` --- **Get started today and secure your PostgreSQL database with enterprise-grade protection!** ```sql CREATE EXTENSION c77_secure_db; SELECT c77_secure_db_run_all_tests(); -- Must pass! ```