文档中心

运维管理

访问控制

访问控制参数为 --privilegecheck,该参数为重启生效,默认不开启。 更改配置项参数的方法请参考参数配置

访问控制是指对用户访问数据库的权限进行控制。SequoiaDB 通过角色的方式来实现访问控制,用户通过角色来获取权限。 即使不开启访问控制,也可以对用户和角色进行管理,访问控制配置项仅决定是否在执行命令时检查用户的权限。

访问控制示例

假设有超级用户su与用户myuser,此时协调节点--privilegecheck未开启,用户myuser未被授予任何角色。 已有集合foo.bar,使用myuser连接,执行find命令,可以查询到集合foo.bar中的数据。

> myuser = Sdb( <hostname>, <port>, "myuser", <pwd>)
> myuser.foo.bar.find()
{
  "_id": {
    "$oid": "64bf968f1d51c64185b134dd"
  },
  "a": 1
}
{
  "_id": {
    "$oid": "64c07d981d51c64185b134de"
  },
  "a": 2
}

开启配置项 --privilegecheck,重启节点,此时用户myuser未被授予任何角色,执行find命令将抛出错误SDB_NO_PRIVILEGES

> myuser.foo.bar.find()
sdb.js:692 uncaught exception: -393
No privileges for the operation:
No privilege for actions [find] on collection foo.bar

使用超级用户su连接,为用户myuser授予内建角色_foo.read,此时用户myuser可以执行find命令。

> su = Sdb( <hostname>, <port>, "su", <pwd>)
> su.grantRolesToUser("myuser", ["_foo.read"])
> myuser.foo.bar.find()
{
  "_id": {
    "$oid": "64bf968f1d51c64185b134dd"
  },
  "a": 1
}
{
  "_id": {
    "$oid": "64c07d981d51c64185b134de"
  },
  "a": 2
}

为用户myuser撤销内建角色_foo.read,用户myuser执行find命令将抛出错误SDB_NO_PRIVILEGES

> su.revokeRolesFromUser("myuser", ["_foo.read"]);
> myuser.foo.bar.find()
sdb.js:692 uncaught exception: -393
No privileges for the operation:
No privilege for actions [find] on collection foo.bar
回到顶部