一、基本介绍
注意:说明:
注意:当前的账号权限管理功能仅适用于 Base 类数据库和集合(collection),而不涉及 AI 套件类数据库和集合视图(collectionView)。即对于 AI 类数据库和 CollectionView,仅支持使用 root 用户进行访问,并拥有完全读写权限,其他自定义用户均无法访问。
| 类别 | | 功能 | SDK |
| 用户(User) | | 指数据库系统的使用者,即需要访问和操作数据库中数据的人员或程序。root 用户:创建数据库实例时,默认创建的用户,具有最高权限的超级用户,无法被任何账号(包括其自身)删除或修改其权限。自定义用户:通过 API 接口,使用 root 权限创建的新用户,并分配特定资源操作权限,实现精细化访问控制。 | Python-User 管理Java-User 管理Go-User 管理Curl-User 管理 |
| 权限(Privilege) | 资源对象(Resource) | 指数据库中用户权限生效的数据实体,向量数据库可授权的资源对象包括三个层级: Global:对实例下的所有 DB 和 Collection 对象授权。 Database 层级:对具体某一个 Database 授权。 Collection 层级:对具体某一个特定的 Collection 单独授权。 | |
| | 操作权限(Action) | 定义用户对资源对象可执行的操作权限。目前可分配的操作规则如下(暂不支持授权接口级别的操作):dbAdmin:允许执行创建(create)、删除(drop)、清空(truncate)等数据定义语言(DDL)操作。read:仅限于执行查询(query)和搜索(search)等读取操作,禁止进行任何数据修改。readWrite:允许执行查询(query)、搜索(search)等读取操作,以及插入(upsert)、更新(update)等写入操作。 | |
二、创建用户
创建自定义用户,需指定用户名及其对应的密码,如下以 Python 为例,说明用户名与密码的配置规则。
| 参数名 | 参数含义 | 参数配置 |
| user | 自定义用户名 | 长度要求:1~32字符。字符类型要求:只能使用英文字母(大写 A~Z、小写 a~z)、数字(0~9)、下划线(_),并以英文字母开头。 |
| password | 设置密码 | 密码长度要求:8~128字符。密码设置支持如下类型的任意组合。字母:大写 A~Z、小写 a~z。数字:0~9。特殊符号包括:下划线(_)、加号(+)、减号(-)、逗号(,)、和号(&)、等号(=)、感叹号(!)、@符号(@)、井号(#)、美元符号($)、百分号(%)、脱字符(^)、星号(*)、圆括号(())、点号(.)。 |
PythonJavaGoimport tcvectordbfrom tcvectordb.model.enum import ReadConsistency#create a database client objectclient = tcvectordb.RPCVectorDBClient(url='http://10.0.X.X:80', username='root', key='eC4bLRy2va******************************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)# 创建用户res = client.create_user(user='app_user', password='********')print(res)import com.tencent.tcvectordb.client.VectorDBClient;import com.tencent.tcvectordb.model.param.database.ConnectParam;import com.tencent.tcvectordb.model.param.entity.BaseRes;import com.tencent.tcvectordb.model.param.enums.ReadConsistencyEnum;import com.tencent.tcvectordb.model.param.user.*;import com.tencent.tcvectordb.utils.JsonUtils;// client 为 VectorDBClient() 创建的客户端对象BaseRes res = client.createUser("app_user", "********");System.out.println("create user res: code:" + res.getCode() + ", msg: " + res.getMsg());import ( "context" "log" "github.com/tencent/vectordatabase-sdk-go/tcvectordb" "github.com/tencent/vectordatabase-sdk-go/tcvectordb/api/user")var ( ctx = context.Background() database = "db-test" database1 = "db-test1" collectionName = "book-vector")err := client.CreateUser(ctx, tcvectordb.CreateUserParams{User: "app_user", Password: "**********"})if err != nil { log.Printf("create user failed, err: %+v", err.Error())}
三、给用户授权
给用户授权时,需指定用户名及权限,可以给用户批量授予多组权限;每个权限中,需要指定资源对象和允许的操作。如下以 Python 接口的参数为例,说明配置权限的具体规则。
| 参数名 | 参数含义 | 子参数 | 参数配置 |
| user | 自定义用户名 | – | – |
| privileges | 对用户授予的权限列表,可以配置多条权限 | resource | 指定用户可操作的资源对象,分为如下三个层级。全局:对实例下的所有 DB 和 Collection 对象授权。配置方式:"resource": "*.*"。 DB 层级:对某个 DB 授权,包括该 DB 下的所有 Collection。配置方式: "resource": "db0.*",其中,db0 指授权的数据库名。 Collection 层级:对某个特定集合授权,配置方式:"resource": "db0.test_coll"其中,db0 指授权的数据库名,test_coll 为授权的集合名。说明:resource 只能指向已存在的资源;若指定的资源不存在,则触发错误提示信息。 |
| | | actions | 配置资源对象允许操作的权限。dbAdmin:允许执行创建(create)、删除(drop)、清空(truncate)等数据定义语言(DDL)操作。read:仅限于执行查询(query)和搜索(search)等读取操作,禁止进行任何数据修改。readWrite:允许执行查询(query)、搜索(search)等读取操作,以及插入(upsert)、更新(update)等写入操作。 |
PythonJavaGores = client.grant_to_user( user='app_user', privileges=[ { "resource": "db0.*", "actions": ["read"] }, { "resource": "db1.book-vector", "actions": ["readWrite"] }])print(res)// client 为 VectorDBClient() 创建的客户端对象BaseRes res = client.grantToUser(UserGrantParam.newBuilder() .withUser("app_user") .withPrivileges(Arrays.asList( PrivilegeParam.newBuilder().withResource("db-test.*").withActions(Arrays.asList("read")).build(), PrivilegeParam.newBuilder().withResource("db-test1.*").withActions(Arrays.asList("dbAdmin")).build(), PrivilegeParam.newBuilder().withResource("db-test.book-vector").withActions(Arrays.asList("readWrite")).build()) ).build());System.out.println("grant user permission res: code:" + res.getCode() + ", msg: " + res.getMsg());err := client.GrantToUser(ctx, tcvectordb.GrantToUserParams{ User: "app_user", Privileges: []*user.Privilege{ { Resource: database + ".*", Actions: []string{"read"}, }, { Resource: database + "." + collectionName, Actions: []string{"readWrite"}, }, { Resource: database1 + ".*", Actions: []string{"dbAdmin"}, }, }})if err != nil { log.Printf("grant to user failed, err: %+v", err.Error())}
四、查询用户权限
PythonJavaGores = client.describe_user(user='app_user')print(res)// client 为 VectorDBClient() 创建的客户端对象UserDescribeRes userDescribeRes = client.describeUser("app_user");System.out.println("describe user res: " + userDescribeRes.toString());result, err := client.DescribeUser(ctx, tcvectordb.DescribeUserParams{User: "app_user"})if err != nil { panic(err)}log.Printf("DescribeUser Result: %+v", result)
五、回收用户权限
回收用户权限,需明确指出回收权限的具体用户,列出需要回收的具体权限。
注意:说明:
PythonJavaGores = client.revoke_from_user( user='app_user', privileges={ "resource": "db0.*", "actions": ["read"] })print(res)BaseRes res = client.revokeFromUser(UserRevokeParam.newBuilder() .withUser("app_user") .withPrivilege( PrivilegeParam.newBuilder().withResource("db-test.*").withActions(Arrays.asList("read")).build() ).build());System.out.println("revoke user permission res: code:" + res.getCode() + ", msg: " + res.getMsg());err := client.RevokeFromUser(ctx, tcvectordb.RevokeFromUserParams{User: "app_user", Privileges: []*user.Privilege{ { Resource: database + ".*", Actions: []string{"read"}, }, }})if err != nil { log.Printf("create user failed, err: %+v", err.Error())}
六、修改用户密码
PythonJavaGores = client.change_password(user='app_user', password='########')print(res)// client 为 VectorDBClient() 创建的客户端对象BaseRes res = client.changePassword("app_user", "##########");System.out.println("change user password res: " + res.getCode() + " " + res.getMsg());err := client.ChangePassword(ctx, tcvectordb.ChangePasswordParams{ User: "app_user", Password: "########",})if err != nil { log.Printf("change user password err: %+v", err.Error())}
七、API 资源层级与操作权限
向量数据库提供的操作规则(read、readWrite 等)和 API 接口的对应关系,如下表所示。
| API 接口 | dbAdmin | read | readWrite |
| /database/create | ✅ | – | – |
| /database/drop | ✅ | – | – |
| /database/list | ✅ | ✅ | ✅ |
| /collection/create | ✅ | – | – |
| /collection/drop | ✅ | – | – |
| /collection/truncate | ✅ | – | – |
| /collection/list | ✅ | ✅ | ✅ |
| /collection/describe | ✅ | ✅ | ✅ |
| /index/rebuild | – | – | ✅ |
| /index/modifyVectorIndex | – | – | ✅ |
| /index/add | – | – | ✅ |
| /index/drop | – | – | ✅ |
| /alias/set | – | – | ✅ |
| /alias/delete | – | – | ✅ |
| /document/query | – | ✅ | ✅ |
| /document/search | – | ✅ | ✅ |
| /document/hybridSearch | – | ✅ | ✅ |
| /document/keywordSearch | – | ✅ | ✅ |
| /document/update | – | – | ✅ |
| /document/delete | – | – | ✅ |
| /document/upsert | – | – | ✅ |
| /document/count | – | ✅ | ✅ |