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)
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 entsprechendesUser
-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)
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())
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)
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()
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 entsprechendesRole
-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)
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")
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)
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()
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 entsprechendesDatabaseRole
-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)
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')
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)
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()
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')
)
Grant-Rolle¶
from snowflake.core.role import Securable
root.roles['my_role'].grant_role(role_type="ROLE", role=Securable(name='my_role_1'))
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'),
)
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'),
)
Berechtigungen widerrufen¶
from snowflake.core.role import Securable
root.roles['my_role'].revoke_privileges(
privileges=["OPERATE"], securable_type="WAREHOUSE", securable=Securable(name='my_wh')
)
Rolle widerrufen¶
from snowflake.core.role import Securable
root.roles['my_role'].revoke_role(role_type="ROLE", role=Securable(name='my_role_1'))
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'),
)
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'),
)
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')
)
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'),
)
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'),
)
Berechtigungszuweisungen für die Rolle auflisten¶
root.roles['my_role'].iter_grants_to()
Berechtigungszuweisungen auf der Rolle auflisten¶
root.roles['my_role'].iter_grants_on()
Berechtigungszuweisungen der Rolle auflisten¶
root.roles['my_role'].iter_grants_of()
Zukünftige Berechtigungszuweisungen für doe Rolle auflisten¶
root.roles['my_role'].iter_future_grants_to()
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'))
Rolle eines Benutzers widerrufen¶
from snowflake.core.user import Securable
root.users['my_user'].revoke_role(role_type="ROLE", role=Securable(name='my_role'))
Einem Benutzer zugewiesene Rollen auflisten¶
root.users['my_user'].iter_grants_to()
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')
)
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'))
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'),
)
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'),
)
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')
)
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'))
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'),
)
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'),
)
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')
)
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'),
)
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'),
)
Berechtigungszuweisungen für die Rolle auflisten¶
root.databases['my_db'].database_roles['my_db_role'].iter_grants_to()
Zukünftige Berechtigungszuweisungen für doe Rolle auflisten¶
root.databases['my_db'].database_roles['my_db_role'].iter_future_grants_to()
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],
)
)
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],
)
)
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'),
)
)