Thanks for that detail.  I don’t yet grasp what the complexity is – I suspect 
it doesn’t apply to my geoserver use-case but maybe you could illuminate that 
for me?

I’m using global workspaces (but could consider changing that).  However an end 
user will always be referencing only one workspace in a request.  By parsing 
the request parameters the workspace can be known up front before any database 
access.

So if I have a bunch of workspaces setup that all use the same datastore, my 
assumption is that when a database connection is acquired from the datastore, 
the relevant workspace can be known at that time, enabling the code to tell the 
database connection to impersonate the user associated with the workspace.

The datastore can connect to the database under the ‘midtier/admin’ user 
account.  Then, as long as geoserver does not attempt to access a feature in 
the workspace before pointing the connection to the impersonated user for that 
workspace, the problem is solved.

If the workspace is known from the request parameters and a request never 
references more than one workspace does that simplify my problem?

Thank You - Walter

From: andrea.a...@gmail.com [mailto:andrea.a...@gmail.com] On Behalf Of Andrea 
Aime
Sent: Thursday, June 16, 2016 3:51 AM
To: Walter Stovall <walter.stov...@byers.com>
Cc: geoserver-devel@lists.sourceforge.net
Subject: Re: [Geoserver-devel] FW: Managing Oracle connections to different 
schemas of the same database instance can't be done with the current geoserver

On Wed, Jun 15, 2016 at 6:57 PM, Walter Stovall 
<walter.stov...@byers.com<mailto:walter.stov...@byers.com>> wrote:
Oh, that’s nice – thanks.

There’s hopefully just one last part of this problem I need to address (thank 
you for all your help).

As mentioned my authenticated-user (the GSUser) is not in fact the name of the 
user I want to impersonate.  I need to figure out how to get the name of the 
impersonated user into the environment.

The impersonated user is based on the geoserver workspace and remains constant 
for the life of the workspace.  My dream solution would be that I could store 
the name of the impersonated user into the workspace itself and somehow 
leverage code that gets the name/value into the environment when a request is 
dispatched.  Poking around, I see that the WorkspaceInfoImpl has 
set/getMetadataMap().  If I could put my own name/value pair for the 
impersonated user into the MetadataMap for the workspace and then the 
MetadataMap were found to be part of the environment that would be the magic 
answer.

Of course maybe it’s not that easy but does this trigger any suggestion you 
might have?  I know the impersonated user name when I create the workspace.  I 
just don’t know how to get that into the environment when a request against the 
workspace is dispatched.

Do I need a dispatcher callback?  If so can I make the callback installed by my 
service code run before other services like WMS/WFS attempt accessing features 
so this is all setup right?


Hmm... this is getting complicated enough that I believe you are going to need 
some custom code regardless, in one or more points.
If you are using workspace specific services, you can get the current workspace 
from the LocalWorkspace class, that is holding to a thread local. If you are 
using global services instead I don't see an easy way out, as a request might 
contain data from multiple workspaces.

A few ideas come to mind (mind, I cannot guarantee any of them is good):
1) Create a subclass of the OracleNGDataStoreFactory, register it in SPI (check 
META-INF/services), and when createDataStoreInternal is called, attach a 
connection listener that looks for LocalWorkspace and your custom map. This 
code will reside in GeoServer
2) Create a FeatureTypeInitializer and register it in the GeoServer app 
context, while it's meant to initialize a particular feature type, it has 
access to the store too, and attach the listener there. Of course you'll have 
to care about not attaching the same listener multiple times
3) Modify the code a bit deeper and create a new DataAccessInitializer 
interface that would allow custom setup of stores, to be plugged in 
ResourcePool like FeatureTypeInitializer is, and do the same as above
4) Add store init parameters like we discussed before, but make them OGC 
Expression objects, or Strings that are supposed to be parsed as ECQL, and then 
roll your own custom filter functions to extract the values you need from the 
surrounding environment (e.g., LocalWorkspace)

I'd go for 3, but it's just me.

Cheers
Andrea

--
==
GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.
==

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054  Massarosa (LU)
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39  339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i 
file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo 
è consentito esclusivamente al destinatario del messaggio, per le finalità 
indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne 
il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di 
procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro 
sistema. Conservare il messaggio stesso, divulgarlo anche in parte, 
distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, 
costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003.



The information in this message and/or attachments, is intended solely for the 
attention and use of the named addressee(s) and may be confidential or 
proprietary in nature or covered by the provisions of privacy act (Legislative 
Decree June, 30 2003, no.196 - Italy's New Data Protection Code).Any use not in 
accord with its purpose, any disclosure, reproduction, copying, distribution, 
or either dissemination, either whole or partial, is strictly forbidden except 
previous formal approval of the named addressee(s). If you are not the intended 
recipient, please contact immediately the sender by telephone, fax or e-mail 
and delete the information in this message that has been received in error. The 
sender does not give any warranty or accept liability as the content, accuracy 
or completeness of sent messages and accepts no responsibility  for changes 
made after they were sent or for other risks which arise as a result of e-mail 
transmission, viruses, etc.

-------------------------------------------------------
------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports. http://pubads.g.doubleclick.net/gampad/clk?id=1444514421&iu=/41014381
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to