Normalt når jeg oppretter en lagret prosedyre, bruker jeg følgende som en slags mal

Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end 

Er det en måte å inkludere å gi eksekveringstillatelse for bare den lagrede prosedyren mens jeg er i gang?
For eksempel som …

Grant execute [User_Execute] 

… men bare for denne lagrede prosedyren?

Jeg har sett noen andre lignende spørsmål, men de ser ut til å alle henvise til ALLE lagrede prosedyrer og ikke bare en, og jeg har heller ikke sett en hvor du kan spesifisere tillatelser i create procedure -skriptet. Selv svar om hvordan jeg kan angi tillatelser uten GUI for spesifikke lagrede prosedyrer, vil være velkomne.

Rediger Det øverste svaret pekte absolutt meg i riktig retning, dette er egentlig det Jeg lette etter, jeg tenkte ikke på å gruppere kommandoene, det var det jeg endte med å gjøre, gruppere kommandoen sammen med den lagrede prosedyren. Uansett, jeg synes det er ganske glatt.

Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO 

Kommentarer

  • Koden i den redigerte teksten er gyldig og riktig svar på dette spørsmålet.

Svar

GRANT EXECUTE ON dbo.procname TO username; 

Svar

avkortetabell Innstillingstillatelse for objekter som lagrede prosedyrer kan oppnås med:

GRANT EXECUTE ON <schema>.<object> to <user>; 

Det kan imidlertid også være lurt å gi sikkerhetsrettigheter på både påloggings- og brukernivå. Du vil bestemme og gi KUN de nødvendige rettighetene til objektene som krever tilgang (for eksempel utførelse). Vurder bruk av EXECUTE AS -funksjonen som muliggjør etterligning av en annen bruker for å validere tillatelser som er nødvendige for å utføre koden UTEN å måtte gi alle nødvendige rettigheter til alle de underliggende objektene (f.eks. tabeller). EXECUTE AS kan legges til lagrede prosedyrer, funksjoner, utløsere osv.

Legg til koden som følger rett innenfor den lagrede prosedyren:

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER 

I dette tilfellet utgir du deg som eieren av modulen som blir ringt. Du kan også utgi SELV, ELLER brukeren som oppretter eller endrer modulen ELLER … imperonate CALLER, som vil gjøre det mulig for modulen å ta på seg tillatelsene til den nåværende brukeren, ELLER … utgi EIER, som vil ta tillatelse fra eieren av prosedyren som heter ELLER … etterligner «brukernavn», som vil utgi seg for en bestemt bruker ELLER … etterligner «innloggingsnavn» med vil utgi seg for en bestemt pålogging.

MEST av tiden vil du trenger bare å gi EXECUTE rettigheter til lagrede procs, og deretter blir rettigheter gitt til alle objekter som det er referert til i den lagrede proc.

På denne måten trenger du INGEN gi implisitte rettigheter (eksempel: å oppdatere data eller ringe ekstra prosesser). Eierskapskjetting håndterer dette for deg. Dette er spesielt nyttig for dynamisk sql eller hvis du trenger å opprette forhøyede sikkerhetsoppgaver som CREATE TABLE. EXECUTE AS er et praktisk verktøy å vurdere for disse.

Dette eksemplet kan bidra til å avklare alt dette:

Opprett en bruker som heter NoPrivUser med offentlig tilgang til en database (f.eks. dbadb):

USE [master]; GO CREATE LOGIN [NoPrivUser] WITH PASSWORD=N"ABC5%", DEFAULT_DATABASE=[dbadb], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; GO USE [DBAdb]; GO CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser]; GO 

MERK: SKAPER ELLER EIER AV DENNE PROSEDYREN KREVER OPPRETT TABELLRETTIGHETER i måldatabasen.

use DBAdb go CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER truncate table MyTable GO GRANT EXEC ON dbo.MyProcedure TO NoPrivUser; GO -- Now log into your database server as NoPrivUser and run the following. 

Med EXECUTE AS -satsen kjøres den lagrede prosedyren under konteksten til objekteieren. Denne koden oppretter vellykket dbo.MyTable, og rader er satt inn. I dette eksemplet har brukeren NoPrivUser absolutt ingen tildelte rettigheter til å endre tabellen, eller lese eller endre noen av dataene i denne tabellen.

Det tar bare om rettighetene som er nødvendige for å fullføre denne spesifikke oppgaven kodet INNEN for denne prosedyren.

Denne metoden for å lage lagrede prosedyrer som kan utføre oppgaver som krever forhøyede sikkerhetsrettigheter uten å tildele disse rettighetene permanent, vil være veldig nyttig.

Kommentarer

Svar

skriv inn bildebeskrivelse her

velg databasepålogging -> Gå til Sikkerbar og klikk på Søk-knappen som i forrige bilde. Når du klikker på Søk-knappen, finner du vinduet som følger følgende for å legge til typen objekt.

Klikk på Objekttyper-knappen, så får du vinduet «Velg objekttyper» med forskjellige objekter. Nå, hvis du ser, er den lagrede prosedyren oppført i området for objekttyper. Nå velger vi den spesifikke lagrede prosedyren vi vil gi tillatelse til.

Kommentarer

  • Først var spørsmålet over fem år da du svarte på det. Det ville være greit, bortsett fra at OP spesifikt ba om løsninger som ikke ' ikke bruker GUI og kan legges inn i et skript. Svaret ditt adresserer ikke det.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *