Do you have an instance with DB in question set up on a VM that you can experiment on?
What you’re going to do next is not something you want to try on your only copy.
- Start your instance.
- Run /bin/zopepy (zopepy is just python loaded with the same modules as your Plone instance).
Look at the examples on the following page about running Zope scripts from the CLI. Its a bit old but most of the examples work.
Some examples here on how to delete objects that behave poorly (you know permissions).
How to remove an object by ID
And finally an old, old post I finally found via google-fu from the PloneChix, their definitive guide to the POSkey error.
I also think Andreas or Dieter had a guide somewhere on broken objects too, which probably doesn’t relate anymore due to programming changes but maybe they can add to this if so inclined.