Report Security & Access Control
Why Report Security Matters
Reports contain sensitive business data (revenue, salaries, customer info) that must be protected.
Security Risks
- Data Leakage: Sales rep sees competitor pricing (shouldn't have access)
- Compliance Violations: GDPR/CCPA - unauthorized access to personal data (fines up to €20M)
- Competitive Intelligence: Employee downloads customer list before leaving company (IP theft)
- Privacy: HR report shows salaries (only HR should see, not entire company)
Security Layers
Layer 1: User Authentication
- Login Required: Must authenticate before accessing any reports
- SSO Integration: Active Directory, LDAP, SAML (corporate credentials)
- Session Timeout: 30-min inactivity → Auto-logout (prevent unauthorized access)
Layer 2: Role-Based Access
- Roles: Sales Rep, Sales Manager, Sales VP, Admin
- Permissions: Each role has specific report access
- Sales Rep: My Pipeline, My Activities
- Sales Manager: Team Pipeline, Team Activities, Rep Performance
- Sales VP: Company Pipeline, Revenue Dashboard, Win Rate Trends
- Admin: All Reports + User Management
- Least Privilege: Grant minimum access needed (rep doesn't need company-wide data)
Layer 3: Row-Level Security
Users see only data they're authorized to view (even within same report).
Example: Territory-Based Access
- Report: "Opportunity Pipeline" (company-wide report)
- Northeast Manager: Runs report → Sees only Northeast opportunities (WHERE Territory = 'Northeast')
- Southeast Manager: Runs same report → Sees only Southeast opportunities (WHERE Territory = 'Southeast')
- VP: Runs same report → Sees ALL territories (no filter)
- Implementation: Security filter auto-applied based on user's profile (invisible to user)
Layer 4: Column-Level Security
- Scenario: Opportunity report shows Revenue, Cost, Margin
- Sales Rep: Sees Revenue only (Cost, Margin columns hidden)
- Sales Manager: Sees Revenue, Margin (Cost hidden)
- Finance: Sees all columns (Revenue, Cost, Margin)
Configuring Report Security
Step 1: Define Security Roles
- Navigate to Administration → Security → Roles
- Create role: "Sales Manager"
- Set permissions:
- Can run: Team reports
- Can create: Custom reports (on own data)
- Can share: Reports with team members
- Cannot: Delete system reports, Access admin reports
Step 2: Assign Users to Roles
- User: John Smith
- Role: Sales Manager
- Territory: Northeast
- Result: John sees only Northeast data in team reports
Step 3: Configure Row-Level Security
Report: Opportunity Pipeline
Security Filter:
IF User.Role = "Sales Rep" THEN
WHERE Opportunity.Owner = CurrentUser.Id
ELSE IF User.Role = "Sales Manager" THEN
WHERE Opportunity.Owner IN (CurrentUser.TeamMembers)
ELSE IF User.Role = "Sales VP" THEN
-- No filter, see all data
Step 4: Configure Column Visibility
- Revenue Column: Visible to: All Users
- Cost Column: Visible to: Finance, Executives (hidden from Sales)
- Margin Column: Visible to: Sales Manager, Finance, Executives
- Commission Column: Visible to: Owner only (each rep sees own commission, not others')
Report Sharing Controls
Sharing Levels
- Private: Only creator can view (default for new custom reports)
- Team: Creator + team members (share with Northeast sales team)
- Department: All Sales users (company-wide department access)
- Public: All authenticated users (company-wide, use sparingly)
- Specific Users: Choose individuals (share with VP + 2 directors)
Sharing Workflow
- User creates custom report "My Custom Pipeline Analysis"
- Initially: Private (only creator sees it)
- Click Share button
- Select: "Share with Team" (5 team members)
- Set permissions:
- Can View: Yes (team members can run report)
- Can Edit: No (only creator can modify definition)
- Can Share: No (team members can't reshare)
- Team members see report in "Shared with Me" folder
Data Masking & Redaction
Sensitive Field Masking
- SSN: Display "***-**-1234" (last 4 digits only)
- Credit Card: Display "****-****-****-5678"
- Email: Display "j***@company.com" (partial masking)
- Salary: Display "$XX,XXX" (only HR sees actual $85,000)
Dynamic Masking
Example: Contact Phone Number
- Account Owner: Sees full number "555-123-4567" (needs to call customer)
- Other Sales Reps: See masked "555-***-****" (shouldn't poach accounts)
- Finance: See masked (don't need customer contact info)
- Implementation: Database function masks data based on user context
Audit Logging
What to Log
- Report Execution: User, Report Name, Timestamp, Parameters
- Data Exports: User downloaded 10,000 contacts to CSV (audit trail)
- Report Sharing: User A shared report with User B (who has access)
- Failed Access: User tried to access restricted report (security breach attempt)
- Data Changes: User modified report definition (version history)
Audit Report Example
| Timestamp | User | Action | Report | Result |
|---|---|---|---|---|
| Nov 5, 9:15 AM | john.smith | Run Report | Team Pipeline | Success (247 rows) |
| Nov 5, 9:18 AM | john.smith | Export to Excel | Team Pipeline | Success (247 rows) |
| Nov 5, 9:22 AM | jane.doe | Run Report | Executive Dashboard | Failed (Access Denied) |
Alert: Jane Doe tried to access Executive Dashboard (not authorized) → Notify security admin
Compliance Requirements
GDPR (EU Regulations)
- Right to Access: Customers can request all data stored about them → Generate report of customer's data
- Right to Erasure: Customer requests deletion → Reports exclude deleted customer data
- Data Minimization: Only collect/report necessary data (don't include personal data if not needed)
- Consent Tracking: Report shows which customers consented to marketing (compliance check)
CCPA (California Regulations)
- Disclosure: Report must show what personal data is collected (transparency)
- Opt-Out: Customers can opt-out of data sale → Reports flag opted-out customers
SOX (Financial Regulations)
- Audit Trail: All revenue reports must have audit log (who ran, when, what data)
- Segregation of Duties: Finance creates reports, but IT approves (no single point of control)
- Data Integrity: Reports must match source data (validation checks)
Best Practices
- Regular Access Review: Quarterly audit - remove access for departed employees, reassign reports
- Minimal Exposure: Default to Private (user explicitly shares if needed)
- Monitor Exports: Alert if user exports > 10,000 rows (unusual activity)
- Watermarking: Add "Confidential - John Smith - Nov 5, 2025" footer to PDFs (track leaks)
- Training: Educate users on data handling (don't email sensitive reports to personal email)
- Encrypt Exports: Password-protect Excel files (prevent unauthorized access if file shared)
- Retention Policies: Auto-delete audit logs after 7 years (compliance + storage management)
- Incident Response: If breach detected (unauthorized access) → Immediate alert to security team, lock user account
Example: HR Salary Report Security
Requirements:
- Report: "Employee Compensation" (Name, Department, Title, Salary, Bonus)
- Access: HR Director, Compensation Team (5 users total)
- Security:
- Role-Based: Only "HR" role can access (Sales/Finance blocked)
- Row-Level: HR Manager sees own department only, HR Director sees all
- Column-Level: "Bonus" column visible to Director only
- Masking: SSN always masked (***-**-1234)
- Sharing: Private (no sharing allowed, even within HR)
- Export: Excel export disabled (must view in Siebel only, prevent file leaks)
- Audit: Every execution logged with full details (timestamp, user, filters)
- Alerts: If non-HR user attempts access → Email to CISO immediately