{ "info": { "author": "Matt Boyer", "author_email": "mboyer@sdf.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Database", "Topic :: System :: Recovery Tools" ], "description": "Bring the shine back into your database with SQBrite!\n=====================================================\n\n.. image:: https://travis-ci.org/mattboyer/sqbrite.svg?branch=master\n :target: https://travis-ci.org/mattboyer/sqbrite\n :alt: Continuous Integration status\n\n.. image:: https://scrutinizer-ci.com/g/mattboyer/sqbrite/badges/quality-score.png?b=master\n :target: https://scrutinizer-ci.com/g/mattboyer/sqbrite/?branch=master\n :alt: Scrutinizer Code Quality\n\n.. image:: https://img.shields.io/pypi/v/sqbrite.svg\n :target: https://pypi.python.org/pypi/sqbrite/\n :alt: Latest Version\n\n.. image:: https://img.shields.io/pypi/format/sqbrite.svg\n :target: https://pypi.python.org/pypi/sqbrite/\n :alt: Download format\n\n.. image:: https://img.shields.io/pypi/pyversions/sqbrite.svg\n :target: https://pypi.python.org/pypi/sqbrite/\n :alt: Supported Python versions\n\nSQBrite is a data recovery/forensics tool for `SQLite `_ databases. It uses a Python 3 implementation of the `SQLite on-disk file format `_ to recover deleted table rows.\n\nSQBrite's name is inspired by `PL Daniels' `_ `undark `_, but is a completely separate implementation.\n\n.. image:: https://asciinema.org/a/118939.png\n :target: https://asciinema.org/a/118939\n :alt: SQBrite demo terminal recording\n\nInstalling SQBrite\n------------------\n\nSQBrite requires Python 3. To install, simply run:\n\n.. code-block:: bash\n\n $ pip3 install --user sqbrite\n $ sqbrite --help\n\nBackground\n----------\n\nSQLite uses a paginated data model in which each database is a collection of same-size *pages*. There are several kinds of pages, of which one type (B-Tree Table Leaf pages) contains the starting point for actual data belonging to individual table rows.\n\nWhen a row is deleted by means of a ``DELETE FROM table (...)`` statement, the space occupied by that row's data (a *record*) within the relevant B-Tree Table Leaf page is marked as free and may subsequently be used to store new records or update existing records. However, it is common to see freed space within a page (a *freeblock*, in SQLite parlance) left alone after rows are deleted. In that case, it ***may*** be possible to retrieve deleted row data from within the freeblock.\n\nHeuristics\n++++++++++\n\nThe SQLite file format doesn't keep track of where deleted records start and end within a leaf page's freeblocks. This means that SQBrite needs a mechanism to find out where record headers start. This is achieved through the use of byte-wise regular expressions specific to tables in known databases. These regular expressions and the offset that separates matches from the first byte in a well-formed header are stored in a user-editable YAML file.\n\nSQBrite aims to ship with heuristics for popular SQLite databases, so **do** send pull requests if you've got good results with your heuristics.\n\nFeatures\n--------\n\n- Export all records to CSV or reinject \"undeleted\" records into a copy of the database\n- Extensible heuristics - just add entries to ``~/.local/share/sqbrite/sqbrite.yaml``!\n- SQBrite can recover records from within active B-tree table leaf pages or from former table-leaf Freelist pages.\n- Heuristics for iOS and Firefox databases\n\nLimitations\n-----------\n\n- SQBrite works better when ``ptrmap`` pages are present\n- The ``undelete`` subcommand may fail when re-inserting deleted rows into a table causes a constraint violation\n- SQBrite cannot recover records deleted with the `SQLite secure_delete pragma `_ enabled\n- Recovering data from overflow pages that have become Freelist leaf pages is not currently supported\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mattboyer/sqbrite", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "sqbrite", "package_url": "https://pypi.org/project/sqbrite/", "platform": "", "project_url": "https://pypi.org/project/sqbrite/", "project_urls": { "Homepage": "https://github.com/mattboyer/sqbrite" }, "release_url": "https://pypi.org/project/sqbrite/0.16/", "requires_dist": null, "requires_python": "", "summary": "SQBrite is a data recovery tool for SQLite databases", "version": "0.16" }, "last_serial": 2867597, "releases": { "0.15": [ { "comment_text": "", "digests": { "md5": "a7fffd0f4bb593c698c020ac02197af7", "sha256": "8bd61d948fbcad8fc2d3469f6003ff8c982f62c60dee1d898cfa3f7fd18492e8" }, "downloads": -1, "filename": "sqbrite-0.15-py3-none-any.whl", "has_sig": false, "md5_digest": "a7fffd0f4bb593c698c020ac02197af7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 19434, "upload_time": "2017-05-03T22:58:25", "url": "https://files.pythonhosted.org/packages/84/e3/255ccca3b4889e22f4a5600ccdf065baf569cba21819bf481a098f379cab/sqbrite-0.15-py3-none-any.whl" } ], "0.16": [ { "comment_text": "", "digests": { "md5": "5605e8db1bb9877c28a3f663bd049bcb", "sha256": "6c83f512ddb14bcf7a118f27a715e145b728e56cd37a5dfad9a86089d2914fc4" }, "downloads": -1, "filename": "sqbrite-0.16-py3-none-any.whl", "has_sig": false, "md5_digest": "5605e8db1bb9877c28a3f663bd049bcb", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 29253, "upload_time": "2017-05-11T17:39:36", "url": "https://files.pythonhosted.org/packages/89/9b/7af1ceec40c46616538269c0d4eb654c892118a7db2e9011f3dd83efd34c/sqbrite-0.16-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5605e8db1bb9877c28a3f663bd049bcb", "sha256": "6c83f512ddb14bcf7a118f27a715e145b728e56cd37a5dfad9a86089d2914fc4" }, "downloads": -1, "filename": "sqbrite-0.16-py3-none-any.whl", "has_sig": false, "md5_digest": "5605e8db1bb9877c28a3f663bd049bcb", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 29253, "upload_time": "2017-05-11T17:39:36", "url": "https://files.pythonhosted.org/packages/89/9b/7af1ceec40c46616538269c0d4eb654c892118a7db2e9011f3dd83efd34c/sqbrite-0.16-py3-none-any.whl" } ] }