Skip to content

docs: add skill for auditing Snowflake password users - #118

Open
jirkasemmler wants to merge 1 commit into
mainfrom
jirka/skill-snowflake-password-audit
Open

docs: add skill for auditing Snowflake password users#118
jirkasemmler wants to merge 1 commit into
mainfrom
jirka/skill-snowflake-password-audit

Conversation

@jirkasemmler

Copy link
Copy Markdown
Contributor

Changes:

  • New project skill .claude/skills/auditing-snowflake-password-users/ capturing the workspace audit we have now run four times (Carvago SUPPORT-16608, SLSP DMD-1565, Shoptet DMD-1929, FL Service DMD-1992).

What it actually encodes, beyond the happy path:

  • KBDB vs BYODB first. It decides whether we can dump the Snowflake users ourselves. Getting it wrong sends the customer chasing a Trust Center role they will never get.
  • The component-lifecycle table. Whether a surviving workspace is our leftover or the customer's infrastructure depends on the component - not on "is it a sandbox", and not on "is it the only workspace of its configuration". Transformation workspaces are per-run, so a survivor is a leftover; a writer's staging workspace is permanent, and dropping it breaks the writer. Both readings were got wrong in DMD-1992 before the data settled it, so both are written down as named failure modes.
  • Traps in the data. A dump filtered to TYPE = 'LEGACY_SERVICE' makes absence meaningless (a missing workspace is on another auth type, not an orphan). A tight cluster of user creation dates is a backend migration re-provisioning them, which truncates login history - so "never logged in" means "unused since then". LAST_SUCCESS_LOGIN says nothing about a staging workspace, because the unload runs as the storage role.
  • A branch for having no Snowflake access, since that is not guaranteed: loginType alone still answers the deprecation question, with a table of what is lost and what replaces it.

Two things a reviewer should know:

  1. Depends on feat: report workspaceId, backend and loginType in the organization workspace report #116. The skill treats loginType from manage:describe-organization-workspaces as the backbone, and especially so in the no-Snowflake-access branch. That column only exists once feat: report workspaceId, backend and loginType in the organization workspace report #116 lands. Merge that first.
  2. Not tested with subagents. The writing-skills methodology wants baseline pressure scenarios run against fresh agents before the skill is written, to see how they fail without it. That was not done here - this is written from what we hit in practice. So it is a good starting point rather than a verified one, particularly the lifecycle table, which is exactly where I made both mistakes myself.

Additional notes

⚠️ Don't forget to release new version after merge

Docs only - no PHP touched, so no effect on the pre-existing phpstan failures on main.

🤖 Generated with Claude Code

We have run this audit four times now (Carvago SUPPORT-16608, SLSP DMD-1565,
Shoptet DMD-1929, FL Service DMD-1992) and the same things went wrong more than
once, so the judgement is worth writing down rather than rediscovering.

The central part is the component-lifecycle table. Whether a surviving workspace
is our leftover or the customer's infrastructure depends on the component, not on
whether it is a sandbox and not on how many workspaces its configuration owns:
transformation workspaces are per-run and a survivor is a leftover, whereas a
writer's staging workspace is permanent and dropping it breaks the writer. Both
of those were got wrong in DMD-1992 before the data settled it.

Also records the traps: a dump filtered to TYPE = 'LEGACY_SERVICE' makes absence
meaningless, a tight cluster of user creation dates is a backend migration that
truncates login history, and LAST_SUCCESS_LOGIN says nothing about a staging
workspace because the unload runs as the storage role.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant