在充分考虑数据安全的情况下,用户身份验证和传输层安全(TLS)连接现在在Milvus 2.1中正式可用。没有用户身份验证,任何人都可以使用SDK访问矢量数据库中的所有数据。但是,从Milvus 2.1开始,只有具有有效用户名和密码的用户才能访问Milvus矢量数据库。此外,在Milvus 2.1中,TLS进一步保护了数据安全,确保了计算机网络中的安全通信。
本文旨在分析向量数据库Milvus如何通过用户身份验证和TLS连接确保数据安全,并解释作为希望在使用向量数据库时确保数据安全的用户,如何利用这两个功能。
什么是数据库安全,为什么它很重要?
数据库安全是指为确保数据库中的所有数据安全和保密而采取的措施。Twitter、万豪酒店和德克萨斯州保险部等最近发生的数据泄露和数据泄露事件使我们对数据安全问题更加警惕。所有这些案例不断提醒我们,如果数据得不到很好的保护,并且他们使用的数据库是安全的,公司和企业可能会遭受严重损失。
Milvus矢量数据库如何确保数据安全?
在当前版本的2.1中,Milvus vector数据库试图通过身份验证和加密来确保数据库安全。更具体地说,在访问级别上,Milvus支持基本用户身份验证,以控制谁可以访问数据库。同时,在数据库层面,Milvus采用传输层安全(TLS)加密协议来保护数据通信。
用户认证
为了数据安全起见,Milvus矢量数据库中的基本用户身份验证功能支持使用用户名和密码访问矢量数据库。这意味着客户端只能在提供经过身份验证的用户名和密码后访问Milvus实例。
Milvus矢量数据库中的身份验证工作流
所有gRPC请求由Milvus代理处理;因此,身份验证由代理完成。使用凭据登录以连接到Milvus实例的工作流程如下。
1.为每个Milvus实例创建凭据,加密密码存储在etcd中。Milvus使用bcrypt进行加密,因为它实现了Provos和Mazières的自适应哈希算法。
2.在客户端,SDK在连接到Milvus服务时发送密文。base64密文(<用户名>:<密码>)通过密钥授权附加到元数据。
3.Milvus代理拦截请求并验证凭据。
4.凭据在代理中本地缓存。

更新凭据时,Milvus矢量数据库中的系统工作流如下:
1.根coord负责调用插入、查询和删除API时的凭据。
2.例如,当您因为忘记密码而更新凭据时,新密码将保存在etcd中。则代理的本地缓存中的所有旧凭据都将无效。
3.身份验证拦截器首先从本地缓存中查找记录。如果缓存中的凭据不正确,将触发RPC调用以从根坐标获取最新记录。并且相应地更新本地高速缓存中的证书。

如何在Milvus矢量数据库中管理用户身份验证
要启用身份验证,您需要首先设置common.security。在Milvus中配置Milvus时,authorizationEnabled为true。yaml文件。
启用后,将为Milvus实例创建根用户。该根用户可以使用Milvus的初始密码连接到Milvus矢量数据库。
from pymilvus import connections
connections.connect(
alias='default',
host='localhost',
port='19530',
user='root_user',
password='Milvus',
)
我们强烈建议在首次启动Milvus vector数据库时更改根用户的密码。
则根用户可以通过运行以下命令来创建新用户,从而进一步创建更多新用户以进行身份验证访问。
from pymilvus import utility
utility.create_credential('user', 'password', using='default')
创建新用户时需要记住两件事:
1.对于新用户名,其长度不能超过32个字符,并且必须以字母开头。用户名中只允许使用下划线、字母或数字。例如,用户名“2abc!”不被接受。
2.对于密码,其长度应为6-256个字符。
设置新凭证后,新用户可以使用用户名和密码连接到Milvus实例。
from pymilvus import connections
connections.connect(
alias='default',
host='localhost',
port='19530',
user='user',
password='password',
)
与所有身份验证过程一样,您不必担心忘记密码。可以使用以下命令重置现有用户的密码。
from pymilvus import utility
utility.reset_password('user', 'new_password', using='default')
TLS连接
传输层安全(TLS)是一种身份验证协议,用于在计算机网络中提供通信安全。TLS使用证书在两个或多个通信方之间提供身份验证服务。
如何在Milvus矢量数据库中启用TLS
要在Milvus vector数据库中启用TLS,首先需要运行以下命令来准备两个文件以生成证书:一个名为OpenSSL的默认OpenSSL配置文件。cnf和名为gen.shused的文件生成相关证书。
mkdir cert && cd cert
touch openssl.cnf gen.sh
然后,您可以将我们在这里提供的配置复制并粘贴到两个文件中。或者,您也可以根据我们的配置进行修改,以更好地适应您的应用程序。
两个文件准备就绪后,可以运行gen.shfile创建九个证书文件。同样,您还可以修改九个证书文件中的配置以满足您的需要。
chmod +x gen.sh
./gen.sh
在使用TLS连接到Milvus服务之前,还有最后一步。您必须将TLSEEnabled设置为true,并配置服务器的文件path.pem服务器。在config/milvus.yaml中为服务器提供了密钥和ca.pem。下面的代码是一个示例。
tls:
serverPemPath: configs/cert/server.pem
serverKeyPath: configs/cert/server.key
caPemPath: configs/cert/ca.pem
common:
security:
tlsEnabled: true
然后,您就可以使用TLS连接到Milvus服务,只要您指定客户端的文件path.pem。当使用Milvus连接SDK时,为客户端提供密钥和ca.pem。下面的代码也是一个示例。
from pymilvus import connections
_HOST = '127.0.0.1'
_PORT = '19530'
print(f"\nCreate connection...")
connections.connect(host=_HOST, port=_PORT, secure=True, client_pem_path="cert/client.pem",
client_key_path="cert/client.key",
ca_pem_path="cert/ca.pem", server_name="localhost")
print(f"\nList connections:")
print(connections.list_connections())
原文标题:How Does the Milvus Vector Database Ensure Data Security?
原文作者:Angela Ni
原文链接:https://dzone.com/articles/how-does-the-milvus-vector-database-ensure-data-se




