We've been over this several times on riak-users, which suggests to me a blog post might help. I'll try to draft something.

On 09/30/2011 11:00 AM, Kyle Quest wrote:
This is a pretty common situation with the NoSQL databases. They have
no security and the standard answer is that it's your job to do with
firewalls and proxies. This is a good indication that the NoSQL world
is still in its infancy. Security features will get there eventually
and Accumulo is an example of progress in terms of security
capabilities, but it's going to take a while... a long while :-)

If you have a sensible, flexible, comprehensive proposal for access control in an eventually consistent distributed key-value store, I would love to hear about it. Thus far, every attempt I've encountered rapidly approaches the proverbial "blatant layering violation", or is a subset of {inconsistent, inadequate, overly specific, complex, slow}.

Accumulo (IIUC, docs are scarce) tags data with authorizations; restricting access is up to the client. You can do that in Riak. You can front Riak with a layer which allows puts/gets (globally, to buckets, to keys, at various times, etc.) on the basis of HTTP auth, sessions, IP, certificate, etc. You can also implement access control by writing valid state transitions on an object to a statebox and invalidating concurrent modifications that introduce policy conflicts. Authentication provided by cryptographic hashes on transitions, or by a layer above. You could introduce a lock service and use it to enforce certain classes of sequential access, simplifying consistency.

Hopefully this suggests why it's not as simple as "adding security to the database". There are a wide variety of security semantics, and many can be layered on top of Riak (or any other datastore) without changing the database itself.

Now in this case you can do something :-) One option is to use a web
proxy that would expose two different ports for GET and PUT requests
and then have the appropriate HTTP method filters for each of those
ports.

Writes require reads beforehand, but this will do the trick.

However, this doesn't really do much for security because these
GET and PUT requests will still be sent to the same Riak node.

...

A better solution is to have separate Riak nodes for reads and writes.

Riak forwards requests to the appropriate vnode for a key. Doing this would have no effect on operational semantics.

--Kyle

_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to