Počítače Okna Internet

Jak deaktivovat nouzový režim v 1s 8.3. Pavel čistý. Nouzový režim pro externí zpracování

Faktem je, že při použití klient-server verze 1C se externí zpracování / zprávy 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 velmi často používá v typických konfiguracích: vytváření 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é sestavy na ACS bez formuláře (standardně se používá obecný formulář "ReportForm") a uložení uživatelského nastavení sestavy (v odpovídajícím adresáři) se zobrazí chyba o nedostatečném přístupová práva k různým konstantám a parametrům relace používaným pro oficiální účely za řádkem SetPrivilegedMode(True) ;

"Správným" řešením by bylo propojit externí procesory 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). Ale pokud je z nějakého důvodu nutné použít přesně externí soubory zpráv/zpracování, můžete nakonfigurovat profil zabezpečení klastru, který se používá jako profil zabezpečení v nouzovém režimu pro konkrétního uživatele informační základna.

Hned bych rád poznamenal, že tato možnost není preferována, ale vzhledem k různým okolnostem ji lze v takto zjednodušené podobě použít. Například mám několik databází v různých městech, běžnou lokální síť s přísně omezenými právy, uzavřené USB atd., někde se používá Accounting 2.0 a někde 3.0, dělám skoro všechny reporty pomocí ACS bez formulářů, takže se otevřely v obou verzích. Sloužit všechny ty zprávy pro různé verze a různé základny je časově náročný a neperspektivní obchod, protože existují plány na přechod na jedinou konfiguraci a základnu ...

Vytváříme profil.
V konzole clusteru vytvoříme bezpečnostní profil, ve kterém nastavíme příznaky "Lze použít jako profil zabezpečení v nouzovém režimu" a " pod "Povoleno 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 hash součtu atd.).

P.S. Myslel jsem, že bezpečnostní profily fungují pouze při použití licencí pro platformu a server na úrovni CORP, ale tuto funkci funguje na platformě 1C:Enterprise 8.3

Tisk (Ctrl+P)

Konfigurační objekty

Pokud je nutné použít "nespolehlivý" programový kód na serveru: externí zpracování popř programovací kód, zadaný uživatelem pro použití v metodách Execute() a Calculate(), můžete použít bezpečný režim provozu.

V nouzovém režimu:

  • Privilegovaný režim zrušeno.
  • Přepnutí do privilegovaného režimu ignorován.
  • Zakázáno operace, které vedou k použití externích nástrojů ve vztahu k platformě 1C:Enterprise (včetně neblokujících analogů výše uvedených metod):
  • COM mechanismy:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Načítání externích komponent:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Přístup k souborový systém:
    • valueToFile();
    • Zkopírovat soubor();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • Vymazat soubory();
    • Nový soubor;
    • Nová xBase;
    • WriteHTML.OpenFile();
    • ReadingHTML.OpenFile();
    • ReadingXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadFastInfoset.OpenFile();
    • WriteFastInfoset.OpenFile();
    • CanonicalWriterXML.OpenFile();
    • XSL Transformation.LoadFromFile();
    • WriteZipFile.Open();
    • ReadZipFile.Open();
    • NewTextReader(), pokud je prvním argumentem řetězec;
    • ReadText.Open(), pokud je prvním parametrem řetězec;
    • Nová TextWrite(), pokud je prvním parametrem řetězec;
    • WriteText.Open(), pokud je prvním parametrem řetězec;
    • New ExtrahovatText();
    • změna vlastnosti ExtractText.FileName;
    • ExtrahovatText.Write();
    • New Image(), pokud je prvním parametrem řetězec;
    • Obrázek.Záznam();
    • New BinaryData();
    • BinaryData.Write();
    • New DataWrite(), pokud je prvním parametrem řetězec;
    • Nové DataRead(), prvním parametrem je řetězec;
    • všechny metody objektu FileStreamManager;
    • New FileStream();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • SpreadsheetDocument.Read();
    • SpreadsheetDocument.Write();
    • SpreadsheetDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Přístup na internet:
    • Nové připojení k internetu,
    • Nový InternetMail,
    • Nový internetový proxy,
    • Nové připojení HTTP,
    • Nové připojení FTP.

POZORNOST! Vyvolá výjimku při provádění zakázaných operací za běhu.

Poznámka. Externí reporty a zpracování, které se otevírají 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 aktivací nouzového režimu musí odpovídat počtu vypnutí. Pokud byl však nouzový režim povolen (jednou nebo vícekrát) v rámci procedury nebo funkce, ale nebyl deaktivován, systém se automaticky vypne tolikrát, kolikrát došlo k nedokončeným aktivacím v proceduře nebo funkci, která se opouští.

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

Programová instalace nouzového režimu může být vyžadována, když vývojář konfigurace předpokládá použití programového kódu 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 Calculate() v případech, kdy je spustitelný kód přijat z vnějšího světa. V tomto případě je dobrou praxí nastavit bezpečný režim před provedením těchto metod:

// Probíhá generování programového kódu ke spuštění // Je možné, že je kód načten z externích zdrojů // nebo zadán ručně ExecutableCode = GetExecutableCodeFrom OutsideWorld(); // Povolení nouzového režimu SetSafeMode(True); // Spuštění potenciálně nebezpečného kódu Execute(ExecutableCode); // Vypnutí bezpečné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 odeslání dokumentu, který má vlastnost Privileged mode on post nastavenou z 1D kódu, který běží 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 1C:Enterprise, který „spoléhá“ na povolený privilegovaný režim, „koliduje“ s jeho absencí, což vede k chybám s nezřejmými důvody pro zobrazení. Aby se takové situaci zabránilo, 1C:Enterprise automaticky deaktivuje bezpečný režim pro obslužné rutiny událostí, které jsou k dispozici v objektovém modulu nebo modulu manažera, za předpokladu, že spustitelný kód v jazyce 1C:Enterprise není umístěn v konfiguračním rozšíření. Takové handlery jsou v asistentu syntaxe označeny speciálním způsobem.

Poskytuje také možnost deaktivovat nouzový režim z 1. jazyka (pokud kód, ze kterého se pokoušíte o deaktivaci, není v konfiguračním rozšíření). Metoda deaktivace nouzového režimu SetDisableSafeMode(). Zkontrolujte, zda je zapnutý nouzový režim tento moment zakázáno (automaticky nebo pomocí volání metody), můžete metodu použít GetDisableSafeMode().

V rámci jedné metody 1C:1 nemůže existovat více než jedna úroveň vnoření nastavení bezpečného režimu (voláním metody SetSafeMode()) a nastavením deaktivace bezpečného režimu (automaticky v okamžiku spuštění obslužných rutin metadatových objektů nebo voláním Metoda SetSafeModeDisable()). Při pokusu o zvýšení vnoření je vyvolána výjimka:

// Procedura správného použití ProcedureName() SetSafeModeDisable(True); SetSafeMode(True); SetSafeMode(False); SetSafeModeDisable(False); EndProcedure // Nesprávné použití ProcedureName() SetSafeModeDisable(True); SetSafeMode(True); SetSafeModeDisable(False); // Výjimka EndProcedure ProcedureProcedureName() SetSafeMode(True); SetSafeModeDisable(False); // Výjimka EndProcedure

Programové zjišťování 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 spravované aplikace) různé metody objekt pro práci s externím zpracováním.

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 externalprocessing. Metoda vrací objekt typu Externí zpracování, tento objekt je otevřené externí zpracování. Chcete-li otevřít formulář pro externí zpracování, zavolejte metodu GetForm() přijatého objektu, která vrátí hlavní formulář, a poté zavolejte metodu Open() pro jeho otevření.


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

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

Spusťte externí zpracování v režimu spravované aplikace

Režim spravovaných formulářů zavádí oddělení algoritmu podle kontextu provádění. Na klientovi získáváme binární data pod úplným názvem 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 dočasného úložiště. Metoda vrací název připojeného externího zpracování. Vrátíme jméno externího zpracování na klientovi, vytvoříme řetězcovou cestu k formuláři zpracování a pomocí metody OpenForm() otevřeme formulář pro externí zpracování.

&Na serveru
Funkce GetExternalProcessName(BinaryData).
AddressInTempStorage = PlaceInTempStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTempStorage);
EndFunctions

&AtClient
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í vstupní parametr SafeMode - znak 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 operace je navržena tak, aby chránila systém před spuštěním "nedůvěryhodného" programového kódu na serveru. Potenciálním nebezpečím je externí zpracování nebo kód programu zadaný uživatelem pro použití v metodách Execute () a Calculate ().
Nouzový režim má následující omezení:
  • privilegovaný režim je zrušen, pokud byl nastaven;
  • 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 k systému souborů je odepřen (kromě dočasných souborů);
  • přístup k internetu je zakázán.
Interaktivně otevřená zpracování se neprovádějí v nouzovém režimu, proto se doporučuje implementovat mechanismus pro otevírání externího zpracování v nouzovém režimu a také zakázat uživateli otevírat externí zpracování interaktivně na úrovni práv.
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ích 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řít externí zpracování" nijak neovlivňuje objekt ExternalProcessing.

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ý je typu ExternalReportsManager.