Verwalten von Snowflake-Benutzern, Rollen und Berechtigungen mit Python

Sie können Python verwenden, um Snowflake-Benutzer, Rollen und Berechtigungen zu verwalten. Weitere Informationen zur Verwaltung von Benutzern und ihren Berechtigungen in Snowflake finden Sie unter Benutzerverwaltung.

Voraussetzungen

Die Beispiele in diesem Thema gehen davon aus, dass Sie Code hinzugefügt haben, um eine Verbindung zu Snowflake herzustellen und ein Root-Objekt zu erstellen, von dem aus Sie die Snowflake Python APIs verwenden können.

Beispielsweise verwendet der folgende Code Verbindungsparameter, die in einer Konfigurationsdatei definiert sind, um eine Verbindung zu Snowflake zu erstellen:

from snowflake.core import Root
from snowflake.snowpark import Session

session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Copy

Unter Verwendung des resultierenden Session-Objekts erstellt der Code ein Root-Objekt, das die Typen und Methoden der API verwendet. Weitere Informationen dazu finden Sie unter Verbinden mit Snowflake mit dem Snowflake Python APIs.

Verwaltung von Benutzern

Sie können Benutzer in Snowflake verwalten. Ein Benutzer ist ein Objekt auf Kontoebene in Snowflake. Snowflake Python APIs stellt Benutzer mit zwei verschiedenen Typen dar:

  • User: Zeigt die Eigenschaften eines Benutzers an, wie z. B. seinen Namen.

  • UserResource: Stellt Methoden zur Verfügung, mit denen Sie ein entsprechendes User-Objekt abrufen und den Benutzer löschen können.

Erstellen eines Benutzers

Sie können einen Benutzer erstellen, indem Sie die UserCollection.create-Methode aufrufen und ein User-Objekt übergeben, das den Benutzer darstellt, den Sie erstellen möchten. Um einen Benutzer anzulegen, erstellen Sie zunächst ein User-Objekt, das den Benutzernamen angibt.

Der Code im folgenden Beispiel erstellt ein User-Objekt, das einen Benutzer namens my_user repräsentiert, und erstellt dann den Benutzer, indem er das User-Objekt an die Methode UserCollection.create übergibt:

from snowflake.core.user import User

my_user = User(name="my_user")
root.users.create(my_user)
Copy

Abrufen von Benutzerdetails

Sie können Informationen über einen Benutzer abrufen, indem Sie die UserResource.fetch-Methode aufrufen, die ein User-Objekt zurückgibt.

Der Code im folgenden Beispiel ruft Informationen über einen Benutzer namens my_user ab:

my_user = root.users["my_user"].fetch()
print(my_user.to_dict())
Copy

Auflisten von Benutzern

Sie können mit der iter-Methode Benutzer auflisten, die einen PagedIter-Iterator zurückgibt.

Der Code im folgenden Beispiel listet Benutzer auf, deren Name mit my beginnt:

users = root.users.iter(like="my%")
for user in users:
  print(user.name)
Copy

Löschen eines Benutzers

Sie können einen Benutzer mit der UserResource.drop-Methode löschen.

Der Code im folgenden Beispiel löscht den my_user-Benutzer:

my_user_res = root.users["my_user"]
my_user_res.drop()
Copy

Verwalten von Rollen

Sie können Rollen in Snowflake verwalten. Eine Rolle ist ein Objekt auf Kontoebene. Snowflake Python APIs stellt Rollen mit zwei verschiedenen Typen dar:

  • Role: Zeigt die Eigenschaften einer Rolle an, wie z. B. ihren Namen.

  • RoleResource: Stellt Methoden zur Verfügung, mit denen Sie ein entsprechendes Role-Objekt abrufen und die Rolle löschen können.

Erstellen einer Rolle

Um eine Rolle zu erstellen, erstellen Sie zunächst ein Role-Objekt, das den Rollennamen angibt.

Der Code im folgenden Beispiel erstellt ein Role-Objekt, das eine Rolle namens my_role repräsentiert:

from snowflake.core.role import Role

my_role = Role(name="my_role")
root.roles.create(my_role)
Copy

Der Code erstellt dann die Rolle, indem er das Role-Objekt an die Methode RoleCollection.create übergibt.

Verwenden einer Rolle in einer Sitzung

Der Code im folgenden Beispiel wendet die my_role-Rolle in der aktuellen Sitzung an.

root.session.use_role("my_role")
Copy

Auflisten von Rollen

Sie können die Rollen in einem Konto mit der iter-Methode auflisten. Die Methode gibt einen PagedIter-Iterator für Role-Objekte zurück.

Der Code im folgenden Beispiel listet alle Rollennamen in einem Konto auf:

role_list = root.roles.iter()
for role_obj in role_list:
  print(role_obj.name)
Copy

Löschen einer Rolle

Sie können eine Rolle mit der RoleResource.drop-Methode löschen.

Der Code im folgenden Beispiel löscht die my_role-Rolle:

my_role_res = root.roles["my_role"]
my_role_res.drop()
Copy

Verwalten von Datenbankrollen

Sie können Datenbankrollen in Snowflake verwalten. Eine Datenbankrolle ist ein Objekt auf Datenbankebene. Snowflake Python APIs stellt Datenbankrollen mit zwei verschiedenen Typen dar:

  • DatabaseRole: Zeigt die Eigenschaften einer Datenbankrolle an, wie z. B. ihren Namen und einen Kommentar.

  • DatabaseRoleResource: Stellt Methoden zur Verfügung, mit denen Sie ein entsprechendes DatabaseRole-Objekt abrufen und die Datenbankrolle löschen können.

Erstellen einer Datenbankrolle

Um eine Datenbankrolle zu erstellen, erstellen Sie zunächst ein DatabaseRole-Objekt, das den Rollennamen angibt.

Der Code im folgenden Beispiel erstellt ein DatabaseRole-Objekt, das eine Datenbankrolle namens my_db_role repräsentiert:

from snowflake.core.database_role import DatabaseRole

my_db_role = DatabaseRole(
  name="my_db_role",
  comment="sample comment"
)

my_db_role_ref = root.databases['my_db'].database_roles.create(my_db_role)
Copy

Der Code erstellt dann die Datenbankrolle, indem er das DatabaseRole-Objekt an die DatabaseRoleCollection.create-Methode übergibt.

Klonen einer Datenbankrolle

Der Code im folgenden Beispiel erstellt eine Datenbankrolle namens dr2 in der my_db_2-Zieldatenbank als Kopie der bestehenden dr1-Datenbankrolle in der my_db-Datenbank.

database_role_ref = root.databases['my_db'].database_roles['dr1'].clone(target_database_role='dr2', target_database='my_db_2')
Copy

Auflisten von Datenbankrollen

Sie können die Datenbankrollen in einem Konto auflisten, indem Sie die iter-Methode verwenden. Die Methode gibt einen PagedIter-Iterator für DatabaseRole-Objekte zurück.

Der Code im folgenden Beispiel listet die Datenbankrolle namens my_db_role in der my_db-Datenbank auf und schränkt die Anzahl der Ergebnisse auf 1 ein:

db_role_list = root.databases['my_db'].database_roles.iter(limit=1, from_name='my_db_role')
for db_role_obj in db_role_list:
  print(db_role_obj.name)
Copy

Löschen einer Datenbankrolle

Sie können eine Datenbankrolle mit der DatabaseRoleResource.drop-Methode löschen.

Der Code im folgenden Beispiel löscht die my_db_role-Datenbankrolle:

root.databases['my_db'].database_roles['my_db_role'].drop()
Copy

Verwalrten von Zugriffsrechten

Sie können API verwenden, um die Zugriffsrechte auf ein sicheres Snowflake-Objekt für eine Kontorolle, eine Datenbankrolle oder einen Benutzer zu verwalten. Weitere Informationen über Rollen, sicherungsfähige Objekte und die Zugriffssteuerung in Snowflake finden Sie unter Übersicht zur Zugriffssteuerung.

Für Kontorollen

Die folgenden Code-Beispiele demonstrieren die API-Operationen zur Erteilung von Berechtigungen, zum Widerrufen von Berechtigungen und zur Auflistung von Berechtigungen für -Kontorollen.

Berechtigungen erteilen

from snowflake.core.role import Securable

root.roles['my_role'].grant_privileges(
    privileges=["OPERATE"], securable_type="WAREHOUSE", securable=Securable(name='my_wh')
)
Copy

Grant-Rolle

from snowflake.core.role import Securable

root.roles['my_role'].grant_role(role_type="ROLE", role=Securable(name='my_role_1'))
Copy

Berechtigungen für alle erteilen

from snowflake.core.role import ContainingScope

root.roles['my_role'].grant_privileges_on_all(
    privileges=["SELECT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Zukünftige Berechtigungen erteilen

from snowflake.core.role import ContainingScope

root.roles['my_role'].grant_future_privileges(
    privileges=["SELECT", "INSERT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Berechtigungen widerrufen

from snowflake.core.role import Securable

root.roles['my_role'].revoke_privileges(
    privileges=["OPERATE"], securable_type="WAREHOUSE", securable=Securable(name='my_wh')
)
Copy

Rolle widerrufen

from snowflake.core.role import Securable

root.roles['my_role'].revoke_role(role_type="ROLE", role=Securable(name='my_role_1'))
Copy

Berechtigungen für alle widerrufen

from snowflake.core.role import ContainingScope

root.roles['my_role'].revoke_privileges_on_all(
    privileges=["SELECT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Künftige Berechtigungen widerrufen

from snowflake.core.role import ContainingScope

root.roles['my_role'].revoke_future_privileges(
    privileges=["SELECT", "INSERT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Option für die Erteilung von Berechtigungen widerrufen

from snowflake.core.role import Securable

 root.roles['my_role'].revoke_grant_option_for_privileges(
    privileges=["OPERATE"], securable_type="WAREHOUSE", securable=Securable(name='my_wh')
)
Copy

Option für Berechtigungen für alle widerrufen

from snowflake.core.role import ContainingScope

root.roles['my_role'].revoke_grant_option_for_privileges_on_all(
    privileges=["SELECT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Option für die Gewährung zukünftiger Berechtigungen widerrufen

from snowflake.core.role import ContainingScope

root.roles['my_role'].revoke_grant_option_for_future_privileges(
    privileges=["SELECT", "INSERT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Berechtigungszuweisungen für die Rolle auflisten

root.roles['my_role'].iter_grants_to()
Copy

Berechtigungszuweisungen auf der Rolle auflisten

root.roles['my_role'].iter_grants_on()
Copy

Berechtigungszuweisungen der Rolle auflisten

root.roles['my_role'].iter_grants_of()
Copy

Zukünftige Berechtigungszuweisungen für doe Rolle auflisten

root.roles['my_role'].iter_future_grants_to()
Copy

Für Benutzer

Die folgenden Code-Bdemonstrieren die API-Operationen zur Zuweisung einer Rolle, zum Widerrufen einer Rolle und zum Auflisten von Rollen für Benutzer.

Einem Benutzer eine Rolle zuweisen

from snowflake.core.user import Securable

root.users['my_user'].grant_role(role_type="ROLE", role=Securable(name='my_role'))
Copy

Rolle eines Benutzers widerrufen

from snowflake.core.user import Securable

root.users['my_user'].revoke_role(role_type="ROLE", role=Securable(name='my_role'))
Copy

Einem Benutzer zugewiesene Rollen auflisten

root.users['my_user'].iter_grants_to()
Copy

Für Datenbankrollen

Die folgenden Code-Beispiele demonstrieren die API-Operationen zur Erteilung von Berechtigungen, zum Widerrufen von Berechtigungen und zur Auflistung von Berechtigungen für Datenbankrollen.

Berechtigungen erteilen

from snowflake.core.database_role import Securable

root.databases['my_db'].database_roles['my_db_role'].grant_privileges(
    privileges=["MODIFY"], securable_type="DATABASE", securable=Securable(name='my_db')
)
Copy

Grant-Rolle

from snowflake.core.database_role import Securable

root.databases['my_db'].database_roles['my_db_role'].grant_role(role_type="DATABASE ROLE", role=Securable(name='my_db_role_1'))
Copy

Berechtigungen für alle erteilen

from snowflake.core.database_role import ContainingScope

root.databases['my_db'].database_roles['my_db_role'].grant_privileges_on_all(
    privileges=["SELECT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Zukünftige Berechtigungen erteilen

from snowflake.core.database_role import ContainingScope

root.databases['my_db'].database_roles['my_db_role'].grant_future_privileges(
    privileges=["SELECT", "INSERT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Berechtigungen widerrufen

from snowflake.core.database_role import Securable

root.databases['my_db'].database_roles['my_db_role'].revoke_privileges(
    privileges=["MODIFY"], securable_type="DATABASE", securable=Securable(name='my_db')
)
Copy

Rolle widerrufen

from snowflake.core.database_role import Securable

root.databases['my_db'].database_roles['my_db_role'].revoke_role(role_type="DATABASE ROLE", role=Securable(name='my_db_role_1'))
Copy

Alle Berechtigungen widerrufen

from snowflake.core.database_role import ContainingScope

root.databases['my_db'].database_roles['my_db_role'].revoke_privileges_on_all(
    privileges=["SELECT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Künftige Berechtigungen widerrufen

from snowflake.core.database_role import ContainingScope

root.databases['my_db'].database_roles['my_db_role'].revoke_future_privileges(
    privileges=["SELECT", "INSERT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Option für die Erteilung von Berechtigungen widerrufen

from snowflake.core.database_role import Securable

root.databases['my_db'].database_roles['my_db_role'].revoke_grant_option_for_privileges(
    privileges=["MODIFY"], securable_type="DATABASE", securable=Securable(name='my_db')
)
Copy

Option für Berechtigungen für alle widerrufen

from snowflake.core.database_role import ContainingScope

root.databases['my_db'].database_roles['my_db_role'].revoke_grant_option_for_privileges_on_all(
    privileges=["SELECT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Option für die Gewährung zukünftiger Berechtigungen widerrufen

from snowflake.core.database_role import ContainingScope

root.databases['my_db'].database_roles['my_db_role'].revoke_grant_option_for_future_privileges(
    privileges=["SELECT", "INSERT"],
    securable_type="TABLE",
    containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Copy

Berechtigungszuweisungen für die Rolle auflisten

root.databases['my_db'].database_roles['my_db_role'].iter_grants_to()
Copy

Zukünftige Berechtigungszuweisungen für doe Rolle auflisten

root.databases['my_db'].database_roles['my_db_role'].iter_future_grants_to()
Copy

Verwalten von Berechtigungszuweisungen über die Grant-Ressource — veraltet

Sie können GRANT <Berechtigungen>-Operationen ausführen, um einer Rolle Zugriffsrechte auf ein sicheres Snowflake-Objekt zu gewähren.

Erteilen von Berechtigungen

Um Berechtigungen für ein Snowflake-Objekt zu erteilen, erstellen Sie zunächst ein Grant-Objekt, das die folgenden Attribute angibt:

  • grantee: Die Rolle oder der Benutzer, dem die Berechtigungen gewährt werden.

  • securable: Das Snowflake-Objekt, das durch die Berechtigungen gesichert wird.

  • privileges: Die Berechtigungen, die einer Rolle gewährt werden.

Erteilung von CREATE-Berechtigungen an eine Rolle in einem Konto

Der Code im folgenden Beispiel erstellt ein Grant-Objekt, das eine Operation darstellt, die der my_role-Rolle im aktuellen Snowflake Konto die Berechtigungen create_database und create_warehouse gewährt. Der Code führt die Operation mit der root.grants.grant-Methode aus.

from snowflake.core.grant import Grant
from snowflake.core.grant._grantee import Grantees
from snowflake.core.grant._privileges import Privileges
from snowflake.core.grant._securables import Securables

root.grants.grant(
  Grant(
    grantee=Grantees.role(name='my_role'),
    securable=Securables.current_account,
    privileges=[Privileges.create_database,
                Privileges.create_warehouse],
  )
)
Copy

Erteilen von Berechtigungen an eine Rolle in einer Datenbank

Der Code im folgenden Beispiel gewährt importierte Berechtigungen auf der my_db-Datenbank für die my_role-Rolle:

from snowflake.core.grant import Grant
from snowflake.core.grant._grantee import Grantees
from snowflake.core.grant._privileges import Privileges
from snowflake.core.grant._securables import Securables

root.grants.grant(
  Grant(
    grantee=Grantees.role('my_role'),
    securable=Securables.database('my_db'),
    privileges=[Privileges.imported_privileges],
  )
)
Copy

Zuweisen einer Rolle an eine andere Rolle

Sie können eine Rolle einer anderen Rolle zuweisen. Dadurch wird eine „Übergeordnet/Untergeordnet-Beziehung“ zwischen den Rollen (auch als Rollenhierarchie bezeichnet) geschaffen.

Der Code im folgenden Beispiel weist der ACCOUNTADMIN-Systemrolle die my_role-Benutzerrolle zu:

from snowflake.core.grant import Grant
from snowflake.core.grant._grantee import Grantees
from snowflake.core.grant._securables import Securables

root.grants.grant(
  Grant(
    grantee=Grantees.role('ACCOUNTADMIN'),
    securable=Securables.role('my_role'),
  )
)
Copy