milvus-logo
LFAI
Home
  • Guia de Administração

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. Seotipo de objetofor 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 utilizador 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

Traduzido porDeepLogo

Try Zilliz Cloud for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Esta página foi útil?