Python을 사용하여 Snowflake 사용자, 역할 및 권한 관리¶
Python을 사용하여 Snowflake 사용자, 역할 및 권한을 관리할 수 있습니다. Snowflake에서 사용자 및 해당 권한 관리에 대한 자세한 내용은 사용자 관리 섹션을 참조하십시오.
전제 조건¶
이 항목의 예제에서는 Snowflake와 연결하고 Snowflake Python APIs 을 사용할 수 있는 Root
오브젝트를 생성하는 코드를 추가했다고 가정합니다.
예를 들어, 다음 코드는 구성 파일에 정의된 연결 매개 변수를 사용하여 Snowflake에 대한 연결을 생성합니다.
from snowflake.core import Root
from snowflake.snowpark import Session
session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
해당 코드에서는 결과 Session
오브젝트를 사용하여 API의 유형과 메서드를 사용하기 위해 Root
오브젝트를 생성합니다. 자세한 내용은 Snowflake Python APIs 을 사용하여 Snowflake에 연결 섹션을 참조하십시오.
사용자 관리¶
Snowflake에서 사용자를 관리할 수 있습니다. 사용자는 Snowflake의 계정 수준 오브젝트입니다. Snowflake Python APIs 은 다음 두 가지 별개 유형의 사용자를 나타냅니다.
User
: 사용자의 속성(예: 이름)을 노출합니다.UserResource
: 해당User
오브젝트를 가져오고 사용자를 삭제하는 데 사용할 수 있는 메서드를 노출합니다.
사용자 만들기¶
UserCollection.create
메서드를 호출하고 생성하려는 사용자를 나타내는 User
오브젝트를 전달하여 사용자를 생성할 수 있습니다. 사용자를 생성하려면 먼저 사용자 이름을 지정하는 User
오브젝트를 생성합니다.
다음 예제의 코드는 my_user
라는 사용자를 나타내는 User
오브젝트를 생성한 다음 User
오브젝트를 UserCollection.create
메서드에 전달하여 사용자를 생성합니다.
from snowflake.core.user import User
my_user = User(name="my_user")
root.users.create(my_user)
사용자 세부 정보 얻기¶
User
오브젝트를 반환하는 UserResource.fetch
메서드를 호출하여 사용자에 대한 정보를 얻을 수 있습니다.
다음 예제의 코드는 my_user
사용자에 대한 정보를 가져옵니다.
my_user = root.users["my_user"].fetch()
print(my_user.to_dict())
사용자 나열하기¶
PagedIter
반복기를 반환하는 iter
메서드를 사용하여 사용자를 나열할 수 있습니다.
다음 예제의 코드는 이름이 my
로 시작하는 사용자를 나열합니다.
users = root.users.iter(like="my%")
for user in users:
print(user.name)
사용자 삭제하기¶
UserResource.drop
메서드를 사용하여 사용자를 삭제할 수 있습니다.
다음 예제의 코드는 my_user
사용자를 삭제합니다.
my_user_res = root.users["my_user"]
my_user_res.drop()
역할 관리하기¶
Snowflake에서는 역할을 관리할 수 있습니다. 역할은 계정 수준의 오브젝트입니다. Snowflake Python APIs 은 다음 두 가지 별개 유형의 역할을 나타냅니다.
Role
: 역할의 속성(예: 이름)을 노출합니다.RoleResource
: 해당Role
오브젝트를 가져오고 역할을 삭제하는 데 사용할 수 있는 메서드를 노출합니다.
역할 만들기¶
역할을 생성하려면 먼저 역할 이름을 지정하는 Role
오브젝트를 생성합니다.
다음 예제의 코드는 my_role
라는 역할을 나타내는 Role
오브젝트를 생성합니다.
from snowflake.core.role import Role
my_role = Role(name="my_role")
root.roles.create(my_role)
그런 다음 Role
오브젝트를 RoleCollection.create
메서드에 전달하여 역할을 생성합니다.
세션에서 역할 사용¶
다음 예제의 코드는 현재 세션에서 my_role
역할을 적용합니다.
root.session.use_role("my_role")
역할 나열하기¶
iter
메서드를 사용하여 계정의 역할을 목록으로 만들 수 있습니다. 이 메서드는 Role
오브젝트의 PagedIter
반복기를 반환합니다.
다음 예제의 코드는 계정의 모든 역할 이름을 나열합니다.
role_list = root.roles.iter()
for role_obj in role_list:
print(role_obj.name)
역할 삭제하기¶
RoleResource.drop
메서드를 사용하여 역할을 삭제할 수 있습니다.
다음 예제의 코드는 my_role
역할을 삭제합니다.
my_role_res = root.roles["my_role"]
my_role_res.drop()
데이터베이스 역할 관리하기¶
Snowflake에서 데이터베이스 역할 을 관리할 수 있습니다. 데이터베이스 역할은 데이터베이스 수준 오브젝트입니다. Snowflake Python APIs 은 다음 두 가지 별개 유형의 데이터베이스 역할을 나타냅니다.
DatabaseRole
: 이름 및 설명과 같은 데이터베이스 역할의 속성을 노출합니다.DatabaseRoleResource
: 해당DatabaseRole
오브젝트를 가져오고 데이터베이스 역할을 삭제하는 데 사용할 수 있는 메서드를 노출합니다.
데이터베이스 역할 만들기¶
데이터베이스 역할을 생성하려면 먼저 역할 이름을 지정하는 DatabaseRole
오브젝트를 생성합니다.
다음 예제의 코드는 my_db_role
라는 데이터베이스를 나타내는 DatabaseRole
오브젝트를 생성합니다.
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)
그런 다음 이 코드는 DatabaseRole
오브젝트를 DatabaseRoleCollection.create
메서드에 전달하여 데이터베이스 역할을 생성합니다.
데이터베이스 역할 복제¶
다음 예제의 코드는 my_db_2
대상 데이터베이스에 dr2
라는 데이터베이스 역할을 my_db
데이터베이스에 있는 기존 dr1
데이터베이스 역할의 복사본으로 생성합니다.
database_role_ref = root.databases['my_db'].database_roles['dr1'].clone(target_database_role='dr2', target_database='my_db_2')
데이터베이스 역할 나열하기¶
iter
메서드를 사용하여 계정의 데이터베이스 역할을 목록으로 만들 수 있습니다. 이 메서드는 DatabaseRole
오브젝트의 PagedIter
반복기를 반환합니다.
다음 예제의 코드는 my_db
데이터베이스에서 my_db_role
이라는 데이터베이스 역할을 나열하여 결과 수를 1
로 제한합니다.
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)
데이터베이스 역할 삭제¶
DatabaseRoleResource.drop
메서드를 사용하여 데이터베이스 역할을 삭제할 수 있습니다.
다음 예제의 코드는 my_db_role
데이터베이스 역할을 삭제합니다.
root.databases['my_db'].database_roles['my_db_role'].drop()
액세스 권한 관리하기¶
API를 사용하여 계정 역할, 데이터베이스 역할 또는 사용자에 대한 보안 Snowflake 오브젝트에 대한 액세스 권한을 관리할 수 있습니다. Snowflake의 역할, 보안 오브젝트 및 액세스 제어 프레임워크에 대한 자세한 내용은 액세스 제어의 개요 섹션을 참조하십시오.
계정 역할의 경우¶
다음 코드 예제는 계정 역할 에 대한 권한을 부여하고, 권한을 취소하고, 부여 목록을 나열하는 API 작업을 보여줍니다.
권한 부여¶
from snowflake.core.role import Securable
root.roles['my_role'].grant_privileges(
privileges=["OPERATE"], securable_type="WAREHOUSE", securable=Securable(name='my_wh')
)
역할 부여¶
from snowflake.core.role import Securable
root.roles['my_role'].grant_role(role_type="ROLE", role=Securable(name='my_role_1'))
모든 사용자에 권한 부여¶
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'),
)
향후 권한 부여¶
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'),
)
권한 취소¶
from snowflake.core.role import Securable
root.roles['my_role'].revoke_privileges(
privileges=["OPERATE"], securable_type="WAREHOUSE", securable=Securable(name='my_wh')
)
역할 취소¶
from snowflake.core.role import Securable
root.roles['my_role'].revoke_role(role_type="ROLE", role=Securable(name='my_role_1'))
모든 사용자에 권한 부여 취소¶
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'),
)
향후 권한 취소¶
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'),
)
권한에 대한 부여 옵션 취소¶
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')
)
모든 권한에 대한 권한 부여 옵션 취소¶
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'),
)
향후 권한에 대한 부여 옵션 취소¶
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'),
)
역할에 대한 권한 부여 목록¶
root.roles['my_role'].iter_grants_to()
역할에 대한 권한 부여 목록¶
root.roles['my_role'].iter_grants_on()
역할의 부여 목록¶
root.roles['my_role'].iter_grants_of()
역할에 대한 향후 권한을 나열합니다¶
root.roles['my_role'].iter_future_grants_to()
사용자의 경우¶
다음 코드 예제에서는 사용자에게 역할을 부여하고, 역할을 취소하고, 역할을 목록으로 나열하는 API 작업을 보여 줍니다.
사용자에 역할 부여¶
from snowflake.core.user import Securable
root.users['my_user'].grant_role(role_type="ROLE", role=Securable(name='my_role'))
사용자의 역할 취소¶
from snowflake.core.user import Securable
root.users['my_user'].revoke_role(role_type="ROLE", role=Securable(name='my_role'))
사용자에게 부여된 역할 나열¶
root.users['my_user'].iter_grants_to()
데이터베이스 역할¶
다음 코드 예제는 데이터베이스 역할 에 대한 권한을 부여하고, 권한을 취소하고, 부여 목록을 나열하는 API 작업을 보여줍니다.
권한 부여¶
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')
)
역할 부여¶
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'))
모든 사용자에 권한 부여¶
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'),
)
향후 권한 부여¶
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'),
)
권한 취소¶
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')
)
역할 취소¶
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'))
모든 권한 취소¶
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'),
)
향후 권한 취소¶
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'),
)
권한에 대한 부여 옵션 취소¶
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')
)
모든 권한에 대한 권한 부여 옵션 취소¶
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'),
)
향후 권한에 대한 부여 옵션 취소¶
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'),
)
역할에 대한 권한 부여 목록¶
root.databases['my_db'].database_roles['my_db_role'].iter_grants_to()
역할에 대한 향후 권한을 나열합니다¶
root.databases['my_db'].database_roles['my_db_role'].iter_future_grants_to()
Grant
리소스를 사용하여 권한 관리하기 — 사용 중단됨¶
GRANT <권한> 작업을 실행하여 보안이 설정된 Snowflake 오브젝트에 대한 액세스 권한을 역할에 부여할 수 있습니다.
권한 부여하기¶
Snowflake 오브젝트에 권한을 부여하려면 먼저 다음 특성을 지정하는 Grant
오브젝트를 생성합니다.
grantee
: 권한이 부여되는 역할 또는 사용자입니다.securable
: 권한에 의해 보호되는 Snowflake 오브젝트입니다.privileges
: 역할에 부여되는 권한입니다.
계정에서 역할에 CREATE 권한 부여하기¶
다음 예제의 코드는 현재 Snowflake 계정의 my_role
역할에 create_database
및 create_warehouse
권한을 부여하는 부여 작업을 나타내는 Grant
오브젝트를 생성합니다. 이 코드는 root.grants.grant
메서드를 사용하여 작업을 실행합니다.
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],
)
)
역할에 데이터베이스 권한 부여¶
다음 예제의 코드는 my_db
데이터베이스에 대해 가져온 권한 을 my_role
역할에 부여합니다.
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],
)
)
다른 역할에 역할 부여하기¶
역할을 다른 역할에 할당하여 역할 간에 “상위-하위” 관계(역할 계층 구조 라고도 함)를 생성할 수 있습니다.
다음 예제의 코드는 my_role
사용자 역할을 ACCOUNTADMIN
시스템 역할에 부여합니다.
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'),
)
)