[ 
https://issues.apache.org/jira/browse/COUCHDB-1287?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13585238#comment-13585238
 ] 

Kevin Gaudin commented on COUCHDB-1287:
---------------------------------------

Hi,

I would really love this feature to be available too.
My main concern is that the current documentation let me think that this was 
already possible:

{quote}
If both the names and roles fields of either the admins or members properties 
are empty arrays, it means the database has no admins or members. Having no 
admins, only server admins (with the reserved _admin role) are able to update 
design document and make other admin level changes. Having no members, any user 
can write regular documents (any non-design document) and read documents from 
the database.

Note: If there are any member names or roles defined for a database, then only 
authenticated users having a matching name or role are allowed to read 
documents from the database (or do a GET /db_name/ call).
{quote}
[From the 
Wiki|http://wiki.apache.org/couchdb/Security_Features_Overview#Authorization]

The first paragraph states that 'Having no members, any user can WRITE [...] 
and READ', then the note explains that with members set 'only authenticated 
users [...] are allowed to READ'. What about WRITE?

I am a newcomer in the CouchDB community and as a fresh CouchApp developer 
([Acralyzer|http://github.com/ACRA/acralyzer]), the security model of CouchDB 
is what has been puzzling me the most (and I knew nothing about document based 
databases and MapReduce).

If this "write-only" mode ever comes integrated in CouchDB, please make it 
something simple to understand:
  * A "dropbox" flag that would instantly prevent members to read from a DB is 
not simple to understand.
  * If I'm not allowed to read some data, I'm supposed to get a 401 error and 
not an empty or null 200 OK.

I really liked in this thread [~jhs]'s idea of a _security.readers and 
_security.writers roles definition. The idea of an execute-only database is 
interesting too to allow some users to access only to the higher levels of the 
database and not its internals.

I'm loving CouchDB so far but its fuzzy access policy sometimes makes me regret 
this choice for Acralyzer. Reading today that you were so close to an agreement 
a year ago is both encouraging (it might come someday!) and disappointing (none 
of both proposed implementations got merged after 1 year).

Come on guys, I'm sure you can find a great solution! ;-)


                
> Inbox Database ("write-only" mode)
> ----------------------------------
>
>                 Key: COUCHDB-1287
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1287
>             Project: CouchDB
>          Issue Type: New Feature
>          Components: HTTP Interface
>    Affects Versions: 1.2
>            Reporter: Jason Smith
>            Priority: Minor
>         Attachments: 
> 0001-fake-db-infos-when-dropbox-true-and-the-user-isn-t-a.patch, 
> 0001-handle-dropbox-db.-Add-dropbox-true-to-security-obje.patch, 
> 0001-handle-dropbox-db.-Add-dropbox-true-to-security-obje.patch, 
> A_0001-Refactor-reader_acl-test-functions-into-a-loop.patch, 
> A_0002-Refactor-the-actual-read-check-out-of-the-member-che.patch, 
> A_0003-Allow-non-member-writes-if-_security.members.allow_a.patch, 
> B_0001-Refactor-reader_acl-test-functions-into-a-loop.patch, 
> B_0002-Refactor-the-actual-read-check-out-of-the-member-che.patch, 
> B_0003-Allow-non-member-updates-if-_security.members.allow_.patch
>
>
> Currently, we can only grant combined read+write access in the _security 
> object "members" section. A user can either do both or neither. This prevents 
> a very common requirement for couch apps: sending private information from 
> less-privileged users to more-privileged users.
> There is no (reasonable) way to make an "inbox" where anybody may create a 
> doc for me, but only I may read it. An inbox database allows user-to-user, or 
> user-to-admin private messages. (Not only chat messages, but asynchronous 
> notifications--with a per-user inbox, perhaps even service requests and 
> responses.)
> There is no reason _security.members (formerly .readers) should control write 
> access. validate_doc_update() functions do this better.
> I propose a boolean flag, _security.members.allow_anonymous_writes. If it is 
> true, then CouchDB will allow document updates from non-members, giving 
> validate_doc_update() the final word on accepting or rejecting the update.
> Requirements:
> 1. Everything about _security stays the same (backward-compatible)
> 2. If members.allow_anonymous_writes === true, then most PUT and POSTs may 
> proceed
> 3. All updates are still subject to approval by all validate_doc_update 
> functions, same as before.
> These are the known changes to the security model. I consider these all to be 
> either very unlikely in practice, or worth the trade-off.
> * If you write to an inbox DB, you know, for a time, a subset of its 
> documents (but that's the point)
> * An _update function could reveal a document to the user, with or without 
> changing it. However, an admin must install such a misguided update function.
> * You can launch timing attacks to learn information about validate_doc_update
>   * You might discover whether doc IDs exist in the DB or not
>   * You might discover a well-known open source validation function. You can 
> look for bugs in its source code.
> * Zero or more things which Jason can't think of

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to