Symptom

Föreställ dig följande:

  • Du skapar en princip med hjälp av Principbaserad hantering (PBM) i Microsoft SQL Server 2008, Microsoft SQL Server 2008 R2 eller Microsoft SQL Server 2012.

  • Utvärderingsläge för principen är Enligt schema.

  • Ett av villkoren för principen innehåller funktionen ExecuteSql() .


I det här fallet när SQL Server Agent-jobbet körs agenten genererar falsklarm och följande felmeddelande loggas i SQL Server error-loggfilen:

Fel: 34052, allvarlighetsgrad: 16 tillstånd: 1.
Principen "<namn>" har överträtts.



Obs! Det här problemet uppstår inte när du kör det här jobbet manuellt.

Orsak

Det här problemet uppstår eftersom en skapade PBM-principen överträds. PBM försätter principen brott meddelanden i felloggen som en mekanism för uppföljning. Detta betyder att du bör granska serverkonfigurationen att avgöra varför principen överträds.

Problemet orsakas av användning av funktionen ExecuteSql() i principen. Den här funktionen kan författaren principen att skapa ett villkor uttryckt i Transact-SQL och kan också köra en Transact-SQL-kod i PBM. Som standard är koden körs i säkerhetskontexten därför en mycket låg privilegierat konto ## MS_PolicyTsqlExecutionLogin ##. Det kontot ## MS_PolicyTsqlExecutionLogin ## ges inte någon behörighet för alla databasen msdb databas. När du kör ett schemalagt jobb är en av de första rapporterna som läggs automatiskt uttrycket använder [< DBName >] . Det här uttrycket orsakar princip kontrollen misslyckas.

När du kör jobbet använder SQL Server din aktuella säkerhetskontexten. Så länge du har behörighet att köra frågor i principen utvärderas korrekt det här jobbet.

Temporär lösning

Lös problemet genom att ge kontot ## MS_PolicyTsqlExecutionLogin ## rätt behörighet för att utföra de nödvändiga rapporterna.

Public-rollen är till exempel bra att vissa frågor ska köras. Den här rollen kan ändras vid behov utifrån företagets behov och företagets riktlinjer. Det är väldigt osannolikt att ändra, eftersom detta är avsett för säkerhets skull.

Mer Information

Mer information om ExecuteSQL() -funktionen finns på följande MSDN-webbplats:

Introduktion till funktionen ExecuteSQL()

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?

Tack för din feedback!

×