Pavel Chistov. Sikker driftsmodus 1c sikker modus er satt, drift er forbudt

Når du kjører dokumentopplastingsprogrammet som en vanlig bruker, vises feilen "Sikker modus er satt. Operasjonen er forbudt."

Denne vanskeligheten oppstår pga Det er ikke nok rettigheter til å starte ekstern behandling. For å konfigurere tilgangsrettigheter, logg på databasen i 1C Enterprise-modus på vegne av Administrator og gå til delen Bruker- og rettighetsinnstillinger / Tilgang til gruppeprofiler, klikk For å opprette en gruppe.

Skriv inn navnet på gruppen og merk av i boksene for rollene som er tilgjengelige for brukere av denne gruppen -

  • Interaktiv åpning av eksterne rapporter og behandling
  • Bruk av tilleggsrapporter og behandling

Klikk Lagre og lukk


Gå tilbake til brukermenyen og velg fra listen den ansatte som skal jobbe med dokumentopplastingsprogrammet. Klikk på Tillatelser. I listen over profiler velger du den tidligere opprettede profilen. Klikk Skrive ned.


For at brukerne skal kunne begynne å behandle, anbefales det å legge til dokumentlasting i listen over ekstern behandling. For å gjøre dette i menyen Administrasjon / Trykte skjemaer og behandling / Tilleggsrapporter og behandling opprette en ny behandling. Angi banen til filen "Last ned Documents.epf" og gi et navn. Angi plasseringen av behandlingen i menyen, hvorfra brukeren kan starte den senere, for eksempel velg menyen Kataloger

Ved å klikke på hurtigtilgangselementet angir du hvilke brukere som har tilgang til behandling:


Etter innstillingen klikker du Lagre og lukk. For å starte behandlingen trenger brukere bare å gå inn i databasen på nytt og åpne den fra tilgangsmenyen (i eksemplet - Kataloger) og klikke på Henrette.


Åpen Meny - Alle funksjoner.... og finn alternativet "Sikkerhetsprofiler brukes" i listen.


Bare fjern merket for alternativet "Sikkerhetsprofiler brukes".


Etter dette vil programmet starte.

Faktum er at når du bruker klient-serverversjonen av 1C, åpnes ekstern behandling/rapporter i sikker modus, der bruk av privilegert modus er forbudt. Og den privilegerte modusen brukes veldig ofte i typiske konfigurasjoner: generering av trykte skjemaer, forskjellige servicesjekker (registrering av børser), etc. Som et resultat, selv ved å bruke en vanlig rapport om tilgangskontrollsystemet uten skjema (som standard brukes det generelle skjemaet "ReportForm") og lagre tilpassede rapportinnstillinger (i den tilsvarende katalogen), vil du motta en feilmelding om utilstrekkelig tilgang rettigheter til ulike konstanter og øktparametere brukt til offisielle formål etter linjen SetPrivilegedMode(True) ;

Den "riktige" løsningen ville være å koble ekstern behandling og rapporter gjennom BSP "Ytterligere rapporter og behandling"-mekanismer med deaktivering av sikker modus eller legge til tillatelser (etter min mening, fra BSP versjon 2.2.2.1). Men hvis det av en eller annen grunn er nødvendig å bruke eksterne rapporterings-/behandlingsfiler, kan du konfigurere en klyngesikkerhetsprofil som brukes som en sikker modus sikkerhetsprofil for en spesifikk infobase.

Jeg vil umiddelbart merke at dette alternativet ikke er å foretrekke, men på grunn av forskjellige omstendigheter kan det brukes i en så forenklet form. For eksempel har jeg flere databaser i forskjellige byer, en felles lokal med strengt begrensede rettigheter, lukket USB osv. et sted bruker jeg Accounting 2.0, og et sted 3.0 lager jeg nesten alle rapporter ved hjelp av ACS-verktøy uten skjemaer, slik at de åpnet i begge versjoner. Å vedlikeholde alle disse rapportene for forskjellige versjoner og forskjellige databaser er arbeidskrevende og meningsløst, fordi Det er planer om å bytte til én enkelt konfigurasjon og base...

La oss lage en profil.
I klyngekonsollen lager vi en sikkerhetsprofil der vi setter flaggene "Kan brukes som en sikker modus sikkerhetsprofil" og " i delen "Full tilgang tillatt:" "til privilegert modus".

I mange tilfeller med bruk av rapporter og enkel behandling vil denne metoden være anvendelig. For mer komplekse situasjoner er det ingen vits i å beskrive prosessen, fordi det er skissert i dokumentasjonen (muligheten til å konfigurere sikkerhetsprofiler for spesifikke eksterne filer ved å spesifisere hash-mengden, etc.).

P.S. Jeg trodde at sikkerhetsprofiler bare fungerer ved bruk av plattform- og serverlisenser på CORP-nivå, men denne funksjonaliteten fungerer også på 1C:Enterprise 8.3-plattformen (den kan betinget kalles PROF, analogt med standardkonfigurasjonene Basic/PROF/CORP)

Skriv ut (Ctrl+P)

Konfigurasjonsobjekter

Hvis det er nødvendig å bruke "upålitelig" programkode på serveren: ekstern prosessering eller programkode angitt av brukeren for bruk i metodene Run() og Calculate(), kan du bruke sikker driftsmodus.

I sikker modus:

  • Privilegert modus kansellert.
  • Bytter til privilegert modus ignorert.
  • Forbudt operasjoner som fører til bruk av eksterne midler i forhold til 1C:Enterprise-plattformen (inkludert ikke-blokkerende analoger av de spesifiserte metodene):
  • COM-mekanismer:
    • COMOobjekt();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Lasting av eksterne komponenter:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Filsystemtilgang:
    • VerdiInFile();
    • Kopier fil();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • Slett filer();
    • Ny fil;
    • Ny xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • Ny ReadText(), hvis den første parameteren er en streng;
    • ReadText.Open(), hvis den første parameteren er en streng;
    • NewTextRecord(), hvis den første parameteren er en streng;
    • WriteText.Open(), hvis den første parameteren er en streng;
    • NewTextExtract();
    • endre egenskapen ExtractText.FileName;
    • ExtractText.Write();
    • New Picture(), hvis den første parameteren er en streng;
    • Bilde.Skriv();
    • ny BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), hvis den første parameteren er en streng;
    • Ny ReadData(), det er en første parameter - en streng;
    • alle metodene til FileStreamManager-objektet;
    • Ny 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().
  • Internettilgang:
    • Ny Internett-tilkobling,
    • Ny InternetMail,
    • Ny InternetProxy,
    • Ny HTTP-tilkobling,
    • Ny FTP-tilkobling.

MERK FØLGENDE! Når du utfører forbudte operasjoner, blir det gitt et unntak under kjøring.

Merk. Eksterne rapporter og behandling som åpnes ved hjelp av Fil - Åpne-menyen, utføres i sikker modus hvis brukeren ikke har administrative tilgangsrettigheter.

Antall ganger sikker modus er slått på må samsvare med antall ganger den er slått av. Men hvis sikker modus ble slått på innenfor en prosedyre eller funksjon (en gang eller flere), men ikke ble slått av, vil systemet automatisk slå seg av så mange ganger som det var ufullstendige aktiveringer i prosedyren eller funksjonen som ble igjen.

Hvis i en prosedyre eller funksjon kaller en metode SetSafeMode(False) gjort mer enn metodekall SetSafeMode(True), da vil et unntak bli kastet.

Programvareinstallasjon av sikker modus kan være nødvendig i tilfelle konfigurasjonsutvikleren har til hensikt å bruke tredjeparts (i forhold til konfigurasjonen) programkode, som utvikleren ikke kan garantere påliteligheten til. Et eksempel på slik kode er kjøringen av metodene Execute() og Compute() i tilfeller der den kjørbare koden er hentet fra omverdenen. I dette tilfellet vil en god praksis være å sette sikkermodus før du utfører disse metodene:

// Programkode genereres som skal kjøres // Det er mulig at koden lastes fra eksterne kilder // eller legges inn manuelt ExecutableCode = GetExecutedCodeFromExternalWorld(); // Aktiver sikker modus SetSafeMode(True); // Kjør potensielt farlig kode Execute(ExecutableCode); // Slå av sikker modus SetSafeMode(False);

I noen tilfeller kan Sikkermodus-innstillingene komme i konflikt med Privileged Mode-innstillingene. Et eksempel på en slik konflikt er posting av et dokument der egenskapen Privileged mode ved posting er satt, fra kode i det innebygde språket som kjøres i sikker modus. I dette tilfellet er privilegert modus deaktivert og forsøk på å aktivere den ignoreres. Som et resultat "støter" koden på det innebygde språket, som "teller" på den aktiverte privilegerte modusen, fraværet, noe som fører til feil med ikke-åpenbare årsaker til deres utseende. For å forhindre denne situasjonen deaktiverer 1C:Enterprise-systemet automatisk sikker modus for hendelsesbehandlere som er tilgjengelige i objektmodulen eller managermodulen, forutsatt at den kjørbare koden i det innebygde språket ikke er plassert i konfigurasjonsutvidelsen. Slike behandlere er merket på en spesiell måte i syntaksassistenten.

Det gir også muligheten til å deaktivere sikkermodus fra det innebygde språket (hvis programkoden som prøver å deaktivere den ikke er i en konfigurasjonsutvidelse). For å deaktivere sikker modus er det en metode SetDisableSafeMode(). Du kan sjekke at sikker modus for øyeblikket er deaktivert (automatisk eller ved å kalle en metode) ved å bruke metoden GetDisableSafeMode().

Innenfor én metode i det innebygde språket, kan det ikke være mer enn ett nivå av nesting for å sette sikker modus (ved å kalle SetSafeMode()-metoden) og sette deaktivering av sikker modus (automatisk under kjøring av hendelsesbehandlere av metadataobjekter eller ved å kalle SetDisableSafeMode()-metoden). Når du prøver å øke hekkingen, blir det gitt et unntak:

// Riktig bruk av ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Feil bruk av ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Unntak EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Unntak sluttprosedyre

Programmatisk åpning av ekstern prosessering utføres ved hjelp av det globale kontekstobjektet ExternalProcessing, som har typen External Processing Manager. For hver driftsmodus på 1C-plattformen (vanlig applikasjonsmodus og administrert applikasjonsmodus) brukes forskjellige objektmetoder for å arbeide med ekstern behandling.

Kjører ekstern behandling i normal applikasjonsmodus

I en typisk applikasjon må du bruke Create()-metoden til ExternalProcessing-objektet, som sendes det fulle navnet på den eksterne behandlingsfilen. Metoden returnerer et objekt av typen Ekstern behandling, er dette objektet den eksterne behandlingen som åpnes. Hvis du trenger å åpne et eksternt behandlingsskjema, kall deretter GetForm()-metoden på det mottatte objektet, som vil returnere hovedskjemaet, og kall deretter Open()-metoden for å åpne det.


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

I ekstern behandling må hovedskjemaet alltid være et vanlig, og det kontrollerte skjemaet må alltid være et tillegg, ellers vil ikke GetForm()-metoden fungere i normal applikasjonsmodus.

Kjører ekstern behandling i administrert applikasjonsmodus

I administrerte skjemamodus er algoritmen delt inn etter utførelseskontekst. På klienten mottar vi binære data ved å bruke det fulle navnet på den eksterne behandlingsfilen. Vi overfører de mottatte binære dataene til serveren og plasserer dem i midlertidig lagring. Deretter må du kalle opp Connect()-metoden til ExternalProcessing-objektet, som adressen for midlertidig lagring sendes til. Metoden returnerer navnet på den tilkoblede eksterne behandlingen. Vi returnerer navnet på den eksterne behandlingen til klienten, oppretter en strengbane til behandlingsskjemaet og bruker OpenForm()-metoden for å åpne det eksterne behandlingsskjemaet.

&På server
Funksjon GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Returner ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&På klient
FullFileName = ""; // Fullt navn på den eksterne behandlingsfilen.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FilData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Sikker modus for ekstern behandling

Create()- og Connect()-metodene til ExternalProcessing-objektet har en innkommende parameter SafeMode - et tegn på å koble ekstern behandling i sikker modus. Hvis parameteren ikke er spesifisert, vil tilkoblingen gjøres i sikker modus.
Sikker modus er utformet for å beskytte systemet mot å kjøre "upålitelig" programkode på serveren. Potensiell fare kommer fra ekstern prosessering eller programkode angitt av brukeren for bruk i metodene Run() og Calculate().
Sikker modus pålegger følgende begrensninger:
  • privilegert modus avbrytes hvis den ble installert;
  • forsøk på å gå inn i privilegert modus ignoreres;
  • operasjoner med COM-objekter er forbudt;
  • lasting og tilkobling av eksterne komponenter er forbudt;
  • tilgang til filsystemet er forbudt (unntatt for midlertidige filer);
  • Internett-tilgang er forbudt.
Prosesser som åpnes interaktivt utføres ikke i sikker modus, derfor anbefales det å implementere en mekanisme for å åpne eksterne prosessorer i sikker modus, samt på tillatelsesnivået for å forby brukeren å åpne eksterne prosessorer interaktivt.
For å forby interaktiv åpning av prosessering, i alle roller som er tildelt brukeren, er det nødvendig å fjerne rett "Interaktiv åpning av ekstern behandling" (se figur 1).
Figur 1. Rettigheter til å interaktivt åpne ekstern behandling/rapporter
Rettigheten "Interaktiv åpning av ekstern behandling" påvirker ikke det eksterne behandlingsobjektet på noen måte.

Programmatisk åpning av eksterne rapporter ligner på ekstern behandling, men du bør bruke det globale kontekstobjektet ExternalReports, som har typen ExternalReportsManager.