Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Django PostgreSQL Anonymizer

Tests Coverage License Downloads Python Maintained PyPI version PRs Welcome Python versions Django versions GitHub stars Security: bandit Code style: ruff

Professional-grade data anonymization for Django applications using PostgreSQL's native anonymizer extension.

Anonymize sensitive data in development, testing, and analytics environments. Django PostgreSQL Anonymizer provides seamless integration with the PostgreSQL Anonymizer extension, enabling you to anonymize data at the database level with zero performance overhead. Ideal for development workflows, safe data sharing, and reducing privacy risks.

⚠️ Beta Status: This package is currently in beta. Core features are stable, but APIs may still change before 1.0. Test thoroughly before production use.

✨ Why Choose This Library?

  • 🚀 Zero Performance Overhead - Database-level anonymization means no application slowdown
  • 🔒 Role-Based Access - Database role switching with audit logging
  • 🎯 Effortless Django Integration - Middleware, context managers, decorators, and admin interface
  • 📋 Industry Presets - Pre-built anonymization rules for healthcare, finance, e-commerce domains
  • ⚡ Real-time Data Switching - Toggle between real and anonymized data instantly, no downtime
  • 🛡️ Security-First Design - Built-in SQL injection prevention and function validation
  • 🔄 Multiple Access Patterns - Choose automatic (middleware), manual (context managers), or decorator-based approaches
  • 🧪 Well-Tested - Comprehensive test coverage with type safety

🚀 Quick Start

Install:

pip install django-postgres-anonymizer

Configure:

# settings.py
INSTALLED_APPS = ['django_postgres_anon']
POSTGRES_ANON = {
    'ENABLED': True,
    'MASKED_GROUPS': ['analysts', 'qa_team'],
}

Initialize:

python manage.py migrate
python manage.py anon_init

Use:

# Automatic (middleware) - users in masked groups see anonymized data
User.objects.all()  # Automatically anonymized for analysts/qa_team

# Manual (context manager)
from django_postgres_anon.context_managers import anonymized_data
with anonymized_data():
    users = User.objects.all()  # Anonymized data

# Decorator
from django_postgres_anon.decorators import use_anonymized_data
@use_anonymized_data
def sensitive_report(request):
    return render(request, 'report.html', {
        'users': User.objects.all()  # Automatically anonymized
    })

📚 Documentation

📖 Full Documentation

🎯 Real-World Use Cases

Development & Testing

  • 🔧 Safe Development - Use realistic production-like data without privacy risks
  • 🧪 QA & Testing - Test with anonymized datasets that mirror production
  • 🐛 Bug Reproduction - Debug with real data patterns safely

Data Sharing & Analytics

  • 📊 Business Intelligence - Share anonymized data with internal analysts
  • 🤝 Third-party Integration - Safely export data to vendors and partners
  • 🎓 Training & Demos - Create realistic demos without exposing sensitive data

Privacy & Compliance

  • 🔒 Privacy by Design - Reduce risk of data exposure in non-production environments
  • 📋 Compliance Support - Tool to help with data protection requirements
  • 🛡️ Data Minimization - Limit exposure of sensitive data to development teams

🤔 Why Not Just...?

"Why not use fake data generators like Faker?" Application-level anonymization is slow and risky. Database-level anonymization is instant, secure, and happens before data ever reaches your application code.

"Why not just delete sensitive data?" You lose referential integrity and realistic data patterns needed for proper testing and debugging. Anonymization preserves data structure and relationships.

"Why not use separate test fixtures?" Fixtures don't reflect real-world edge cases, data distributions, or production issues. Anonymized production data gives you the real picture without the risk.

"Why not query-by-query anonymization in views?" Manual anonymization is error-prone and easy to forget. This library provides automatic, middleware-based anonymization that just works.

🏗️ Architecture

graph LR
    A[Django App] --> B[Middleware/Context Manager]
    B --> C[PostgreSQL Role Switch]
    C --> D[Anonymized Views]
    D --> E[Masked Data]

Core Components:

  • Middleware - Automatic anonymization for user groups
  • Context Managers - Manual anonymized data access
  • Decorators - View-level anonymization
  • Admin Interface - Rule management and monitoring
  • Management Commands - CLI operations and automation

🛡️ Security Features

  • SQL Injection Prevention - Function validation and sanitization
  • Role-based Access Control - Database-level security isolation
  • Audit Logging - Complete operation tracking
  • Zero Data Leakage - Original data never leaves the database
  • Validated Functions - Whitelist-based anonymization function validation

📦 Requirements

🚧 Cloud Platform Support

Platform Support Notes
Self-hosted PostgreSQL ✅ Full Recommended for production
Docker ✅ Full Pre-built images available
AWS RDS ❌ Limited Extension requires superuser
Azure PostgreSQL ❌ Limited Extension not available
Google Cloud SQL ❌ Limited Extension not available
Heroku Postgres ❌ Limited Extension not available

Note: Managed cloud services don't support the PostgreSQL Anonymizer extension. Use self-hosted PostgreSQL or Docker for full functionality.

🧪 Example Project

git clone https://github.com/CuriousLearner/django-postgres-anonymizer.git
cd django-postgres-anonymizer/example_project
pip install -r requirements.txt
python manage.py migrate
python manage.py anon_init
python manage.py runserver

Visit http://localhost:8000 to explore the interactive demo.

🤝 Contributing

We welcome contributions! See our Contributing Guide for details.

📄 License

BSD-3-Clause License. See LICENSE for details.

🙏 Acknowledgments

  • PostgreSQL Anonymizer - Core anonymization engine
  • Django community - Framework excellence
  • Contributors and early adopters - Valuable feedback

⭐ Star this project if you find it useful!

📚 Read the Docs | 🐛 Report Issues | 💬 Discussions

Metadata

Release files for django-postgres-anonymizer 0.1.0b1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-postgres-anonymizer 0.1.0b1
File Size Uploaded
django_postgres_anonymizer-0.1.0b1.tar.gz 37.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-postgres-anonymizer 0.1.0b1
File Interpreter ABI Platform
django_postgres_anonymizer-0.1.0b1-py3-none-any.whl Python 3 none any Details

Total release size: 73.4 kB

Release files / django_postgres_anonymizer-0.1.0b1.tar.gz

Download URL django_postgres_anonymizer-0.1.0b1.tar.gz
Size 37.5 kB
Tags Source
SHA-256 checksum
How to use checksums
647b87b495bca52adb54f0df66869f271d7320a77b961b8551d090ddaa110db6
BLAKE2b-256 checksum
How to use checksums
80242e0ac1b8e57eb63dec122e42211935e6d3d1c11336d2bb2264639ad7bb83
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release files / django_postgres_anonymizer-0.1.0b1-py3-none-any.whl

Download URL django_postgres_anonymizer-0.1.0b1-py3-none-any.whl
Size 35.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
411d605346bf2efb52b9c1029e843746b56689192a0306f1fc163b8f0177305a
BLAKE2b-256 checksum
How to use checksums
ba551401e4d331e56192df5205b25ddedf5ced9652371ad333559503869623e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.1.0b1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page