Back to Documentation

Compliance

Meet regulatory requirements with SOC2, HIPAA, GDPR, and ISO 27001 compliance

Overview

entropyDB helps you achieve compliance with:

  • SOC 2: Trust Services Criteria compliance
  • HIPAA: Healthcare data protection
  • GDPR: EU data privacy regulations
  • ISO 27001: Information security management
  • PCI DSS: Payment card data security

SOC 2 Compliance

-- Enable SOC 2 controls
ALTER SYSTEM SET compliance_framework = 'soc2';

-- Enable required audit logging
ALTER SYSTEM SET audit_logging = on;
ALTER SYSTEM SET audit_log_authentication = on;
ALTER SYSTEM SET audit_log_data_access = on;
ALTER SYSTEM SET audit_log_schema_changes = on;
ALTER SYSTEM SET audit_log_retention = '365d';

-- Configure access controls (CC6.1)
CREATE ROLE application_user;
GRANT SELECT, INSERT, UPDATE ON customer_data TO application_user;

-- Implement encryption (CC6.1)
ALTER SYSTEM SET encryption_at_rest = on;
ALTER SYSTEM SET encryption_in_transit = 'required';

-- Configure backup retention (A1.2)
ALTER SYSTEM SET backup_retention_days = 90;
ALTER SYSTEM SET backup_encryption = on;

-- Enable monitoring (CC7.2)
ALTER SYSTEM SET monitoring_enabled = on;
ALTER SYSTEM SET alerting_enabled = on;

-- Generate SOC 2 compliance report
SELECT entropy_generate_compliance_report(
  framework => 'soc2',
  start_date => '2024-01-01',
  end_date => '2024-12-31',
  output_format => 'pdf',
  output_path => '/reports/soc2_2024.pdf'
);

HIPAA Compliance

-- Enable HIPAA mode
ALTER SYSTEM SET compliance_framework = 'hipaa';

-- Configure PHI encryption (§164.312(a)(2)(iv))
CREATE TABLE patient_records (
  patient_id UUID PRIMARY KEY,
  ssn TEXT ENCRYPTED,
  medical_record_number TEXT ENCRYPTED,
  diagnosis TEXT ENCRYPTED,
  treatment_plan TEXT ENCRYPTED
);

-- Implement access controls (§164.312(a)(1))
CREATE ROLE physician;
CREATE ROLE nurse;
CREATE ROLE billing_staff;

-- PHI access policies
CREATE POLICY physician_access ON patient_records
  FOR ALL TO physician
  USING (true);

CREATE POLICY nurse_access ON patient_records
  FOR SELECT TO nurse
  USING (assigned_nurse = current_user);

-- Audit all PHI access (§164.312(b))
CREATE AUDIT POLICY hipaa_phi_audit
  ON patient_records
  FOR ALL
  AUDIT ALL;

-- Implement automatic logoff (§164.312(a)(2)(iii))
ALTER SYSTEM SET idle_session_timeout = '15min';

-- Backup requirements (§164.308(a)(7)(ii)(A))
ALTER SYSTEM SET backup_frequency = 'hourly';
ALTER SYSTEM SET backup_retention_days = 2555;  -- 7 years

-- Generate HIPAA audit report
SELECT entropy_generate_compliance_report(
  framework => 'hipaa',
  include_phi_access_log => true,
  include_breach_incidents => true
);

GDPR Compliance

-- Enable GDPR mode
ALTER SYSTEM SET compliance_framework = 'gdpr';
ALTER SYSTEM SET data_residency = 'eu';

-- Right to access (Article 15)
CREATE FUNCTION get_user_data(user_email TEXT)
RETURNS JSON AS $$
  SELECT json_build_object(
    'personal_info', (SELECT row_to_json(users.*) FROM users WHERE email = user_email),
    'orders', (SELECT json_agg(orders.*) FROM orders WHERE customer_email = user_email),
    'activity', (SELECT json_agg(activity_log.*) FROM activity_log WHERE user_email = user_email)
  );
$$ LANGUAGE SQL;

-- Right to erasure (Article 17)
CREATE FUNCTION erase_user_data(user_email TEXT)
RETURNS VOID AS $$
BEGIN
  -- Anonymize user data
  UPDATE users 
  SET 
    first_name = 'DELETED',
    last_name = 'DELETED',
    email = CONCAT('deleted_', user_id, '@example.com'),
    phone = NULL,
    address = NULL,
    deleted_at = NOW()
  WHERE email = user_email;
  
  -- Delete associated data
  DELETE FROM sessions WHERE user_email = user_email;
  DELETE FROM activity_log WHERE user_email = user_email;
  
  -- Audit the deletion
  INSERT INTO gdpr_deletion_log (email, deleted_at, deleted_by)
  VALUES (user_email, NOW(), current_user);
END;
$$ LANGUAGE plpgsql;

-- Right to data portability (Article 20)
CREATE FUNCTION export_user_data(user_email TEXT)
RETURNS TEXT AS $$
  COPY (
    SELECT * FROM get_user_data(user_email)
  ) TO '/exports/user_data.json';
  
  RETURN '/exports/user_data.json';
$$ LANGUAGE SQL;

-- Consent management (Article 7)
CREATE TABLE consent_records (
  consent_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_email TEXT,
  purpose TEXT,
  consented_at TIMESTAMP,
  consent_method TEXT,
  ip_address INET,
  user_agent TEXT
);

-- Data retention policies (Article 5)
CREATE TABLE retention_policies (
  table_name TEXT,
  retention_days INTEGER,
  deletion_method TEXT  -- 'delete' or 'anonymize'
);

-- Automated retention enforcement
CREATE FUNCTION enforce_retention_policies()
RETURNS VOID AS $$
DECLARE
  policy RECORD;
BEGIN
  FOR policy IN SELECT * FROM retention_policies LOOP
    EXECUTE format(
      'DELETE FROM %I WHERE created_at < NOW() - INTERVAL ''%s days''',
      policy.table_name, policy.retention_days
    );
  END LOOP;
END;
$$ LANGUAGE plpgsql;

-- Schedule retention enforcement
CREATE CRON JOB enforce_retention
  SCHEDULE '0 2 * * *'  -- Daily at 2 AM
  EXECUTE 'SELECT enforce_retention_policies()';

ISO 27001 Compliance

-- Enable ISO 27001 controls
ALTER SYSTEM SET compliance_framework = 'iso27001';

-- A.9.2.1: User registration and de-registration
CREATE TABLE user_lifecycle_log (
  event_id UUID PRIMARY KEY,
  username TEXT,
  event_type TEXT,  -- 'created', 'modified', 'disabled', 'deleted'
  performed_by TEXT,
  performed_at TIMESTAMP,
  details JSONB
);

-- A.9.2.4: Management of secret authentication
ALTER SYSTEM SET password_min_length = 12;
ALTER SYSTEM SET password_complexity = 'high';
ALTER SYSTEM SET password_expiration_days = 90;
ALTER SYSTEM SET password_history = 10;

-- A.9.4.1: Information access restriction
CREATE POLICY restrict_sensitive_data ON financial_data
  FOR ALL
  USING (
    user_has_clearance(current_user, 'financial') OR
    department = user_department(current_user)
  );

-- A.12.3.1: Information backup
ALTER SYSTEM SET backup_frequency = 'daily';
ALTER SYSTEM SET backup_verification = on;
ALTER SYSTEM SET offsite_backup = on;

-- A.12.4.1: Event logging
ALTER SYSTEM SET audit_logging = on;
ALTER SYSTEM SET audit_log_all_queries = on;
ALTER SYSTEM SET audit_log_retention = '730d';  -- 2 years

-- A.18.1.1: Compliance review
CREATE FUNCTION iso27001_compliance_check()
RETURNS TABLE(control TEXT, status TEXT, details TEXT) AS $$
  SELECT 'A.9.2.1' as control, 
         CASE WHEN EXISTS (SELECT 1 FROM user_lifecycle_log) 
              THEN 'COMPLIANT' ELSE 'NON-COMPLIANT' END,
         'User lifecycle tracking';
  -- Add more control checks
$$ LANGUAGE SQL;

Compliance Automation

-- Automated compliance monitoring
CREATE TABLE compliance_checks (
  check_id UUID PRIMARY KEY,
  framework TEXT,  -- 'soc2', 'hipaa', 'gdpr', 'iso27001'
  control_id TEXT,
  check_name TEXT,
  check_query TEXT,
  frequency INTERVAL,
  last_run TIMESTAMP,
  last_status TEXT  -- 'pass', 'fail', 'warning'
);

-- Example compliance checks
INSERT INTO compliance_checks (framework, control_id, check_name, check_query, frequency) VALUES
('soc2', 'CC6.1', 'Encryption enabled', 
 'SELECT CASE WHEN current_setting(''encryption_at_rest'') = ''on'' THEN ''pass'' ELSE ''fail'' END', 
 '1 day'),
 
('hipaa', '164.312(b)', 'PHI audit logging', 
 'SELECT CASE WHEN COUNT(*) > 0 THEN ''pass'' ELSE ''fail'' END FROM entropy_audit_policies WHERE table_name = ''patient_records''', 
 '1 day'),
 
('gdpr', 'Article 17', 'Data retention enforcement', 
 'SELECT CASE WHEN COUNT(*) = 0 THEN ''pass'' ELSE ''fail'' END FROM users WHERE created_at < NOW() - INTERVAL ''5 years'' AND deleted_at IS NULL', 
 '1 week');

-- Run compliance checks
CREATE FUNCTION run_compliance_checks()
RETURNS TABLE(framework TEXT, control_id TEXT, status TEXT) AS $$
DECLARE
  check RECORD;
  result TEXT;
BEGIN
  FOR check IN SELECT * FROM compliance_checks LOOP
    EXECUTE check.check_query INTO result;
    
    UPDATE compliance_checks
    SET last_run = NOW(), last_status = result
    WHERE check_id = check.check_id;
    
    RETURN QUERY SELECT check.framework, check.control_id, result;
  END LOOP;
END;
$$ LANGUAGE plpgsql;

-- Schedule automated checks
CREATE CRON JOB compliance_monitoring
  SCHEDULE '0 */6 * * *'  -- Every 6 hours
  EXECUTE 'SELECT run_compliance_checks()';

-- Generate compliance dashboard
SELECT 
  framework,
  COUNT(*) as total_checks,
  COUNT(*) FILTER (WHERE last_status = 'pass') as passed,
  COUNT(*) FILTER (WHERE last_status = 'fail') as failed,
  COUNT(*) FILTER (WHERE last_status = 'warning') as warnings
FROM compliance_checks
GROUP BY framework;

Best Practices

Documentation

  • • Maintain compliance documentation
  • • Regular policy reviews
  • • Document all control implementations
  • • Keep audit trail of changes

Monitoring

  • • Automated compliance checks
  • • Regular internal audits
  • • Continuous monitoring
  • • Incident response procedures

Next Steps