# 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](acces-ssh-chei-angajati.md). Rezumat pentru execuție headless, de pe LXC 171: ```bash # VM-ul (ex. 304 = Win11-Marius) trebuie sa aiba QEMU guest agent activ: ssh root@10.0.20.201 "qm agent ping" # Profilul Bitvise al clientului e in D:\roa\BITVISE\.tlp pe VM. # Executie de comanda pe serverul clientului, prin profil + cheia globala: ssh root@10.0.20.201 "qm guest exec -- 'C:\Program Files (x86)\Bitvise SSH Client\sexec.exe' -profile=D:/roa/BITVISE/.tlp -unat=y -keypairFile=C:/Users/romfast/.ssh/id_ed25519 -cmdQuoted " ``` 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`: ```bash ssh root@10.0.20.201 "qm guest exec -- 'C:\Program Files (x86)\Bitvise SSH Client\sftpc.exe' -profile=D:/roa/BITVISE/.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 \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\\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): ```sql 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 ```sql -- 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).