Files
ROMFASTSQL/docs/drepturi-utilizatori-roa-firme.md
Claude Agent f25a8157fa docs: acordare drepturi utilizator pe firme in ROA la un client
Conectare headless (fara RDP) prin Bitvise de pe VM 303/304, modelul de
drepturi CONTAFIN_ORACLE (NOM_FIRME/DEF_UTIL_GRUP/PACK_DREPTURI), cu
precedentul Conpress/Sofronie Mihaela ca exemplu lucrat.

Co-Authored-By: Claude Agent <noreply@anthropic.com>
2026-09-03 16:45:07 +00:00

5.5 KiB

Acordare drepturi utilizator pe firme, în ROA, la un client

Scop: dai unui utilizator existent acces la firme (companii) suplimentare într-un produs ROA (ROACONT etc.) instalat la un client, fără RDP — direct din LXC 171 prin VM 304/303 + Bitvise.

1. Conectare la serverul Oracle al clientului (fără RDP)

Contextul general (Bitvise, VM 303/304, cheia id_ed25519) e documentat în acces-ssh-chei-angajati.md. Rezumat pentru execuție headless, de pe LXC 171:

# VM-ul (ex. 304 = Win11-Marius) trebuie sa aiba QEMU guest agent activ:
ssh root@10.0.20.201 "qm agent <vmid> ping"

# Profilul Bitvise al clientului e in D:\roa\BITVISE\<client>.tlp pe VM.
# Executie de comanda pe serverul clientului, prin profil + cheia globala:
ssh root@10.0.20.201 "qm guest exec <vmid> -- 'C:\Program Files (x86)\Bitvise SSH Client\sexec.exe' -profile=D:/roa/BITVISE/<client>.tlp -unat=y -keypairFile=C:/Users/romfast/.ssh/id_ed25519 -cmdQuoted <comanda Windows>"

Observatii:

  • -cmdQuoted + argumente ca simple cuvinte (fara ghilimele suplimentare) e singurul mod care supravietuieste lantul de citare bash → ssh → qm guest exec → cmd.exe remote. Cai cu spatii merg daca sunt UN singur argument (ex. calea catre sexec.exe); pentru restul comenzii, foloseste / in loc de \ unde se poate (Windows accepta ambele).
  • Fara -keypairFile explicit, conectarea pica cu Authentication aborted: User input is disabled — profilul singur nu are credentiala incarcata in mod headless.
  • Serverul clientului accepta doar clienti SSH Bitvise (whitelist pe client software); ssh/openssh standard e respins cu Client software or version not permitted.
  • Daca serverul da EOF la conectare, probabil e ban temporar de IP dupa prea multe incercari esuate intr-un interval scurt — se reia mai tarziu (vezi precedent la acces-ssh-chei-angajati.md, sectiunea conpress).

Transfer de fisiere (script SQL etc.)

sexec nu accepta comenzi multi-linie usor prin citare imbricata. Cel mai simplu: scrii scriptul local pe VM (via qm guest exec ... powershell -Command "[IO.File]::WriteAllBytes(...)" cu continutul in base64), apoi il urci pe serverul clientului cu sftpc:

ssh root@10.0.20.201 "qm guest exec <vmid> -- 'C:\Program Files (x86)\Bitvise SSH Client\sftpc.exe' -profile=D:/roa/BITVISE/<client>.tlp -unat=y -keypairFile=C:/Users/romfast/.ssh/id_ed25519 -cmd='put C:/Users/Public/script.sql script.sql'"

Nu folosi variabile de mediu Windows (%TEMP% etc.) in calea destinatie — sftpc nu le expandeaza, creeaza literal un folder cu numele %TEMP%. Pune fisierul cu nume relativ simplu (landeaza in home-ul contului virtual Bitvise, ex. C:\Users\BvSsh_VirtualUsers\).

2. Gasirea conexiunii Oracle (TNS) pe serverul clientului

type <ORACLE_HOME>\network\admin\tnsnames.ora

(ORACLE_HOME/TNS_ADMIN aflate cu echo %TNS_ADMIN% prin acelasi sexec.) De regula service name-ul e ROA, port 1521, host = numele local al masinii (DESKTOP-...).

Parola standard pentru schema CONTAFIN_ORACLE (centralizeaza userii si drepturile pe toate firmele clientului): ROMFASTSOFT.

3. Modelul de drepturi ROA (schema CONTAFIN_ORACLE)

Sursa: D:\roa\<produs>\COMUN\Drepturi utilizatori\drepturi_utilizatori.sql din orice working copy ROA (identic in principiu intre produse). Tabele relevante:

  • UTILIZATORI(ID_UTIL, UTILIZATOR) — userii aplicatiei.
  • NOM_FIRME(ID_FIRMA, FIRMA, SCHEMA, COD_FISCAL, STERS, ...) — firmele clientului. Pot exista mai multe randuri cu acelasi nume (istoric/duplicate) — verifica intotdeauna STERS=0 inainte sa alegi ID_FIRMA.
  • DEF_GRUP(ID_GRUP, GRUP, STERS) — grupuri de drepturi.
  • DEF_UTIL_GRUP(ID_DUG, ID_UTIL, ID_GRUP, ID_FIRMA, ID_UTILOP, DATAORA, STERS) — leaga utilizator + grup + firma. Un user poate avea grupuri diferite pe firme diferite.

Acordarea se face doar prin procedura din PACK_DREPTURI (nu INSERT direct — procedura verifica duplicate si arunca RAISE_APPLICATION_ERROR daca userul are deja drepturi acolo):

BEGIN
  pack_drepturi.adauga_drepturi_firma(
    p_id_util,    -- ID_UTIL tinta
    p_id_grup,    -- ID_GRUP de aplicat (de regula: acelasi grup pe care userul il are deja pe o firma similara)
    p_id_firma,   -- ID_FIRMA (verificat STERS=0)
    p_id_utilad   -- ID_UTIL care face operatia; -1 = ADMIN (cont special, potrivit pentru interventii de suport)
  );
  COMMIT;
END;
/

Alte proceduri utile din acelasi pachet: sterge_drepturi_firma(ID_DUG, ID_UTILOP) (soft delete, seteaza STERS=1), modifica_drepturi_firma(...).

Interogari de verificare, inainte de modificare

-- gaseste userul
SELECT id_util, utilizator FROM utilizatori WHERE UPPER(utilizator) LIKE '%NUME%';

-- gaseste firma (atentie la duplicate STERS=1)
SELECT id_firma, firma, schema, cod_fiscal, sters FROM nom_firme WHERE UPPER(firma) LIKE '%NUME_FIRMA%';

-- ce grup are userul deja, pe ce firme (alege un grup de referinta de aici)
SELECT a.id_dug, a.id_firma, c.firma, a.id_grup, b.grup
FROM def_util_grup a
LEFT JOIN def_grup b ON a.id_grup = b.id_grup
LEFT JOIN nom_firme c ON a.id_firma = c.id_firma
WHERE a.id_util = :id_util AND a.sters = 0;

Precedent

2026-09-03: acordat acces SOFRONIE MIHAELA (ID_UTIL 236, client Conpress Romfast) pe 3 firme noi, grup XENOTI (ID_GRUP 54, acelasi pe care-l avea deja pe firma Xenoti SRL): Avangarde Luxury SRL (126), Cazare Constanta-Mamaia SRL (124, singura activa din 4 duplicate), Nicolas House Mamaia SRL (125).