Credora · Roles and AI access

Four roles, four Exasol users. What each can see and do, how the work passes from one role to the next, what Ask Credora can and cannot do for it, and how the MCP server logs in as the role's own user.

1 · Who sees what: each Exasol role reaches a ring of data

1 · Raw outside data: CREDORA_STAGEConsent-based CIBIL, GST and AA replies, purged on time with SHA-256 proofCIBIL_CONSUMER · CIBIL_COMMERCIAL · GST_FILING · AA_ACCOUNTgranted to R_ADMIN, R_DATASCI (read) · written only by R_SVC during a run2 · Sapphire Bank's databases + all resultsVirtual schemas push each query down to RDS live; nothing is copiedVS_CBS (Oracle core banking) · VS_CIF (MySQL customer master) · VS_LOS (PostgreSQL loans)CREDORA: DECISIONS · SCORES · FEATURES · MODEL_REGISTRY · RUN_LOG · CONFIG · all viewsRM_ASSIGNMENT · LOAN_STATUS_LOG · RUN_PUBLISH (written only by R_SVC)granted to R_ADMIN, R_DATASCI, R_LOANOPS (read)3 · Relationship manager: only her assigned rowsRow-level security in Exasol: views join RM_ASSIGNMENT on EXA_USER = CURRENT_USERV_RM_DECISIONS · V_RM_COMPANY (full PAN, GSTIN) · V_RM_FEATURES · V_RM_SCORESV_RM_ASSIGNMENT · V_RM_LOAN_STATUS · CONFIG · RUN_LOGV_LATEST_* and CREDORA_SEM.PORTFOLIO, filtered to her companiespublished runs only (RUN_PUBLISH) · no grant on DECISIONS or SCORESgranted to R_RM; one Exasol user per manager (demo: CREDORA_RM = RM001)outer roles read the tables directly; the RM reads only her rows, at full detailAdminCREDORA_ADMIN · R_ADMIN+ SELECT ANY DICTIONARYData scientistCREDORA_DATASCI · R_DATASCIsame reads as adminLoan operationsCREDORA_LOANOPS · R_LOANOPSno CREDORA_STAGERelationship managerCREDORA_RM · R_RMSubhashree Mohanty, RM001Widest reach at the top. Admin and data scientistread the same data; they differ in what they may do.Grants: exasol/sql/07_security.sql,13_rm_row_security.sql, 11_latest_run_views.sql

2 · One Ask Credora question: the role travels all the way into Exasol

123451 role in the login token · 2 role may ask · 3 on topic · 4 MCP server starts as the role user · 5 SQL runs under that user's grantsOUTno role passwordtool listtool callsinside grantsoutside grantsscreensjobsSigned-in personadmin · datasciloanops · rmFastAPI backendchecks the role (CAN)routes/ai.pyTopic gateClaude answers IN / OUT_on_topic(), no toolsexasol_login(role)role -> CREDORA_<ROLE>assistant.pyexasol-mcp-server2.3.0 over stdiowrites switched offExasolchecks R_<ROLE> grantson every statementRefused, no query"Ask Credora only answersabout Credora's analysis"CREDORA_MCP · R_MCPread-only fallbackresults + masked viewClaudeclaude-sonnet-5-5picks tools, writes SQLRows back to Claudeanswer + every SQLshown to the personExasol refusesinsufficient privilegesClaude says role can't see itEvery web screen reads as the same role userexa.ROLE_USER: the database enforces what each screen showsRM: Exasol returns only her assigned rows (V_RM_*)Jobs run as CREDORA_SVC · R_SVCanalysis, publish, assignments, loan status, CONFIG,activation, purge, memo UDF; no person logs inThe prompt tells Claude what its role may read;Exasol's grants enforce it. A wrong prompt or ajailbreak cannot widen what the AI can read.

3 · The hand-off: run, publish, assign, work, track

1234propose policy, request activationapproved policy: run + publishData scientistRun analysis: a draftCREDORA.RUN_ANALYSIS()as CREDORA_SVCPublishCREDORA.RUN_PUBLISH: officialrun for loan operations,RM views and V_LATEST_*Loan operationsAssign to RM, single or bulkCREDORA.RM_ASSIGNMENT(CIF, RM, EXA_USER)Relationship managersees only her rows (V_RM_*)negotiates in the limit;above it, loan ops checksLoan statusCREDORA.LOAN_STATUS_LOGtracked by admin, datascientist, loan operationsAdmin: Approvalspolicy proposals, modelactivations; never own ones1 publish · 2 hand to loan operations · 3 assign · 4 log Contacted, Negotiating, Loan taken, In progress, Disbursed or Not interested, with a noteEvery step is audited: RUN_PUBLISH, POLICY_*, MODEL_ACTIVATION_*, ASSIGN_RM, LOAN_STATUS

4 · Each role: sees, can do, cannot, and what its AI can and cannot do

Admin · CREDORA_ADMIN

  • Sees everything, read-only, drafts included: results, the three bank databases, raw CIBIL/GST/AA, loan status, audit
  • Can do bank manager: generate, append and purge mock data; approve or reject policy proposals and model activations; audit, sources
  • Cannot run the analysis, train, what-if, assign companies, negotiate, sanction, decide own requests
  • AI can join Oracle + MySQL + PostgreSQL in one query, read raw API data, run log, semantic view
  • AI cannot write anything, answer off-topic questions

Data scientist · CREDORA_DATASCI

  • Sees same data as admin, read-only, drafts included; loan status read-only
  • Can do run the analysis and publish it to loan operations, train models and request activation, what-if and propose policy
  • Cannot activate a model or change policy without the admin, generate data, assign, negotiate, sanction
  • AI can model registry (AUC, Gini, features), features vs grades, past loans in VS_LOS, raw API data
  • AI cannot write anything, answer off-topic questions

Loan operations · CREDORA_LOANOPS

  • Sees published runs: all results and the three bank databases; not the raw outside data; loan status
  • Can do assign companies to relationship managers (single, bulk, reassign), every report, verify and sanction escalations
  • Cannot run the analysis, see drafts, generate data, train, what-if, negotiate
  • AI can KYC from the customer master joined with decisions, core-banking credits, hard-fail counts
  • AI cannot read CREDORA_STAGE (Exasol refuses), write anything

Relationship manager · CREDORA_RM

  • Sees only the companies assigned to her, at full detail: report, features, unmasked PAN and GSTIN
  • Can do negotiate within the limit (above it, escalated), log loan status (Contacted to Disbursed, or Not interested), credit memo
  • Cannot see any other company, bank databases, raw API data, run, publish or assign anything
  • AI can headroom, lowest ROI and RAROC, her companies by loan status, through the V_RM_* views
  • AI cannot read any other company: Exasol filters the rows on CURRENT_USER and refuses DECISIONS itself