Pavel Chistov. Bezbedan režim rada 1c siguran režim je podešen, rad je zabranjen

Prilikom pokretanja programa Document Upload kao običan korisnik, pojavljuje se greška "Postavljen je siguran način rada. Operacija je zabranjena."

Ova poteškoća nastaje jer Nema dovoljno prava za pokretanje eksterne obrade. Da biste konfigurirali prava pristupa, prijavite se u bazu podataka u 1C Enterprise modu u ime Administrator i idite u sekciju Postavke korisnika i prava / Pristup profilima grupe, kliknite Za kreiranje grupe.

Unesite naziv grupe i označite okvire za uloge koje su dostupne korisnicima ove grupe -

  • Interaktivno otvaranje eksternih izvještaja i obrada
  • Korištenje dodatnih izvještaja i obrada

Kliknite Sačuvaj i zatvori


Vratite se na meni Korisnici i sa liste izaberite zaposlenog koji će raditi u programu Document Upload. Kliknite na Dozvole. Na listi profila izaberite prethodno kreirani profil. Kliknite Zapiši.


Kako bi korisnici mogli da započnu obradu, preporučuje se dodavanje Document Loading na listu eksterne obrade. Da biste to učinili u meniju Administracija / Štampani obrasci i obrada / Dodatni izvještaji i obrada kreirajte novu obradu. Odredite putanju do datoteke "Download Documents.epf" i dodijelite ime. Odredite lokaciju obrade u meniju, odakle korisnik može kasnije da je pokrene, na primer, izaberite meni Imenici

Klikom na stavku Brzi pristup označavate koji korisnici imaju pristup obradi:


Nakon podešavanja, kliknite Sačuvaj i zatvori. Za početak obrade, korisnici će samo trebati ponovo ući u bazu podataka i otvoriti je iz pristupnog menija (u primjeru - Imenici) i kliknuti Izvrši.


Otvori Meni - Sve funkcije.... i na listi pronađite opciju "Sigurnosni profili se koriste".


Samo poništite opciju "Sigurnosni profili se koriste".


Nakon toga, program će se uspješno pokrenuti.

Činjenica je da se pri korištenju klijent-server verzije 1C, vanjska obrada/izvještaji otvaraju u sigurnom načinu rada, u kojem je korištenje privilegovanog načina rada zabranjeno. A privilegirani način rada se vrlo često koristi u tipičnim konfiguracijama: generiranje štampanih obrazaca, razne servisne provjere (registracija razmjena) itd. Kao rezultat toga, čak i korištenjem redovnog izvještaja o sistemu kontrole pristupa bez obrasca (podrazumevano se koristi opći obrazac "ReportForm") i spremanja prilagođenih postavki izvještaja (u odgovarajući direktorij), dobićete grešku o nedovoljnom pristupu prava na razne konstante i parametre sesije koji se koriste u službene svrhe nakon linije SetPrivilegedMode(True) ;

“Ispravno” rješenje bi bilo povezivanje eksterne obrade i izvještaja preko BSP mehanizama “Dodatni izvještaji i obrada” uz onemogućavanje sigurnog načina rada ili dodavanje dozvola (po mom mišljenju, od BSP verzije 2.2.2.1). Ali ako je iz nekog razloga potrebno koristiti eksterne datoteke za izvještavanje/obradu, tada možete konfigurirati sigurnosni profil klastera koji se koristi kao sigurnosni profil sigurnog načina za određenu infobazu.

Odmah bih želio napomenuti da ova opcija nije poželjna, ali zbog različitih okolnosti može se koristiti u tako pojednostavljenom obliku. Na primjer, imam nekoliko baza podataka u različitim gradovima, zajedničku lokalnu sa strogo ograničenim pravima, zatvoren USB itd., negdje koristim Accounting 2.0, a negdje 3.0, skoro sve izvještaje pravim koristeći ACS alate bez formulara, tako da otvoren u obje verzije. Održavanje svih ovih izvještaja za različite verzije i različite baze podataka je naporno i uzaludno, jer U planu je prelazak na jednu konfiguraciju i bazu...

Kreirajmo profil.
U konzoli klastera kreiramo sigurnosni profil u koji postavljamo zastavice "Može se koristiti kao sigurnosni profil u sigurnom načinu rada" i " u odjeljku "Puni pristup dozvoljen:" "u privilegirani način rada".

U mnogim slučajevima korištenja izvještaja i jednostavne obrade, ova metoda će biti primjenjiva. Za složenije situacije nema smisla opisivati ​​proces, jer navedeno je u dokumentaciji (mogućnost konfigurisanja sigurnosnih profila za određene eksterne datoteke navođenjem količine heširanja, itd.).

P.S. Mislio sam da sigurnosni profili funkcionišu samo kada se koriste platformske i serverske licence na nivou CORP, ali ova funkcionalnost radi i na platformi 1C:Enterprise 8.3 (može se uslovno nazvati PROF, po analogiji sa standardnim konfiguracijama Basic/PROF/CORP)

Ispis (Ctrl+P)

Konfiguracijski objekti

Ako je potrebno koristiti “nepouzdani” programski kod na serveru: eksternu obradu ili programski kod koji je unio korisnik za korištenje u metodama Run() i Calculate(), možete koristiti siguran način rada.

U sigurnom načinu rada:

  • Privilegirani način rada otkazan.
  • Ulazak u privilegirani način rada ignorisano.
  • Zabranjeno operacije koje dovode do upotrebe eksternih sredstava u odnosu na platformu 1C:Enterprise (uključujući neblokirajuće analoge navedenih metoda):
  • COM mehanizmi:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Učitavanje vanjskih komponenti:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Pristup sistemu datoteka:
    • ValueInFile();
    • CopyFile();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • DeleteFiles();
    • New File;
    • New xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ČitanjeZipFile.Open();
    • Novi ReadText(), ako je prvi parametar string;
    • ReadText.Open(), ako je prvi parametar string;
    • NewTextRecord(), ako je prvi parametar string;
    • WriteText.Open(), ako je prvi parametar string;
    • NewTextExtract();
    • promjena svojstva ExtractText.FileName;
    • ExtractText.Write();
    • Nova slika(), ako je prvi parametar string;
    • Picture.Write();
    • new BinaryData();
    • BinarniData.Napiši();
    • NewDataRecord(), ako je prvi parametar string;
    • Novi ReadData(), postoji prvi parametar - string;
    • sve metode objekta FileStreamManager;
    • Novi FileStream();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TabularDocument.Read();
    • TabularDocument.Write();
    • TabularDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Pristup Internetu:
    • Nova internet konekcija,
    • Nova InternetMail,
    • Novi InternetProxy,
    • Nova HTTP veza,
    • Nova FTP Connection.

PAŽNJA! Prilikom izvođenja zabranjenih operacija, izuzeće se izbacuje u vrijeme izvođenja.

Bilješka. Eksterni izvještaji i obrada otvoreni pomoću menija Datoteka - Otvori se izvršavaju u sigurnom načinu rada ako korisnik nema administrativna prava pristupa.

Broj uključivanja sigurnog načina rada mora odgovarati broju isključenja. Međutim, ako je siguran način rada uključen unutar procedure ili funkcije (jednom ili više), ali nije isključen, sistem će se automatski isključiti onoliko puta koliko je bilo nepotpunih uključenja u proceduri ili funkciji koja je ostala.

Ako u proceduri ili funkciji poziva metodu Postavi SafeMode (False) napravio više od poziva metoda PostaviSafeMode(True), tada će biti izbačen izuzetak.

Instalacija softvera sigurnog načina rada može biti potrebna u slučaju kada programer konfiguracije namjerava koristiti programski kod treće strane (u odnosu na konfiguraciju), za čiju pouzdanost programer ne može garantirati. Primjer takvog koda je izvršavanje metoda Execute() i Compute() u slučajevima kada je izvršni kod dobiven iz vanjskog svijeta. U ovom slučaju, dobra praksa bi bila da postavite Safe Mode prije izvršavanja ovih metoda:

// Generira se programski kod koji treba izvršiti // Moguće je da je kod učitan iz vanjskih izvora // ili da se unese ručno ExecutableCode = GetExecutedCodeFromExternalWorld(); // Omogućavanje sigurnog načina rada SetSafeMode(True); // Izvršavanje potencijalno opasnog koda Execute(ExecutableCode); // Isključivanje sigurnog načina rada SetSafeMode(False);

U nekim slučajevima, postavke sigurnog načina rada mogu biti u sukobu s postavkama privilegiranog načina rada. Primjer takvog sukoba je postavljanje dokumenta za koji je postavljeno svojstvo Privilegirani način prilikom objavljivanja, iz koda na ugrađenom jeziku koji se izvršava u sigurnom načinu rada. U ovom slučaju, privilegirani način rada je onemogućen i pokušaji da se on omogući se zanemaruju. Kao rezultat toga, kod u ugrađenom jeziku, koji „računa“ na omogućeni privilegirani način rada, „nailazi“ na njegovo odsustvo, što dovodi do grešaka sa neočiglednim razlozima za njihovo pojavljivanje. Kako bi spriječio ovu situaciju, sistem 1C:Enterprise automatski onemogućuje siguran način rada za rukovaoce događajima koji su dostupni u objektnom modulu ili modulu menadžera, pod uslovom da se izvršni kod na ugrađenom jeziku ne nalazi u konfiguracijskoj ekstenziji. Takvi rukovaoci su označeni na poseban način u pomoćniku za sintaksu.

Također pruža mogućnost onemogućavanja sigurnog načina rada iz ugrađenog jezika (ako programski kod koji pokušava da ga onemogući nije u konfiguracijskoj ekstenziji). Da biste onemogućili siguran način rada, postoji način PostaviDisableSafeMode(). Pomoću metode možete provjeriti da li je siguran način rada trenutno onemogućen (automatski ili pozivanjem metode). GetDisableSafeMode().

Unutar jedne metode u ugrađenom jeziku ne može postojati više od jednog nivoa ugniježđenja postavljanja sigurnog načina rada (pozivanjem metode SetSafeMode()) i postavljanja onemogućavanja sigurnog načina rada (automatski tokom izvršavanja rukovatelja događajima). metapodataka ili pozivanjem metode SetDisableSafeMode()). Prilikom pokušaja povećanja ugniježđenja, izbacuje se izuzetak:

// Ispravna upotreba ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Pogrešna upotreba ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Izuzetak EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Izuzetak EndProcedure

Programsko otvaranje eksterne obrade vrši se pomoću globalnog kontekstnog objekta ExternalProcessing, koji ima tip ExternalProcessingManager. Za svaki način rada 1C platforme (regularni način aplikacije i način upravljane aplikacije) koriste se različite objektne metode za rad s vanjskom obradom.

Pokretanje vanjske obrade u normalnom načinu aplikacije

U tipičnoj aplikaciji, morate koristiti metodu Create() objekta ExternalProcessing, kojoj se prosljeđuje puno ime vanjske datoteke za obradu. Metoda vraća objekt tipa ExternalProcessing, ovaj objekt je eksterna obrada koja se otvara. Ako trebate otvoriti eksterni obrazac za obradu, pozovite metodu GetForm() na primljenom objektu, koja će vratiti glavni obrazac, a zatim pozovite metodu Open() da biste ga otvorili.


Obrada = ExternalProcessing.Create(FullFileName);
Processing.GetForm().Open();

U vanjskoj obradi, glavni obrazac uvijek mora biti običan, a kontrolirani obrazac uvijek mora biti dodatni, inače metoda GetForm() neće raditi u normalnom načinu aplikacije.

Pokretanje vanjske obrade u načinu upravljanja aplikacijom

U načinu upravljanja obrascima, algoritam je podijeljen prema kontekstu izvršavanja. Na klijentu primamo binarne podatke koristeći puno ime eksterne datoteke za obradu. Primljene binarne podatke prenosimo na server i stavljamo u privremenu memoriju. Zatim morate pozvati metodu Connect() ExternalProcessing objekta, na koji se prosljeđuje adresa za privremenu memoriju. Metoda vraća ime povezane eksterne obrade. Vraćamo ime eksterne obrade klijentu, kreiramo putanju niza do obrasca za obradu i koristimo metodu OpenForm() da otvorimo eksterni obrazac za obradu.

&Na serveru
Funkcija GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Vrati ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // Puni naziv vanjske datoteke za obradu.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Siguran način rada za eksternu obradu

Metode Create() i Connect() objekta ExternalProcessing imaju ulazni parametar SafeMode - znak povezivanja vanjske obrade u sigurnom načinu rada. Ako parametar nije naveden, veza će se uspostaviti u sigurnom načinu rada.
Bezbedan način rada je dizajniran da zaštiti sistem od izvršavanja "nepouzdanog" programskog koda na serveru. Potencijalna opasnost dolazi od vanjske obrade ili programskog koda koji je unio korisnik za korištenje u metodama Run() i Calculate().
Safe mode nameće sljedeća ograničenja:
  • privilegirani način rada se otkazuje ako je instaliran;
  • pokušaji ulaska u privilegirani mod se zanemaruju;
  • operacije sa COM objektima su zabranjene;
  • zabranjeno je učitavanje i povezivanje vanjskih komponenti;
  • pristup sistemu datoteka je zabranjen (osim za privremene datoteke);
  • Pristup internetu je zabranjen.
Procesi otvoreni interaktivno se ne izvode u sigurnom načinu rada, stoga se preporučuje implementacija mehanizma za otvaranje vanjskih procesora u sigurnom načinu rada, kao i na nivou dozvole da se korisniku zabrani interaktivno otvaranje eksternih procesora.
Za zabranu interaktivnog otvaranja obrade, u svim ulogama koje su dodijeljene korisniku, potrebno je ukloniti pravo „Interaktivno otvaranje eksterne obrade“ (vidi sliku 1).
Slika 1. Prava na interaktivno otvaranje eksterne obrade/izvještaja
Pravo "Interaktivno otvaranje eksterne obrade" ni na koji način ne utiče na objekat Eksterne obrade.

Programsko otvaranje eksternih izvještaja je slično vanjskoj obradi, ali trebate koristiti globalni kontekstni objekt ExternalReports, koji ima tip ExternalReportsManager.