Ativar o RBAC
Ao ativar o RBAC, pode controlar o acesso a recursos Milvus específicos (por exemplo, uma coleção ou uma partição) ou permissões com base no papel e privilégios do utilizador. Atualmente, esta funcionalidade só está disponível em Python e Java.
Este tópico descreve como ativar o RBAC e gerir utilizadores e funções.
Os trechos de código nesta página usam o novo MilvusClient (Python) para interagir com o Milvus. Novos SDKs MilvusClient para outras linguagens serão lançados em futuras actualizações.
1. Iniciar um cliente Milvus para estabelecer uma ligação
Depois de ativar a autenticação do utilizador, ligue-se à sua instância Milvus utilizando token
que consiste num nome de utilizador e numa palavra-passe. Por predefinição, o Milvus utiliza o utilizador root
com a palavra-passe Milvus
.
from pymilvus import MilvusClient
client = MilvusClient(
uri='http://localhost:19530', # replace with your own Milvus server address
token='root:Milvus' # replace with your own Milvus server token
)
2. Criar um utilizador
Crie um utilizador chamado user_1
com a palavra-passe P@ssw0rd
:
client.create_user(
user_name='user_1',
password='P@ssw0rd'
)
Depois de criar um utilizador, é possível:
- Atualizar a palavra-passe de um utilizador. É necessário fornecer a palavra-passe original e a nova.
client.update_password(
user_name='user_1',
old_password='P@ssw0rd',
new_password='P@ssw0rd123'
)
- Listar todos os utilizadores.
client.list_users()
# output:
# ['root', 'user_1']
- Verificar a função de um determinado utilizador.
client.describe_user(user_name='user_1')
# output:
# {'user_name': 'user_1', 'roles': ()}
3. Criar uma função
O exemplo seguinte cria uma função denominada roleA
.
client.create_role(
role_name="roleA",
)
Depois de criar uma função, pode:
- Listar todas as funções.
client.list_roles()
# output:
# ['admin', 'public', 'roleA']
4. Conceder um privilégio a uma função
O exemplo seguinte demonstra como conceder a permissão de pesquisar todas as colecções à função denominada roleA
.
O object_type
especifica o tipo de objeto, que também pode ser entendido como o tipo de recurso. Atualmente, os valores válidos incluem Coleção/Utilizador/Global, etc., em que Global significa que não existe um tipo de recurso específico. O object_name
é o nome do recurso. Se o tipo de objetofor Coleção, então o nome do objeto pode ser referido a um nome de coleção específico, ou pode utilizar * para especificar todas as colecções. Seo tipo de objeto for Global, o nome do objeto só pode ser especificado como *. Consulte Utilizadores e funções para outros tipos de privilégios que pode conceder.
Antes de gerir os privilégios de função, certifique-se de que activou a autenticação do utilizador. Caso contrário, poderá ocorrer um erro. Para obter informações sobre como ativar a autenticação do utilizador, consulte Autenticar o acesso do utilizador.
# grant privilege to a role
client.grant_privilege(
role_name='roleA',
object_type='User', # value here can be Global, Collection or User, object type also depends on the API defined in privilegeName
object_name='user_1', # value here can be * or a specific user name if object type is 'User'
privilege='SelectUser'
)
Depois de conceder um privilégio a uma função, pode:
- Visualizar os privilégios concedidos a uma função.
client.describe_role(
role_name='roleA'
)
# output:
# {'role': 'roleA',
# 'privileges': [{'object_type': 'User',
# 'object_name': 'user_1',
# 'db_name': 'default',
# 'role_name': 'roleA',
# 'privilege': 'SelectUser',
# 'grantor_name': 'root'}]}
5. Conceder uma função a um utilizador
Conceder a função a um utilizador para que este possa herdar todos os privilégios da função.
# grant a role to a user
client.grant_role(
user_name='user_1',
role_name='roleA'
)
Depois de conceder a função, verificar se a mesma foi concedida:
client.describe_user(
user_name='user_1'
)
# output:
# {'user_name': 'user_1', 'roles': ('roleA')}
6. Revogar privilégios
Tenha cuidado ao efetuar as seguintes operações, uma vez que estas são irreversíveis.
- Remover um privilégio de uma função. Se revogar um privilégio que não tenha sido concedido à função, ocorrerá um erro.
client.revoke_privilege(
role_name='roleA',
object_type='User', # value here can be Global, Collection or User, object type also depends on the API defined in privilegeName
object_name='user_1', # value here can be * or a specific user name if object type is 'User'
privilege='SelectUser'
)
- Remover um utilizador de uma função. Se revogar uma função que não tenha sido concedida ao utilizador, ocorrerá um erro.
client.revoke_role(
user_name='user_1',
role_name='roleA'
)
- Eliminar uma função.
client.drop_role(role_name='roleA')
- Eliminar um utilizador.
client.drop_user(user_name='user_1')
O que se segue
Saiba como gerir a autenticação do utilizador.
Saiba como ativar o proxy TLS no Milvus.