向量数据库 账号与权限管理

向量数据库通过创建自定义用户,并对用户授权资源对象操作权限,实现细粒度的访问控制与管理。用户(User)、资源对象(Resource)和操作(Action)权限构成了访问控制的基础框架,确保数据的安全性和合理使用。

相关产品
向量数据库 产品页,含版本规格、价格与购买入口。

一、基本介绍

注意:说明:

注意:当前的账号权限管理功能仅适用于 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 – ✅ ✅
赞 (0)
上一篇 4天前
下一篇 4天前