更新时间:2025-10-17 GMT+08:00
分享

GeminiDB兼容DynamoDB接口鉴权

在企业级应用中,不同部门或用户角色对数据的访问需求各不相同,如果不对GeminiDB兼容DynamoDB接口的访问权限进行管理,可能会导致数据泄露或被误操作。GeminiDB兼容DynamoDB接口鉴权适用于需要限制不同角色对数据的操作范围的场景。使用者可以通过创建多个GeminiDB兼容DynamoDB接口用户并赋予不同的权限,对GeminiDB兼容DynamoDB接口实例的查询、写入等行为进行表级别的细粒度控制,从而提高数据的安全性以及保护敏感数据。通过合理设置权限,GeminiDB兼容DynamoDB接口可以在多租户或企业环境中实现数据的隔离和访问管理。

GeminiDB兼容DynamoDB接口支持的权限

鉴权功能支持通过GeminiDB兼容DynamoDB接口的API来控制表级别的部分权限(不支持更细粒度的权限控制,例如行或列级别),如支持的权限及其范围所示。

表1 支持的权限及其范围

权限类型

权限范围

语义

CREATE

ALL KEYSPACES

创建任意名称的表

ALTER

TABLE

修改特定名称的表的配置

DROP

TABLE

删除特定名称的表

SELECT

TABLE

查询特定名称的表数据

MODIFY

TABLE

写入特定名称的表数据

使用cql语句设置用户权限

  • 创建新用户
    -- 创建普通用户
    CREATE USER <username> WITH PASSWORD 'your_password' NOSUPERUSER;
    • 新创建的用户未授权前没有任何权限。
    • 新用户密码必须为8~32位,必须是大写字母、小写字母、数字、特殊字符中至少两种的组合,其中可输入~!@#%^*-_=+?特殊字符。更多信息,请参见重置管理员密码
  • 为用户添加权限
    -- 赋予用户创建表权限:
    GRANT CREATE ON ALL KEYSPACES TO <username>;
    -- 赋予用户表级别查询权限:
    GRANT SELECT ON TABLE <table_name>.<table_name> TO <username>;
    -- 赋予用户表级别插入/更新/删除权限:
    GRANT MODIFY ON TABLE <table_name>.<table_name> TO <username>;
  • 查看用户权限
    LIST ALL PERMISSIONS OF <username>;
  • 移除用户权限
    -- 撤销用户对某个表的 SELECT 权限
    REVOKE SELECT ON TABLE <table_name>.<table_name> FROM <username>;
    -- 撤销用户对某个 keyspace 的所有权限
    REVOKE ALL PERMISSIONS ON KEYSPACE <table_name> FROM <username>;
  • 删除用户
    DROP USER <username>;
    • 创建实例时预置的用户rwuser,拥有创建所有表的权限。
    • 创建表的用户,默认拥有该表全部权限。
    • 推荐使用rwuser执行DynamoDB表和用户创建操作,再为新创建的用户赋予不同权限,以实现权限控制。

GeminiDB兼容DynamoDB接口对应的用户权限

表2 接口的用户权限

GeminiDB兼容DynamoDB接口名称

用户权限

BatchGetItem

表级别SELECT

BatchWriteItem

表级别MODIFY

CreateTable

ALL KEYSPACES CREATE

DeleteItem

表级别MODIFY

DeleteTable

表级别DROP

DescribeStream

无需任何权限

DescribeTimeToLive

无需任何权限

DescribeTable

无需任何权限

GetItem

表级别SELECT

GetRecords

表级别SELECT

GetShardIterator

无需任何权限

ListStreams

无需任何权限

ListTables

无需任何权限

PutItem

表级别MODIFY

Query

表级别SELECT

Scan

表级别SELECT

UpdateItem

表级别MODIFY

UpdateTable

表级别ALTER

UpdateTimeToLive

表级别ALTER

鉴权失败报错信息

{
    "__type": "AccessDeniedException",
    "message": "User <user_name> has no <permission_name> permission on <data_resource> or any of its parents"
}

相关文档