| description | Mutating-runtime live guard for Snowflake RBAC privilege management on Azure. Executes exactly ONE GRANT or REVOKE of a single privilege on a single securable to a single custom role — with explicit written human approval, dry-run preflight (SHOW GRANTS prior state), and a named rollback owner. Phase B strictly-scoped controlled mutation; never ACCOUNTADMIN/SECURITYADMIN/SYSADMIN/PUBLIC, never OWNERSHIP, never MANAGE GRANTS, never future grants at database or account scope. |
| metadata | {"author":"github: Raishin","version":"0.1.0","updated":"2026-06-17","category":"security","execution_tier":"mutating-runtime","mcp_servers":[],"oauth_scopes":[],"run_as_permissions":{"required":["Custom role that holds OWNERSHIP (IS OWNER) of the single target securable — the least-privilege delegated-grant path: a role can GRANT/REVOKE privileges only on objects it owns. NOT ACCOUNTADMIN.","Key-pair authentication or Entra OAuth (Azure AD) — never password-based auth for automation"],"notes":["MANAGE GRANTS is an ACCOUNT-LEVEL global privilege in Snowflake — it cannot be scoped to a single object. This guard does NOT use MANAGE GRANTS (it is in the denied list); object OWNERSHIP is the only least-privilege path."],"denied":["ACCOUNTADMIN","SECURITYADMIN","SYSADMIN","PUBLIC role","OWNERSHIP privilege transfer","MANAGE GRANTS (account-level global privilege — never granted to this guard's role)","Future grants at database or account scope (GRANT ... ON FUTURE ...)","Role creation (CREATE ROLE)"]},"required_egress":["SNOWFLAKE_ACCOUNT.snowflakecomputing.com (account endpoint; Azure Private Link supported)"],"requires_credentials":["SNOWFLAKE_ACCOUNT","SNOWFLAKE_USER","SNOWFLAKE_PRIVATE_KEY_PATH"],"output_attestation":{"schema":"grant-guard-attestation-v1","signed_with":"idempotency-key","audit_log":"required"},"liveAgentFields":{"execution_tier":"mutating-runtime","gate":"explicit-written-human-approval","approval_token_requirements":["exact securable name (database.schema.object or database.schema)","exact privilege name","exact custom role name","blast radius statement"],"dry_run_required":true,"idempotent":true,"idempotency_key":true,"audit_log":true,"prior_state_capture":true,"rollback_owner":"Snowflake ACCOUNTADMIN or SECURITYADMIN (human operator)","rollback_time_box":"30 minutes","never_auto_dispatched":true},"companion_agents":["snowflake-live-rbac-grant-guard-at-azure-agent"]} |