Skip to content

Authorization Reference

dbward uses role-based access control (RBAC) with database and environment scoping.

RolePermissionsScope
admin* (all)All databases, all environments
developerrequest.create, request.create_select, request.view, request.cancel, request.resume, result.view, token.revoke_ownAll
readonlyrequest.create_select, request.view, result.viewAll
agent-defaultagent.poll, agent.claim, agent.heartbeat, agent.submit_resultAll

Built-in roles cannot be redefined in config.

[[auth.roles]]
name = "dba"
permissions = ["request.create", "request.approve", "request.view", "result.view", "audit.view"]
databases = ["app", "analytics"] # Scope to specific databases (empty = all)
environments = ["production", "staging"] # Scope to environments (empty = all)

Custom role permissions only apply within the specified databases and environments scope. If both are empty, the role applies globally.

Groups are named collections of users, used as approvers in workflow steps:

[[auth.groups]]
name = "backend-team"
members = ["alice", "bob", "charlie"]
[[auth.groups]]
name = "dba-team"
members = ["dave", "eve"]

Groups are referenced in workflows:

[[workflows.steps.approvers]]
group = "dba-team"
min = 1

Bind roles to users or groups:

[[auth.role_bindings]]
role = "dba"
subjects = ["alice", "dave"]
groups = ["dba-team"]

All members of bound groups inherit the role. subjects are raw subject IDs (not user: prefixed).

Assign a role to all authenticated users who don’t have an explicit binding:

[auth]
default_role = "developer"
PermissionDescription
request.createCreate requests (DML, migrations)
request.create_selectCreate SELECT-only requests
request.approveApprove requests
request.resumeResume approved requests
request.cancelCancel own requests
request.viewView requests and status
request.break_glassUse emergency bypass
request.break_glass_ddlAllow DDL in emergency mode (requires request.break_glass)
PermissionDescription
result.viewView query results
PermissionDescription
audit.viewView own audit events
audit.view_allView all audit events
PermissionDescription
workflow.manageCreate/delete workflows
policy.manageManage execution/result/notification policies
role.manageCreate/delete custom roles via API
webhook.manageCreate/update/delete webhooks
user.manageSuspend/activate users
token.manageCreate/revoke any token
token.revoke_ownRevoke own tokens
metrics.viewAccess /metrics endpoint
PermissionDescription
agent.pollPoll for jobs
agent.claimClaim jobs
agent.heartbeatSend heartbeats
agent.submit_resultSubmit execution results
PermissionDescription
*All permissions (admin only)

Selectors identify principals in workflow approvers and result access:

FormatExampleMatches
role:<name>role:dbaUsers with the named role
group:<name>group:backend-teamMembers of the named group
user:<subject>user:aliceSpecific user by subject ID
requesterrequesterThe user who created the request

Map OIDC claims to dbward roles:

[[auth.oidc.role_mappings]]
claim = "groups"
value = "engineering"
role = "developer"
[[auth.oidc.role_mappings]]
claim = "groups"
value = "platform"
role = "admin"