Not to take a step back but I thought Drizzle was not going to have any 
authentication. It sounds like there is talk about adding this back in using a 
more fine-grained method than something like PAM? Not that I disagree (for some 
reason, the idea of catalogs makes me excited though I don't know why :) but 
were permissions removed largely for performance reasons?

Just curious on the context is all :)

Tim S.


On Mar 19, 2010, at 2:23 PM, Eric Day wrote:

> Hi Roland!
> 
> Thanks for the detailed writeup and sections from the SQL
> standard. It's nice to know what it has in there for reference,
> one of these days I should probably find a copy. :)
> 
> On Fri, Mar 19, 2010 at 07:02:36PM +0100, Roland Bouman wrote:
>> Ok - fair enough. A catalog is a collection of schemas....now this:
>> 
>> "
>> 4.2.8.3 The Information Schema
>> Every catalog contains an SQL-schema with the name INFORMATION_SCHEMA
>> that includes the descriptors
>> of a number of schema objects, mostly view definitions, that together
>> allow every descriptor in that catalog to
>> be accessed, but not changed, as though it was SQL-data.
>> "
>> 
>> mm, one information_schema per catalog. I don't mind, but I guess this
>> means that once you commit to implementing catalogs, you have to go
>> all the way, and do this too...if you don't, generic clients will get
>> confused (use case: query or reporting tool that accesses drizzle via
>> a JDBC driver. Driver says the RDBMS supports catalogs, client uses
>> this information and then relies on an information_schema being
>> present....)
> 
> We are already doing this at the schema/table level with the
> authorization plugins. For example, If I am user X and only have access
> to schemas A and B, my view of I_S will only contain those schemas
> and associated tables. We simply need to extend the namespace for
> authorization plugins to include catalog as well. Our API is currently:
> 
>  virtual bool restrictSchema(const SecurityContext &user_ctx,
>                              const std::string &schema)= 0;
> 
>  virtual bool restrictTable(const SecurityContext &user_ctx,
>                             const std::string &schema,
>                             const std::string &table);
> 
> So we will probably simply add in:
> 
>  virtual bool restrictCatalog(const SecurityContext &user_ctx,
>                               const std::string &catalog)= 0;
> 
> And add 'catalog' arguments to the calls above.
> 
>> Now the puzzling thing is, I don't see anything in the standard that
>> says how a user/role knows about catalogs...they only mention schema
>> objects:
>> 
>> "
>> 4.6.12 Privileges
>> A privilege represents a grant, by some grantor, to a specified
>> grantee (which is either an authorization identifier,
>> a role, or PUBLIC), of the authority required to use, or to perform a
>> specified action on, a specified schema
>> object.
>> "
>> 
>> Now, what they say about schemas and owners is this:
>> 
>> "
>> 4.2.8.2 SQL-schemas
>> An SQL-schema, often referred to simply as a schema, is a persistent,
>> named collection of descriptors. Any object whose descriptor is in
>> some SQL-schema is known as an SQL-schema object. A schema, the schema
>> objects in it, and the SQL-data described by them are said to be owned
>> by the authorization identifier associated with the schema.
>> "
>> 
>> So, in short, if you want to adhere to the standard for this one, you
>> should associate ownership with schemas, not catalogs. How users
>> should be authorized for catalogs, is not clear.  Nor is it clear to
>> me what the benefit is of a catalog object, other than that it is just
>> another level. However, if you do implement catalogs, you should also
>> provide an information_schema implementation that is compatible with
>> the existence of catalogs.
> 
> We're probably not taking the traditional role approach in the
> standard. We're going to keep things a bit more simple as you can
> see in the API calls above. Authorization entities will be loosely
> coupled with catalogs/schemas/tables and will not be restricted by
> any boundaries on what they have the potential to access.
> 
>> Personally, having catalogs is not high on my list. Only RDBMS i have
>> worked with that has it, is SQL server and to me it is more a hassle
>> than it's worth (IMO).
> 
> Agreed for many cases, as Brian mentioned, this is mainly useful in
> multi-tenant environments where you want to give each account their
> own schema namespace, without having to resort to schema prefix hacks.
> 
>> I do think a schema owner is a useful concept. The standard seems to
>> imply schemas are always owned by an "authorization" which is to all
>> intents and purposes an account (AFAICS). Oracle also implements a per
>> schema owner and MS SQL agrees here too (as in, each schema has an
>> owner)
> 
> We'll have the potential for multiple 'owners' depending on their
> restriction level of operations/schemas. There won't be a designated
> 'user' owns 'schema', but just determined from what auth plugins allow.
> 
>> PS I am not saying drizzle should do what Oracle and MS do, but these
>> are shining examples of popular RDBMS-es and for developers it helps
>> if things like this work the same across the board.
> 
> Yeah, I think we're not worrying about traditional SQL roles/grants
> like Oracle/MS, mainly just an easy, pluggable, set of permissions
> for common tasks. Like we've said, many web shops have a single user
> (root) and handle all permissions in the application. We just want
> to extend that to a multi-tenant environment. At least this how I
> understand it, perhaps some of the other Drizzle developers will have
> a different take. :)
> 
> Thanks!
> -Eric
> 
>> On Fri, Mar 19, 2010 at 6:20 PM, Jay Pipes <[email protected]> wrote:
>>> Yep, fair enough.  Thanks for the excellent explanation!
>>> 
>>> -jay
>>> 
>>> On Fri, Mar 19, 2010 at 1:18 PM, Eric Day <[email protected]> wrote:
>>>> The argument I could see for not simply using a 'user' is that
>>>> there may be multiple users that want to map to the same catalog
>>>> namespace (essentially an account). So 'jay' and 'eric' have access
>>>> to the 'drizzle.org' catalog, but we may have a different set of
>>>> permissions. The 'account' entity needs to have some object with it,
>>>> and you most likely don't want to reference other user accounts for
>>>> this. For example:
>>>> 
>>>> catalog
>>>>  schema
>>>>    table
>>>> 
>>>> drizzle.org
>>>>  blog
>>>>    posts
>>>>    comments
>>>>    authors
>>>>  wiki
>>>>    pages
>>>>    accounts
>>>> 
>>>> gearman.org
>>>>  wiki
>>>>    pages
>>>>    accounts
>>>> 
>>>> Now users can map to any set of permissions for the catalog, schema,
>>>> table, or any combination of them. Now you can have multiple users
>>>> access drizzle.org catalog, or a single user access both drizzle.org
>>>> and gearman.org catalogs.
>>>> 
>>>> -Eric
>>>> 
>>>> On Fri, Mar 19, 2010 at 12:10:39PM -0400, Jay Pipes wrote:
>>>>> How would that be different from a user, then?
>>>>> 
>>>>> In other words, why not just split the innodb buffer pool by the user
>>>>> id (which, BTW, would require a major overhaul of InnoDB...)?
>>>>> 
>>>>> What I'm asking is what would be the benefits of one more level of
>>>>> taxonomy when the user ID already allows for such categorization?
>>>>> 
>>>>> Cheers!
>>>>> 
>>>>> jay
>>>>> 
>>>>> On Fri, Mar 19, 2010 at 12:05 PM, Brian Aker <[email protected]> wrote:
>>>>>> Think multi-tenancy. A user can create as many schemas as they like, and 
>>>>>> I
>>>>>> can split the innodb pool up per catalog.
>>>>>> 
>>>>>> Cheers,
>>>>>>   --Brian
>>>>>> 
>>>>>> On Mar 19, 2010, at 8:52 AM, Jay Pipes <[email protected]> wrote:
>>>>>> 
>>>>>>> NULL.
>>>>>>> 
>>>>>>> I actually don't think catalogs are all that useful, FWIW...
>>>>>>> 
>>>>>>> -jay
>>>>>>> 
>>>>>>> On Thu, Mar 18, 2010 at 9:47 PM, Roland Bouman <[email protected]>
>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Hi!
>>>>>>>> 
>>>>>>>> On Thu, Mar 18, 2010 at 11:25 PM, Brian Aker <[email protected]> wrote:
>>>>>>>>> 
>>>>>>>>> Do we want to just default the value to NULL?
>>>>>>>> 
>>>>>>>> SQL standard says it should be NULL in case there is no support for
>>>>>>>> catalogs.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Roland Bouman
>>>>>>>> http://rpbouman.blogspot.com/
>>>>>>>> 
>>>>>>>> Author of "Pentaho Solutions: Business Intelligence and Data
>>>>>>>> Warehousing with Pentaho and MySQL",
>>>>>>>> http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470484322.html
>>>>>>>> 
>>>>>>>> _______________________________________________
>>>>>>>> Mailing list: https://launchpad.net/~drizzle-discuss
>>>>>>>> Post to     : [email protected]
>>>>>>>> Unsubscribe : https://launchpad.net/~drizzle-discuss
>>>>>>>> More help   : https://help.launchpad.net/ListHelp
>>>>>>>> 
>>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Mailing list: https://launchpad.net/~drizzle-discuss
>>>>> Post to     : [email protected]
>>>>> Unsubscribe : https://launchpad.net/~drizzle-discuss
>>>>> More help   : https://help.launchpad.net/ListHelp
>>>> 
>>> 
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~drizzle-discuss
>>> Post to     : [email protected]
>>> Unsubscribe : https://launchpad.net/~drizzle-discuss
>>> More help   : https://help.launchpad.net/ListHelp
>>> 
>> 
>> 
>> 
>> -- 
>> Roland Bouman
>> http://rpbouman.blogspot.com/
>> 
>> Author of "Pentaho Solutions: Business Intelligence and Data
>> Warehousing with Pentaho and MySQL",
>> http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470484322.html
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~drizzle-discuss
> Post to     : [email protected]
> Unsubscribe : https://launchpad.net/~drizzle-discuss
> More help   : https://help.launchpad.net/ListHelp
> 


_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to