Pavel Chistov. Bezpečný provozní režim Je nastaven bezpečný režim 1c, provoz je zakázán

Když spustíte program Document Upload jako běžný uživatel, zobrazí se chyba "Nouzový režim je nastaven. Operace je zakázána."

Tato obtíž vzniká proto Pro zahájení externího zpracování není dostatek práv. Chcete-li nakonfigurovat přístupová práva, přihlaste se do databáze v režimu 1C Enterprise jménem uživatele Správce a přejděte do sekce Nastavení uživatelů a práv / Přístupové skupinové profily, klikněte Chcete-li vytvořit skupinu.

Zadejte název skupiny a zaškrtněte políčka u rolí dostupných uživatelům této skupiny -

  • Interaktivní otevírání a zpracování externích reportů
  • Použití dalších reportů a zpracování

Klikněte Uložit a zavřít


Vraťte se do nabídky Uživatelé a vyberte ze seznamu pracovníka, který bude pracovat s programem Nahrání dokumentů. Klepněte na položku Oprávnění. V seznamu profilů vyberte dříve vytvořený profil. Klikněte Zapsat.


Aby uživatelé mohli začít zpracovávat, doporučuje se přidat Načítání dokumentu do seznamu externích zpracování. Chcete-li to provést v nabídce Administrace / Tištěné formuláře a zpracování / Doplňkové sestavy a zpracování vytvořit nové zpracování. Zadejte cestu k souboru "Download Documents.epf" a přiřaďte mu název. V menu specifikujte umístění zpracování, odkud jej může uživatel později spustit, např. vybrat menu Adresáře

Kliknutím na položku Rychlý přístup určíte, kteří uživatelé mají přístup ke zpracování:


Po nastavení klikněte Uložit a zavřít. Pro zahájení zpracování budou uživatelé muset znovu vstoupit do databáze a otevřít ji z přístupové nabídky (v příkladu - Adresáře) a kliknout Vykonat.


OTEVŘENO Menu - Všechny funkce.... a v seznamu najděte možnost „Používají se bezpečnostní profily“.


Stačí zrušit zaškrtnutí možnosti „Používají se bezpečnostní profily“.


Poté se program úspěšně spustí.

Faktem je, že při použití klient-server verze 1C se externí zpracování / sestavy otevírají v nouzovém režimu, ve kterém je zakázáno použití privilegovaného režimu. A privilegovaný režim se v typických konfiguracích používá velmi často: generování tištěných formulářů, různé servisní kontroly (registrace výměn) atd. Výsledkem je, že i při použití běžné zprávy o systému řízení přístupu bez formuláře (ve výchozím nastavení se používá obecný formulář "ReportForm") a uložení vlastního nastavení zprávy (v odpovídajícím adresáři) se zobrazí chyba o nedostatečném přístupu práva na různé konstanty a parametry relace používané pro oficiální účely za řádkem SetPrivilegedMode(True) ;

„Správným“ řešením by bylo propojit externí zpracování a sestavy prostřednictvím mechanismů BSP „Další sestavy a zpracování“ s deaktivací nouzového režimu nebo přidáním oprávnění (podle mého názoru od verze BSP 2.2.2.1). Pokud je však z nějakého důvodu nutné použít externí soubory pro hlášení/zpracování, můžete nakonfigurovat profil zabezpečení clusteru používaný jako profil zabezpečení v nouzovém režimu pro konkrétní informační databázi.

Okamžitě bych chtěl poznamenat, že tato možnost není preferována, ale vzhledem k různým okolnostem ji lze použít v takto zjednodušené podobě. Například mám několik databází v různých městech, běžnou lokální s přísně omezenými právy, uzavřené USB atd., někde používám Accounting 2.0 a někde 3.0, dělám téměř všechny reporty pomocí nástrojů ACS bez formulářů, takže otevřen v obou verzích. Udržování všech těchto sestav pro různé verze a různé databáze je pracné a marné, protože Plánuje se přechod na jedinou konfiguraci a základnu...

Pojďme si vytvořit profil.
V konzole clusteru vytvoříme bezpečnostní profil, ve kterém nastavíme příznaky "Lze použít jako bezpečnostní profil nouzového režimu" a " v sekci "Povolen plný přístup:" „do privilegovaného režimu“.

V mnoha případech použití reportů a jednoduchého zpracování bude tato metoda použitelná. U složitějších situací nemá smysl popisovat proces, protože je popsána v dokumentaci (možnost konfigurovat bezpečnostní profily pro konkrétní externí soubory zadáním jejich hodnoty hash atd.).

P.S. Myslel jsem, že bezpečnostní profily fungují pouze při použití platforem a serverových licencí na úrovni CORP, ale tato funkčnost funguje i na platformě 1C:Enterprise 8.3 (může být podmíněně nazývána PROF, analogicky se standardními konfiguracemi Basic/PROF/CORP)

Tisknout (Ctrl+P)

Konfigurační objekty

Pokud je nutné na serveru použít „nedůvěryhodný“ programový kód: externí zpracování nebo programový kód zadaný uživatelem pro použití v metodách Run() a Calculate(), můžete použít bezpečný provozní režim.

V nouzovém režimu:

  • Privilegovaný režim zrušeno.
  • Přepnutí do privilegovaného režimu ignoroval.
  • Zakázáno operace vedoucí k použití externích prostředků ve vztahu k platformě 1C:Enterprise (včetně neblokujících analogů uvedených metod):
  • COM mechanismy:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Načítání externích komponent:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Přístup k systému souborů:
    • ValueInFile();
    • Zkopírovat soubor();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • Vymazat soubory();
    • Nový soubor;
    • Nová xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • New ReadText(), pokud je prvním parametrem řetězec;
    • ReadText.Open(), pokud je prvním parametrem řetězec;
    • NewTextRecord(), pokud je prvním parametrem řetězec;
    • WriteText.Open(), pokud je prvním parametrem řetězec;
    • NewTextExtract();
    • změna vlastnosti ExtractText.FileName;
    • ExtrahovatText.Write();
    • New Picture(), pokud je prvním parametrem řetězec;
    • Picture.Write();
    • new BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), pokud je prvním parametrem řetězec;
    • Nové ReadData(), je zde první parametr - řetězec;
    • všechny metody objektu FileStreamManager;
    • New 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().
  • Přístup na internet:
    • Nové připojení k internetu,
    • Nový InternetMail,
    • Nový InternetProxy,
    • Nové připojení HTTP,
    • Nové FTP připojení.

POZORNOST! Při provádění zakázaných operací je za běhu vyvolána výjimka.

Poznámka. Externí reporty a zpracování otevřené pomocí nabídky Soubor - Otevřít se provádějí v nouzovém režimu, pokud uživatel nemá administrátorská přístupová práva.

Počet zapnutí nouzového režimu se musí shodovat s počtem vypnutí. Pokud však byl nouzový režim zapnut v rámci procedury nebo funkce (jednou nebo vícekrát), ale nebyl vypnut, systém se automaticky vypne tolikrát, kolikrát došlo k neúplným zapnutím v postupu nebo funkci, která byla ponechána.

Pokud v proceduře nebo funkci volá metodu SetSafeMode(False) provedli více než volání metod SetSafeMode (True), pak bude vyvolána výjimka.

Instalace softwaru nouzového režimu může být vyžadována v případě, kdy vývojář konfigurace hodlá použít programový kód třetí strany (ve vztahu ke konfiguraci), jehož spolehlivost nemůže zaručit. Příkladem takového kódu je provádění metod Execute() a Compute() v případech, kdy je spustitelný kód získán z vnějšího světa. V tomto případě by bylo dobré nastavit nouzový režim před provedením těchto metod:

// Vygeneruje se kód programu, který by se měl spustit // Je možné, že je kód načten z externích zdrojů // nebo zadán ručně ExecutableCode = GetExecutedCodeFromExternalWorld(); // Povolení nouzového režimu SetSafeMode(True); // Spuštění potenciálně nebezpečného kódu Execute(ExecutableCode); // Vypnutí nouzového režimu SetSafeMode(False);

V některých případech může být nastavení nouzového režimu v konfliktu s nastavením privilegovaného režimu. Příkladem takového konfliktu je zaúčtování dokumentu, pro který je nastaven režim Privilegovaný při odesílání vlastnosti, z kódu ve vestavěném jazyce, který se spouští v nouzovém režimu. V tomto případě je privilegovaný režim zakázán a pokusy o jeho povolení jsou ignorovány. Výsledkem je, že kód ve vestavěném jazyce, který „počítá“ se zapnutým privilegovaným režimem, „narazí“ na jeho absenci, což vede k chybám s nezřejmými důvody jejich výskytu. Aby se této situaci zabránilo, systém 1C:Enterprise automaticky deaktivuje bezpečný režim pro obslužné rutiny událostí, které jsou k dispozici v objektovém modulu nebo modulu správce, za předpokladu, že spustitelný kód ve vestavěném jazyce není umístěn v konfiguračním rozšíření. Takové manipulátory jsou v asistentu syntaxe označeny zvláštním způsobem.

Poskytuje také možnost deaktivovat nouzový režim z vestavěného jazyka (pokud programový kód, který se jej pokouší deaktivovat, není v konfiguračním rozšíření). Chcete-li zakázat bezpečný režim, existuje metoda SetDisableSafeMode(). Pomocí této metody můžete zkontrolovat, zda je nouzový režim aktuálně zakázán (automaticky nebo voláním metody). GetDisableSafeMode().

V rámci jedné metody ve vestavěném jazyce nemůže existovat více než jedna úroveň vnoření nastavení bezpečného režimu (voláním metody SetSafeMode()) a nastavení deaktivace nouzového režimu (automaticky během provádění události metadatového objektu manipulátory nebo voláním metody SetSafeModeDisable(). Při pokusu o zvýšení vnoření je vyvolána výjimka:

// Správné použití ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Nesprávné použití ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Výjimka EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Výjimka EndProcedure

Programové otevření externího zpracování se provádí pomocí objektu globálního kontextu ExternalProcessing, který má typ ExternalProcessingManager. Pro každý provozní režim platformy 1C (režim běžné aplikace a režim řízené aplikace) se pro práci s externím zpracováním používají různé objektové metody.

Spuštění externího zpracování v normálním aplikačním režimu

V typické aplikaci musíte použít metodu Create() objektu ExternalProcessing, které je předán úplný název souboru externího zpracování. Metoda vrací objekt typu Externí zpracování, tento objekt je otevřené externí zpracování. Pokud potřebujete otevřít formulář pro externí zpracování, zavolejte metodu GetForm() na přijatém objektu, která vrátí hlavní formulář, a poté zavolejte metodu Open() k jeho otevření.


Zpracování = ExternalProcessing.Create(FullFileName);
Processing.GetForm().Open();

Při externím zpracování musí být hlavní formulář vždy běžný a řízený formulář musí být vždy doplňkový, jinak metoda GetForm() nebude fungovat v normálním aplikačním režimu.

Spuštění externího zpracování v režimu spravované aplikace

V režimu spravovaných formulářů je algoritmus rozdělen podle kontextu provádění. Na klientovi přijímáme binární data pomocí úplného názvu souboru externího zpracování. Přijatá binární data přeneseme na server a uložíme je do dočasného úložiště. Dále je třeba zavolat metodu Connect() objektu ExternalProcessing, kterému je předána adresa pro dočasné úložiště. Metoda vrací název připojeného externího zpracování. Klientovi vrátíme název externího zpracování, vytvoříme řetězcovou cestu k formuláři pro zpracování a pomocí metody OpenForm() otevřeme formulář pro externí zpracování.

&Na serveru
Funkce GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // Úplný název souboru externího zpracování.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Nouzový režim pro externí zpracování

Metody Create() a Connect() objektu ExternalProcessing mají příchozí parametr SafeMode - znamení připojení externího zpracování v nouzovém režimu. Pokud parametr není zadán, bude připojení provedeno v zabezpečeném režimu.
Nouzový režim je navržen tak, aby chránil systém před spuštěním „nedůvěryhodného“ programového kódu na serveru. Potenciální nebezpečí pochází z externího zpracování nebo kódu programu zadaného uživatelem pro použití v metodách Run() a Calculate().
Nouzový režim ukládá následující omezení:
  • privilegovaný režim je zrušen, pokud byl nainstalován;
  • pokusy o vstup do privilegovaného režimu jsou ignorovány;
  • operace s objekty COM jsou zakázány;
  • nakládání a připojování externích komponent je zakázáno;
  • přístup do souborového systému je zakázán (kromě dočasných souborů);
  • Přístup k internetu je zakázán.
Interaktivně otevírané procesy se neprovádějí v nouzovém režimu, proto se doporučuje implementovat mechanismus pro otevírání externích procesorů v nouzovém režimu a také na úrovni oprávnění zakázat uživateli interaktivně otevírat externí procesory.
Pro zákaz interaktivního otevírání zpracování je ve všech rolích přiřazených uživateli nutné odebrat právo „Interaktivní otevírání externího zpracování“ (viz obrázek 1).
Obrázek 1. Práva k interaktivnímu otevírání externích zpracování/hlášení
Právo "Interaktivní otevření externího zpracování" nijak neovlivňuje objekt Externí zpracování.

Programové otevírání externích sestav je podobné externímu zpracování, ale měli byste použít objekt globálního kontextu ExternalReports, který má typ ExternalReportsManager.