Overview
Formal integrates with Business Intelligence applications to enable end-user identity propagation. This ensures that queries from BI tools are attributed to the actual end-user rather than a shared machine user, enabling accurate auditing and per-user policy enforcement.How It Works
When you set up a BI integration:- Sync: Formal Control Plane synchronizes with your BI application to fetch user identities
- Map: External IDs are automatically assigned to your Formal users
- Propagate: When BI tool users execute queries, their identity is passed to the Connector
- Enforce: Policies evaluate based on the end-user, not the BI tool’s machine user
The Connector automatically fetches user information from the Control Plane,
so no additional configuration is needed in your Connector deployment.
Supported BI Applications

- Metabase
- Looker
- Tableau
- Power BI
- Custom applications (via SQL commenter)
Setup
Metabase
1
Navigate to BI Integrations
Go to BI Applications in the
Formal console
2
Add Integration
Click Add New App
3
Select Metabase
Choose Metabase from the list
4
Enter Credentials
- Server Hostname: Your Metabase instance URL - Admin Username: Metabase admin username - Admin Password: Metabase admin password
5
Allow-list IPs
If your Metabase instance has IP restrictions, allow-list these IPs: -
52.18.34.8 - 52.51.88.92 - 54.72.150.112
When connecting Metabase, the admin user will receive a “We’ve Noticed a New
Metabase Login” email alert from a location in Ireland (where Formal’s workers
run).
Terraform
Looker
Looker supports end-user identity propagation via JDBC connection parameters.1
Open Database Connection
Go to Admin → Connections in Looker
2
Edit Connection
Select your database connection
3
Add Parameter
In the “Additional Params” section, add:
4
Save
Save the connection settings
Custom Applications
For internal applications or custom BI tools, use the formal-sqlcommenter library to propagate end-user identity.Python/Django
Install the package:Configuring External IDs
External IDs map end-users in external systems to Formal users.1
Create Formal User
Ensure a Formal user exists for the BI tool user
2
Add External ID
In the Formal user details page, add the user’s ID from the BI tool For
example, if Katie’s Looker user ID is
12345, add 12345 as an external ID
to Katie’s Formal user3
Verify
Check Logs to confirm queries are
attributed to the correct end-user
Automatic Sync
For Metabase and other integrated BI tools, Formal automatically:- Fetches user lists from the BI application
- Matches them to Formal users by email
- Assigns external IDs
Policy Examples
End-User Access Control
Per-User Data Masking
Audit BI Tool Access
Monitoring
View End-User Attribution
- Navigate to Logs
- Filter by machine user (BI tool)
- Check “End User” column to see attributed end-users
- Verify queries are attributed correctly
Session Details
In Sessions, you’ll see:- User: Machine user (BI tool)
- End-User: Actual human user in the BI tool
- Queries: Full query history with end-user attribution
Troubleshooting
Queries not attributed to end-users
Queries not attributed to end-users
Possible causes: - BI integration not set up - External IDs not mapped -
BI tool not passing end-user information Solution: 1. Verify BI
integration is active in Formal console 2. Check Formal user has external ID
matching BI tool user ID 3. For Looker, verify JDBC parameters are
configured 4. Review Connector logs for end-user extraction errors
Metabase sync not working
Metabase sync not working
Possible causes: - Incorrect admin credentials - IP allow-list blocking
Formal workers - Metabase instance not reachable Solution: 1. Verify admin
credentials are correct 2. Allow-list Formal worker IPs (see above) 3. Check
Metabase logs for authentication attempts 4. Ensure Metabase instance is
publicly accessible or VPN-accessible by Formal
Policies not evaluating for end-users
Policies not evaluating for end-users
Possible causes: - Policy references
input.user instead of
input.end_user - End-user not in expected groups Solution: 1. Update
policies to use input.end_user for BI tool queries 2. Verify end-user’s
group memberships in Formal console 3. Test policy in dry-run mode and
review logsBest Practices
Always Use End-User Policies
Always Use End-User Policies
For BI tools, write policies that evaluate
input.end_user attributes, not
input.user (which is the machine user).Implement Row-Level Security
Implement Row-Level Security
Use end-user attributes to filter results, ensuring each BI user only sees
data they’re authorized to access.
Audit BI Access
Audit BI Access
Regularly review logs to ensure end-user attribution is working and no queries
are misattributed.
Sync Regularly
Sync Regularly
For integrated BI tools, Formal syncs user lists automatically. For custom
apps, update external IDs when users are added/removed.