如何在不允许访问整个auth数据库的情况下显示zumero用户信息?

时间:2013-05-07 19:34:23

标签: sqlite zumero

我正在构建一个包含sqlitezumero的移动应用。

我注册了托管服务器,并阅读了有关auth数据库和ACL的zumero文档。据我所知,有一个auth数据库,其中包含用户和加密密码,默认情况下,服务器配置为禁止将该数据库同步到本地设备。

我想在我的应用中显示用户列表。似乎我可以更改ACL,以便auth数据库可以下拉到设备,但这似乎是一个坏主意。在不影响安全性的情况下,将用户数据下载到设备的建议方法是什么?

1 个答案:

答案 0 :(得分:2)

首先,让我们指出,如果您愿意,可以启用auth db的同步。

Zumero内部auth db中的密码使用bcrypt加密。如果你将auth db下载到移动设备,你确实会带来安全风险,因为现在有人可以解决问题,获取加密密码,然后尝试解密它们。但额外的风险并不大。密码仍然是加密的。

要启用内部auth dbfile,您需要做两件事:

  1. 创建它时(使用zumero_internal_auth_create),必须指定函数的最后两个参数来描述允许添加ACL条目的人员。例如,要允许zumero_users_admin的成员更改auth db上的ACL条目,请执行以下操作:

    SELECT zumero_internal_auth_create(
    server_url,
    dbfile,
    credentials_scheme,
    credentials_username,
    credentials_password,
    first_username,
    first_password,
    allow_add_scheme,
    allow_add_who,
    zumero_internal_auth_scheme('zumero_users_admin'),
    zumero_named_constant('acl_who_any_authenticated_user')
    );
    
  2. 使用zumero_internal_auth_set_acl_entry添加拉取能力:

    SELECT zumero_internal_auth_set_acl_entry(
    server_url,
    dbfile,
    credentials_scheme,
    credentials_user,
    credentials_password,
    scheme,
    who,
    tbl,
    zumero_named_constant('acl_op_pull'),
    zumero_named_constant('acl_result_allow'),
    );
    
  3. 请注意,您可以限制WHO被允许拉动。另请注意,授予提取auth db的能力不会授予任何以其他方式修改它的能力。

    好的,回到问题:

    另一种选择是拥有两个内部auth dbs,一个带有密码,另一个除了另一个之外只有别名。现在,您可以在具有别名的一个上启用同步,从而允许您的移动应用程序拥有一个用户列表,而无需访问密码。

    破解bcrypt字符串很难,但如果你没有字符串就更难了。 : - )

    要以这种方式进行设置,您需要使用zumero_internal_auth_create()来创建两个auth dbs。每次添加用户时,都需要添加两次。使用zumero_internal_auth_add_user()进入密码db后,使用zumero_internal_auth_add_alias()进入别名db一次。

        SELECT zumero_internal_auth_create(
        server_url,
        'passwords',
        credentials_scheme,
        credentials_username,
        credentials_password,
        first_username,
        first_password,
        zumero_internal_auth_scheme('zumero_users_admin'),
        zumero_named_constant('acl_who_any_authenticated_user'),
        zumero_internal_auth_scheme('zumero_users_admin'),
        zumero_named_constant('acl_who_any_authenticated_user')
        );
    
        SELECT zumero_internal_auth_create(
        server_url,
        'aliases',
        credentials_scheme,
        credentials_username,
        credentials_password,
        first_username,
        first_password,
        zumero_internal_auth_scheme('zumero_users_admin'),
        zumero_named_constant('acl_who_any_authenticated_user'),
        zumero_internal_auth_scheme('zumero_users_admin'),
        zumero_named_constant('acl_who_any_authenticated_user')
        );
    
        SELECT zumero_internal_auth_set_acl_entry(
        server_url,
        'aliases',
        credentials_scheme,
        credentials_user,
        credentials_password,
        scheme,
        who,
        tbl,
        zumero_named_constant('acl_op_pull'),
        zumero_named_constant('acl_result_allow'),
        );
    
        SELECT zumero_internal_auth_add_user(
        server_url,
        'passwords',
        credentials_scheme,
        credentials_username,
        credentials_password,
        'gandalf',
        'thegrey'
        );
    
        SELECT zumero_internal_auth_add_alias(
        server_url,
        'aliases',
        credentials_scheme,
        credentials_username,
        credentials_password,
        'gandalf',
        'passwords',
        'gandalf'
        );