diff --git a/docs/drepturi-utilizatori-roa-firme.md b/docs/drepturi-utilizatori-roa-firme.md new file mode 100644 index 0000000..cc72343 --- /dev/null +++ b/docs/drepturi-utilizatori-roa-firme.md @@ -0,0 +1,114 @@ +# 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).