#!/usr/bin/env python3 """ Example script for granting Snowflake object access to Sigma users """ import sys import os sys.path.append(os.path.dirname(os.path.dirname(__file__))) from sigma_api_client import SigmaAPIClient from snowflake_object_manager import SnowflakeObjectManager from user_management import PermissionType from config import ConfigManager def main(): """ Example: Grant access to Snowflake objects for specific users """ try: # Load configuration config_manager = ConfigManager() sigma_config = config_manager.get_sigma_config() # Initialize API client and managers api_client = SigmaAPIClient(sigma_config) snowflake_manager = SnowflakeObjectManager(api_client) print("Sigma Snowflake Access Management") print("=" * 40) # Example 1: List all Snowflake objects print("\n1. Listing Snowflake objects...") snowflake_objects = snowflake_manager.get_snowflake_objects() if 'error' in snowflake_objects: print(f"Error: {snowflake_objects['error']}") return print(f"Connection: {snowflake_objects['connection']['name']}") for db_name, db_info in snowflake_objects['databases'].items(): print(f"\nDatabase: {db_name}") for schema_name, schema_info in db_info['schemas'].items(): print(f" Schema: {schema_name}") for table in schema_info['tables']: print(f" Table: {table['name']} (ID: {table['dataset_id']})") # Example 2: Grant database access to a user print("\n2. Granting database access...") user_email = "user@example.com" # Replace with actual user email database_name = "PROD" # Replace with actual database name try: results = snowflake_manager.grant_database_access( user_email=user_email, database_name=database_name, permission=PermissionType.VIEW ) print(f"Grant results for {user_email} on database {database_name}:") for result in results: if result.get('success'): print(f" ✓ {result['object']}") else: print(f" ✗ {result['object']}: {result.get('error', 'Unknown error')}") except Exception as e: print(f"Error granting database access: {e}") # Example 3: Grant schema access to multiple users print("\n3. Granting schema access to multiple users...") user_emails = [ "user1@example.com", "user2@example.com" ] objects = [ {"database": "PROD", "schema": "FACTS"}, {"database": "PROD", "schema": "SEGMENT_EVENTS"} ] try: bulk_results = snowflake_manager.bulk_grant_access( user_emails=user_emails, objects=objects, permission=PermissionType.VIEW ) print("Bulk grant results:") for result in bulk_results: print(f" User: {result['user_email']}") print(f" Object: {result['object']}") print(f" Type: {result['object_type']}") print(f" Success: {result.get('result', {}).get('success', False)}") print() except Exception as e: print(f"Error in bulk grant: {e}") # Example 4: Grant specific table access print("\n4. Granting specific table access...") try: table_result = snowflake_manager.grant_table_access( user_email="analyst@example.com", database_name="PROD", schema_name="FACTS", table_name="IDENTITY", permission=PermissionType.EXPLORE ) if table_result.get('success'): print(f"✓ Granted access to {table_result['object']}") else: print(f"✗ Failed to grant access: {table_result.get('error')}") except Exception as e: print(f"Error granting table access: {e}") except Exception as e: print(f"Configuration error: {e}") print("\nPlease run: python config.py") if __name__ == "__main__": main()