Thank you all for the feedback. + I am naming this feature User Delegation (since Client Impersonation can be confused with User Impersonation). + I updated the design document <https://docs.google.com/document/d/1g0KgugVdRbbIxxZrSCtO1PEHlvwczTLDb38k-npvwjA>. + I opened a pull request (#400 <https://github.com/apache/drill/pull/400>).
- Sudheesh > On Feb 23, 2016, at 12:04 PM, Neeraja Rentachintala > <nrentachint...@maprtech.com> wrote: > > Norris > Quick comment on your point below. The username/password passed currently > on the connection string is for authentication purposes and also used for > impersonation in case of direct connection from BI tool to Drillbit. That > continue to exist, but now the driver needs to be extended to pass an > *'additional'* user name as part of connection and this represents the end > user identity on behalf of which Drill will execute queries (there is an > intermediate hop via the BI server which we are trying to support). > Sudheesh doc has specifics on the proposal. > > With regards to interfacing the impersonation feature, it looks like all > you need is the username, which is already being pass down from the > application to the client via the driver. > > On Tue, Feb 23, 2016 at 11:52 AM, Norris Lee <norr...@simba.com> wrote: > >> ODBC does not have any standard way to change the user for a connection, >> so like Sudheesh mentioned, I'm not sure how this would be exposed to the >> application. I believe some other databases like SQLServer let you change >> the user via SQL. >> >> With regards to interfacing the impersonation feature, it looks like all >> you need is the username, which is already being pass down from the >> application to the client via the driver. >> >> Norris >> >> -----Original Message----- >> From: Sudheesh Katkam [mailto:skat...@maprtech.com] >> Sent: Tuesday, February 23, 2016 8:49 AM >> To: u...@drill.apache.org >> Cc: dev <dev@drill.apache.org> >> Subject: Re: [DISCUSS] New Feature: Drill Client Impersonation >> >>> Do you have an interface proposal? I didn't see that. >> >> Are you referring to the Drill client interface to used by applications? >> >>> Also, what do you think about my comment and Keys response about moving >> pooling to the Driver and then making "connection" lightweight. >> >> An API to change the user on a connection can be easily added later (for >> now, we use a connection property). Since Drill connections are already >> lightweight, this is not an immediate problem. Unlike OracleConnection < >> https://docs.oracle.com/cd/B28359_01/java.111/b31224/proxya.htm#BABEJEIA>, >> JDBC/ ODBC do not have a provision for proxy sessions in their >> specification, so I am not entirely clear how we would expose “change user >> on connection” to applications using these API. >> >>> Connection level identity setting is only viable if the scalability >> concerns I raised in the doc and Jacques indirectly raised are addressed. >>> >>> Historically DB connections have been so expensive that most >> applications created pools of connections and reused them across users. >> That model doesn't work if each connection is tied to a single user. That's >> why the typical implementation has provided for changing the identity on an >> existing connection. >>> >>> Now, if the Drill connection is a very lightweight object (possibly >> mapping to a single heavier weight hidden process level object), then tying >> identity to the connection is fine. I don't know enough about the Drill >> architecture to comment on that but I think a good rule of thumb would be >> "is it reasonable to keep 50+ Drill connections open where each has a >> different user identity?" If the answer is no, then the design needs to >> consider the scale. I'll also add that much further in the future if/when >> Drill takes on more operational types of access that 50 connections will >> rise to a much larger number. >> >> >> Thank you, >> Sudheesh >> >>> On Feb 22, 2016, at 2:27 PM, Jacques Nadeau <jacq...@dremio.com> wrote: >>> >>> Got it, makes sense. >>> >>> Do you have an interface proposal? I didn't see that. >>> >>> Also, what do you think about my comment and Keys response about >>> moving pooling to the Driver and then making "connection" lightweight. >>> >>> -- >>> Jacques Nadeau >>> CTO and Co-Founder, Dremio >>> >>> On Mon, Feb 22, 2016 at 9:59 AM, Sudheesh Katkam >>> <skat...@maprtech.com> >>> wrote: >>> >>>> “… when creating this connection, as part of the connection >>>> properties (JDBC, C++ Client), the application passes the end user’s >> identity (e.g. >>>> username) …” >>>> >>>> I had written the change user as a session option as part of the >>>> enhancement only, where you’ve pointed out a better way. I addressed >>>> your comments on the doc. >>>> >>>> Thank you, >>>> Sudheesh >>>> >>>>> On Feb 22, 2016, at 9:49 AM, Jacques Nadeau <jacq...@dremio.com> >> wrote: >>>>> >>>>> Maybe I misunderstood the design document. >>>>> >>>>> I thought this was how the user would be changed: "Provide a way to >>>> change >>>>> the user after the connection is made (details) through a session >> option" >>>>> >>>>> Did I miss something? >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Jacques Nadeau >>>>> CTO and Co-Founder, Dremio >>>>> >>>>> On Mon, Feb 22, 2016 at 9:06 AM, Neeraja Rentachintala < >>>>> nrentachint...@maprtech.com> wrote: >>>>> >>>>>> Jacques, >>>>>> I think the current proposal by Sudheesh is an API level change to >>>>>> pass this additional end user id during the connection establishment. >>>>>> Can you elaborate what you mean by random query. >>>>>> >>>>>> -Neeraja >>>>>> >>>>>> On Sun, Feb 21, 2016 at 5:07 PM, Jacques Nadeau >>>>>> <jacq...@dremio.com> >>>>>> wrote: >>>>>> >>>>>>> Sudheesh, thanks for putting this together. Reviewing Oracle >>>>>> documentation, >>>>>>> they expose this at the API level rather than through a random >>>>>>> query. I think we should probably model after that rather than >>>>>>> invent a new mechanism. This also means we can avoid things like >>>>>>> query parsing, execution roundtrip, query profiles, etc to provide >> this functionality. >>>>>>> >>>>>>> See here: >>>>>>> >>>>>>> >>>> https://docs.oracle.com/cd/B28359_01/java.111/b31224/proxya.htm#BABEJ >>>> EIA >>>>>>> >>>>>>> -- >>>>>>> Jacques Nadeau >>>>>>> CTO and Co-Founder, Dremio >>>>>>> >>>>>>> On Fri, Feb 19, 2016 at 2:18 PM, Keys Botzum >>>>>>> <kbot...@maprtech.com> >>>>>> wrote: >>>>>>> >>>>>>>> This is a great feature to add to Drill and I'm excited to see >>>>>>>> design >>>>>> on >>>>>>>> it starting. >>>>>>>> >>>>>>>> The ability for an intermediate server that is likely already >>>>>>>> authenticating end users, to send end user identity down to Drill >>>>>>>> adds >>>>>> a >>>>>>>> key element into an end to end secure design by enabling Drill >>>>>>>> and the >>>>>>> back >>>>>>>> end systems to see the real user and thus perform meaningful >>>>>>> authorization. >>>>>>>> >>>>>>>> Back when I was building many JEE applications I know the DBAs >>>>>>>> where >>>>>> very >>>>>>>> frustrated that the application servers blinded them to the >>>>>>>> identity >>>> of >>>>>>> the >>>>>>>> end user accessing important corporate data. When JEE application >>>>>> servers >>>>>>>> and databases finally added the ability to impersonate that >>>>>>>> addressed >>>> a >>>>>>> lot >>>>>>>> of security concerns. Of course this isn't a perfect solution and >>>>>>>> I'm >>>>>>> sure >>>>>>>> others will recognize that in some scenarios impersonation isn't >>>>>>>> the >>>>>> best >>>>>>>> approach, but having that as an option in Drill is very valuable. >>>>>>>> >>>>>>>> Keys >>>>>>>> _______________________________ >>>>>>>> Keys Botzum >>>>>>>> Senior Principal Technologist >>>>>>>> kbot...@maprtech.com <mailto:kbot...@maprtech.com> >>>>>>>> 443-718-0098 >>>>>>>> MapR Technologies >>>>>>>> http://www.mapr.com <http://www.mapr.com/> >>>>>>>>> On Feb 19, 2016, at 4:49 PM, Sudheesh Katkam >>>>>>>>> <skat...@maprtech.com> >>>>>>>> wrote: >>>>>>>>> >>>>>>>>> Hey y’all, >>>>>>>>> >>>>>>>>> I plan to work on DRILL-4281 < >>>>>>>> https://issues.apache.org/jira/browse/DRILL-4281>: support for >>>>>>>> inbound/client impersonation. Please review the design document < >>>>>>>> >>>>>>> >>>>>> >>>> https://docs.google.com/document/d/1g0KgugVdRbbIxxZrSCtO1PEHlvwczTLDb >>>> 38k-npvwjA >>>>>>>> , >>>>>>>> which is open for comments. There is also a link to >>>>>>>> proof-of-concept (slightly hacky). >>>>>>>>> >>>>>>>>> Thank you, >>>>>>>>> Sudheesh >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>> >>>> >> >>