User Management
The Python SDK lets you create users, assign them roles and associated privileges, and remove them from the system.
User-Management APIs
Users who have been assigned the Admin role for the cluster are able to create, edit, and remove users. The Python SDK provides APIs to support these activities. A high-level summary of the APIs can be found in User-Management, and details of all options in the UserManager API docs.
Using the UserManager API
The most common uses of the UserManager
API are creating and listing users:
user_manager = adm_cluster.users()
user = User(username=username, display_name="Test User",
roles=[
# Roles required for reading data from bucket
Role(name="data_reader", bucket="*"),
Role(name="query_select", bucket="*"),
# Roles require for writing data to bucket
Role(name="data_writer", bucket=bucket_name),
Role(name="query_insert", bucket=bucket_name),
Role(name="query_delete", bucket=bucket_name),
# Role required for idx creation on bucket
Role(name="query_manage_index", bucket=bucket_name),
], password=pw)
user_manager.upsert_user(user)
users_metadata = user_manager.get_all_users()
for u in users_metadata:
print("User's display name: {}".format(u.user.display_name))
roles = u.user.roles
for r in roles:
print(
"\tUser has role {}, applicable to bucket {}".format(
r.name, r.bucket))
Using a user created in the SDK to access data:
user_cluster = Cluster(
"couchbase://localhost",
authenticator=PasswordAuthenticator(username, pw))
# For Server versions 6.5 or later you do not need to open a bucket here
user_bucket = user_cluster.bucket(bucket_name)
collection = user_bucket.default_collection()
# create primary idx for testing purposes
user_cluster.query_indexes().create_primary_index(
bucket_name, CreatePrimaryQueryIndexOptions(
ignore_if_exists=True))
# test k/v operations
airline_10 = collection.get("airline_10")
print("Airline 10: {}".format(airline_10.content_as[dict]))
airline_11 = {
"callsign": "MILE-AIR",
"iata": "Q5",
"id": 11,
"name": "40-Mile Air",
"type": "airline",
}
collection.upsert("airline_11", airline_11)
# test query operations
query_res = user_cluster.query("SELECT * FROM `travel-sample` LIMIT 5;")
for row in query_res.rows():
print("Query row: {}".format(row))
Further Reading
The SDK also contains management APIs for dealing with Cluster resources.