Normalt när jag skapar en lagrad procedur använder jag följande som en mallmall

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

Finns det ett sätt att inkludera att bevilja exekveringsbehörighet endast för den lagrade proceduren medan jag är på det?
Till exempel som …

Grant execute [User_Execute] 

… men bara för den här lagrade proceduren?

Jag har sett några andra liknande frågor men de verkar alla hänvisa till ALLA lagrade procedurer och inte bara en, och jag har inte heller sett någon där du kan ange behörigheter i create procedure -skriptet. Även svar om hur jag kan ställa in behörigheter utan GUI för specifika lagrade procedurer skulle vara välkomna.

Redigera Det översta svaret visade mig verkligen i rätt riktning, det här är i princip vad Jag letade efter, jag tänkte inte på att gruppera kommandona, det är vad jag slutade med, gruppera kommandot tillsammans med min lagrade procedur. Hur som helst, jag tycker att det är ganska smidigt.

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

Kommentarer

  • Koden i den redigerade texten är giltig och rätt svar på denna fråga.

Svar

GRANT EXECUTE ON dbo.procname TO username; 

Svar

avkortningstabell Inställningsbehörighet för objekt som lagrade procedurer kan göras med:

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

Du kanske också vill bevilja säkerhetsrättigheter på både inloggnings- och användarnivå. Du vill bestämma och bevilja ENDAST de nödvändiga rättigheterna för de objekt som kräver åtkomst (t.ex. exekvering). Överväg att använda EXECUTE AS -funktionen som gör det möjligt att imitera en annan användare för att validera behörigheter som krävs för att köra koden utan att behöva ge alla nödvändiga rättigheter till alla underliggande objekt (t.ex. tabeller). EXECUTE AS kan läggas till lagrade procedurer, funktioner, utlösare etc.

Lägg till koden enligt följande direkt inom den lagrade proceduren:

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER 

I det här fallet imiterar du ägaren till den modul som anropas. Du kan också utge sig för att SELF, ELLER användaren som skapar eller ändrar modulen ELLER … imperonate CALLER, vilket gör det möjligt för modulen att ta på sig behörigheterna för den aktuella användaren, ELLER … imitera OWNER, som kommer att ta tillstånd från ägare till proceduren som heter OR … imitera ”användarnamn”, vilket kommer att imitera en specifik användare ELLER … imitera ”inloggningsnamn” med kommer att imitera en specifik inloggning.

MESTA av tiden kommer du att behöver bara bevilja EXECUTE rättigheter till lagrade procs och sedan beviljas rättigheter till alla objekt som refereras till i den lagrade proc.

På detta sätt behöver du INTE ge implicita rättigheter (exempel: att uppdatera data eller ringa ytterligare processer). Ägarkedjan hanterar detta åt dig. Detta är särskilt användbart för dynamisk SQL eller om du behöver skapa förhöjda säkerhetsuppgifter som CREATE TABLE. EXECUTE AS är ett praktiskt verktyg att tänka på för dessa.

Detta exempel kan hjälpa till att klargöra allt detta:

Skapa en användare som heter NoPrivUser med allmän tillgång till en databas (t.ex. 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 

OBS: SKAPARE ELLER ÄGARE AV DETTA FÖRFARANDE KRÄVER SKAPA TABELLRÄTTIGHETER 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 körs den lagrade proceduren under objektets ägare. Denna kod skapar framgångsrikt dbo.MyTable och rader infogas. I detta exempel har användaren NoPrivUser absolut inga beviljade rättigheter att modifiera tabellen, eller läsa eller modifiera någon av uppgifterna i denna tabell.

Det tar bara om de rättigheter som behövs för att slutföra denna specifika uppgift kodad INOM ramen för denna procedur.

Denna metod för att skapa lagrade procedurer som kan utföra uppgifter som kräver förhöjda säkerhetsrättigheter utan att permanent tilldela dessa rättigheter kommer att vara mycket användbart.

Kommentarer

Svar

ange bildbeskrivning här

välj databasinloggning -> Gå till Säker och klicka på Sök-knappen som i föregående bild. När du klickar på knappen Sök hittar du fönstret som följer för att lägga till typen av objekt.

Klicka på knappen Objekttyper så får du fönstret ”Välj objekttyper” med olika objekt. Nu, om du ser, visas lagrad procedur i objekttyperna. Nu väljer vi vår specifika lagrade procedur som vi vill ge tillstånd för.

Kommentarer

  • För det första var frågan över fem år när du svarade på den. Det skulle vara bra, förutom att OP specifikt efterfrågade lösningar som inte ' inte använder GUI och kan bäddas in i ett skript. Ditt svar tar inte upp det.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *