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>
This commit is contained in:
114
docs/drepturi-utilizatori-roa-firme.md
Normal file
114
docs/drepturi-utilizatori-roa-firme.md
Normal file
@@ -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 <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`:
|
||||
|
||||
```bash
|
||||
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):
|
||||
|
||||
```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).
|
||||
Reference in New Issue
Block a user