Identify sensitive data in SuiteCRM schema
User
Analyze the SuiteCRM database schema to identify columns that contain sensitive data, PII, confidential business information, or data revealing sensitive personal information
Cursor
Scope
Below is a concise, security-focused review of SuiteCRM’s provided schema, highlighting columns that are likely to hold sensitive data: PII, SPI (sensitive personal information), credentials/tokens, confidential business data, or free-text fields that may incidentally contain such data.
High‑risk credentials, secrets, tokens
- Users and auth:
users.user_hash
,users.authenticate_id
,users.is_admin
,users.factor_auth
- Email systems:
inbound_email.email_password
outbound_email.mail_smtppass
outbound_email.signature
,outbound_email.signature_html
eapm.password
- OAuth/OIDC:
oauth2clients.secret
,oauth2clients.redirect_url
,oauth2clients.allowed_grant_type
oauth2tokens.access_token
,oauth2tokens.refresh_token
,oauth2tokens.*_expires
,oauth2tokens.token_is_revoked
oauth_tokens.access_token
,oauth_tokens.refresh_token
,oauth_tokens.secret
,oauth_tokens.verify
,oauth_tokens.callback_url
,oauth_tokens.token_ts
,oauth_tokens.consumer
external_oauth_connections.client_id
,external_oauth_connections.client_secret
,external_oauth_connections.access_token
,external_oauth_connections.refresh_token
external_oauth_providers.client_id
,external_oauth_providers.client_secret
,external_oauth_providers.scope
,external_oauth_providers.*_mapping
,external_oauth_providers.*_options
- Other secrets/keys:
email_addresses.confirm_opt_in_token
Contact info and direct identifiers (PII)
- Names and identifiers across core entities:
contacts.* (first_name, last_name, salutation, title, photo, department, reports_to_id, joomla_account_id)
leads.* (first_name, last_name, salutation, title, photo, department)
prospects.* (first_name, last_name, salutation, title, photo, department)
accounts.name
,contacts_users.*
,users.user_name
,users.first_name
,users.last_name
,users.photo
- Phones:
*_phone_*
acrosscontacts
,leads
,prospects
,users
,accounts
(e.g.,phone_mobile
,phone_work
,phone_fax
, etc.)
- Email addresses and relationships:
email_addresses.email_address
,email_addresses.email_address_caps
email_addr_bean_rel.*
(links emails to entities;primary_address
,reply_to_address
)emails.* (name, message_id, uid, from/to status fields)
emails_text.from_addr
,emails_text.reply_to_addr
,emails_text.to_addrs
,emails_text.cc_addrs
,emails_text.bcc_addrs
- Physical addresses:
*_address_*
incontacts
,leads
,prospects
,accounts
(primary/alt/billing/shipping street, city, state, postal code, country)users.address_*
fp_event_locations.* (address, city, state, country, postalcode)
- Location and geo:
jjwg_*
tables and*_cstm
fields:jjwg_maps_lat
,jjwg_maps_lng
,jjwg_maps_address_c
,lat
,lng
,coordinates
- Birthdates and demographics:
contacts.birthdate
,prospects.birthdate
- Online IDs:
meetings.join_url
,meetings.host_url
,meetings.displayed_url
,meetings.external_id
users.messenger_id
,users.messenger_type
emails.mailbox_id
,emails.uid
folders.assign_to_id
- Consent/communication preferences (PII/PD):
contacts.do_not_call
,leads.do_not_call
,prospects.do_not_call
email_addresses.opt_out
,email_addresses.invalid_email
,email_addresses.confirm_opt_in*
users.receive_notifications
Sensitive personal information (SPI) and behavioral
- GDPR/consent fields:
contacts.lawful_basis
,contacts.date_reviewed
,contacts.lawful_basis_source
- Similar fields in
leads
,prospects
- Behavioral/usage tracking:
tracker.* (user_id, session_id, module_name, action, item_id, date_modified)
campaign_log.* (activity_type, activity_date, related_id/type, hits, target info)
emailman.* (campaign/list IDs, send attempts, related_confirm_opt_in)
- Notes and free text (may contain SPI/PII incidentally):
notes.description
cases.work_log
,bugs.work_log
,cases.description
,bugs.description
sugarfeed.link_url
,sugarfeed.link_type
,description
reminders_invitees.*
linking people to remindersmeetings.location
,meetings.description
calls.description
,calls_reschedule.reason
emails_text.description
,emails_text.description_html
,emails_text.raw_source
documents.* names/urls
;document_revisions.* filenames/mime
- Many
MEDIUMTEXT
across modules (reports/workflows/templates) should be treated as potentially sensitive.
Confidential business information (CBI)
- Financials and pricing:
opportunities.amount
,opportunities.amount_usdollar
,currency_id
,probability
,sales_stage
,date_closed
aos_quotes.* totals, discounts, taxes, shipping, currency, expiration, opportunity_id
aos_invoices.* totals, taxes, shipping, currency, number, quote_number/date
aos_contracts.* totals, currency, contract dates, parties
aos_products.cost
,aos_products.price
,aos_products.cost_usdollar
,aos_products.price_usdollar
aos_products_quotes.* pricing, discounts, totals, VAT, currency
aos_line_item_groups.* totals/taxes/currency
fp_events.budget
,project.* status/priority/timing
,project_task.* efforts/durations
- Company and market details:
accounts.annual_revenue
,accounts.employees
,accounts.sic_code
,accounts.rating
,accounts.ownership
,accounts.ticker_symbol
campaigns.* (budget, expected_cost, actual_cost, expected_revenue, objectives, content)
releases.*
,upgrade_history.*
(can leak tooling/versions)
- Contracts, documents, legal:
aos_contracts.* (start/end dates, values, parties)
documents.*
,document_revisions.*
,linked_documents.*
- Product and sales operations:
aos_product_categories.*
,aos_products.*
,aos_pdf_templates.*
projects_*
relation tables (deal structures),projects_products
,projects_opportunities
Health/special category data
- Not explicitly present as dedicated health fields, but free-text fields (cases, notes, emails, surveys) could incidentally contain such data.
Free‑text fields likely to hold sensitive data (audit/log/config content)
- Any
MEDIUMTEXT
or large text fields across modules (examples, non-exhaustive):*_audit.before_value_text
,*_audit.after_value_text
description
,content
,objective
,work_log
,module_path
,parameters
,raw_source
,manifest
,contents
,signature_html
- Reports/Workflows/Templates:
aor_*
,aow_*
,email_templates.*
,aos_pdf_templates.*
fields_meta_data.*
(could reference custom fields of a sensitive nature)user_preferences.contents
,folders.dynamic_query
,job_queue.message
,job_queue.data
Other privacy-impacting relational/behavioral fields
- Attendance/invite status:
meetings_*
,calls_*
,fp_events_*
relations withinvite_status
,accept_status
,email_responded
- Role/group memberships and access control:
securitygroups_*.*
,roles_*.*
,acl_roles_*.*
,acl_actions.*
- Survey data:
surveyquestionresponses.answer
,answer_datetime
,surveyresponses.happiness
- Keys/IDs that can link individuals to activities:
- Widespread
assigned_user_id
,created_by
,modified_user_id
,parent_id
,related_*
across tables
- Widespread
Prioritized remediation suggestions (quick wins)
- Encrypt at rest:
- Credentials/tokens/secrets, passwords, OAuth data, email passwords, SMTP creds.
- Minimize access and mask in UI/exports:
- Phones, emails, addresses, birthdates, geolocation, consent fields, behavioral logs.
- Tighten retention:
tracker
,campaign_log
, email caches, audits, raw email sources.
- Scrub/redact free-text on export and logs:
MEDIUMTEXT
fields in notes, cases, emails, audits, surveys.
- Strengthen consent handling:
- Treat
lawful_basis*
,do_not_call
,opt_out
as protected; enforce policy gates.
- Treat
If you want, I can output a CSV mapping of table.column to sensitivity category to drive DLP rules or masking.