[Zope-DB] Per-user connections
Yves Bastide
Yves.Bastide@irisa.fr
Fri, 06 Dec 2002 10:54:35 +0100
Dieter Maurer wrote:
> Yves Bastide writes:
> > For reasons best left in the dark, I'd like to have per-user database
> > connections. Since this is in an application where (most of) the SQL is
> > already done in a module, I see two ways of doing:
> >
> > * create a Connection object, stored in the Sessin, when the user is
> > authentified; to use ZSQL methods, subclass the DA to take the
> > Connection parameter in __call__
> This is very difficult, at least with the ZODB based sessions
> of the Zope core.
>
> Synchronization is also difficult with pure RAM based sessions,
> such as ZSession.
Can you elaborate? Problems with storing objects in the session object,
with lifetime?
>
> > * don't count on using ZSQL methods; use a class derived from the one I
> > use outside of Zope, and from Shared.DC.ZRDB.TM's TM to know when to
> > commit/rollback.
> Why?
Er, why what? :)
My application uses biopython's BioSQL to access the database, so all
the requests are (will) be written there. Now, there's only the matter
of binding the connection to an user.
>
> > Can people familiar with Zope's machinery comment on these approaches
> > (or give me a better one)?
> Do not like any of them.
>
> My favorite approach would be to switch users for each request.
>
> This requires the database to support user switches for a given
> connection.
>
> As I read in the SQLRelay documentation, Oracle does support it
> and SQLRelay supports this feature for Oracle.
Yes, with proxy roles. Hmm, may work (must see for triggers and such),
but I need a solution useable for postgresql too
>
> With this possibility, you can use the following approach:
>
> create a DA variant that switches users in its "register"
> method
>
> Use an instance of this DA whenever you need
> user specific database operations.
>
> You can use all your Z SQL Methods (once pointed
> to the required variant for the DA)
OK, understood. Now the generalisation would be a DA with a pool of
connections keyed by the user id
>
>
> Dieter
>
yves