Normaal gesproken gebruik ik bij het maken van een opgeslagen procedure het volgende als een soort sjabloon

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

Is er een manier om het verlenen van toestemming voor het uitvoeren van alleen die opgeslagen procedure op te nemen terwijl ik “bezig ben?
Bijvoorbeeld als …

Grant execute [User_Execute] 

… maar alleen voor deze opgeslagen procedure?

Ik heb enkele andere soortgelijke vragen gezien, maar ze lijken allemaal te verwijzen naar ALLE opgeslagen procedures en niet slechts één, en ik heb er ook geen gezien waar je kunt permissies specificeren binnen het create procedure script. Zelfs antwoorden over hoe ik machtigingen kan instellen zonder de GUI voor specifieke opgeslagen procedures zouden welkom zijn.

Bewerken Het bovenste antwoord wees me zeker in de goede richting, dit is in wezen wat ik zocht, ik dacht niet aan het groeperen van de opdrachten, wat ik uiteindelijk deed, de opdracht samen met mijn opgeslagen procedure samenvoegen. Hoe dan ook, ik denk dat het behoorlijk glad is.

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

Reacties

  • De code in de bewerkte tekst is geldig en het juiste antwoord op deze vraag.

Antwoord

GRANT EXECUTE ON dbo.procname TO username; 

Antwoord

truncate table Het instellen van toestemming voor objecten zoals opgeslagen procedures kan worden bereikt met:

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

U kunt echter ook beveiligingsrechten verlenen op zowel het login- als het gebruikersniveau. U wilt ALLEEN de benodigde rechten bepalen en toekennen voor de objecten die toegang vereisen (zoals uitvoering). Overweeg het gebruik van de EXECUTE AS -mogelijkheid die het nabootsen van een andere gebruiker mogelijk maakt om machtigingen te valideren die vereist zijn om de code uit te voeren ZONDER dat u alle benodigde rechten hoeft te verlenen aan alle onderliggende objecten (bijv. tafels). EXECUTE AS kan worden toegevoegd aan opgeslagen procedures, functies, triggers, enz.

Voeg als volgt toe aan de code direct in de opgeslagen procedure:

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER 

In dit geval doet u zich voor als de eigenaar van de module die wordt aangeroepen. U kunt zich ook voordoen als ZELF, OF de gebruiker die de module maakt of wijzigt OF … CALLER imperoneren, waardoor de module de machtigingen van de huidige gebruiker kan overnemen, OF … u zich voordoet als OWNER, die de toestemming van de de eigenaar van de procedure die wordt genoemd OR … imiteert “user_name”, die zich zal voordoen als een specifieke gebruiker OF … imiteert “login_name” met zal zich voordoen als een specifieke login.

MEESTAL van de tijd zul je u hoeft alleen EXECUTE rechten toe te kennen aan opgeslagen processen en vervolgens worden rechten toegekend aan alle objecten waarnaar wordt verwezen in het opgeslagen proces.

Op deze manier hoeft u GEEN geef impliciete rechten (voorbeeld: om gegevens bij te werken of extra procedures aan te roepen). Ownership Chaining regelt dit voor u. Dit is vooral handig voor dynamische sql of als u verhoogde beveiligingstaken moet maken, zoals CREATE TABLE. EXECUTE AS is een handig hulpmiddel om hiervoor te overwegen.

Dit voorbeeld kan dit allemaal helpen verduidelijken:

Maak een gebruiker aan met de naam NoPrivUser met openbare toegang tot een database (bijv. 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 

OPMERKING: DE SCHEPPER OF EIGENAAR VAN DEZE PROCEDURE ZAL TABELRECHTEN AANMAKEN binnen de doeldatabase.

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. 

Met de EXECUTE AS clausule wordt de opgeslagen procedure uitgevoerd onder de context van de object eigenaar. Deze code maakt met succes dbo.MyTable en rijen zijn succesvol ingevoegd. In dit voorbeeld heeft de gebruiker NoPrivUser absoluut geen toegekende rechten om de tabel te wijzigen, of om gegevens in deze tabel te lezen of te wijzigen.

Het duurt slechts over de rechten die nodig zijn om deze specifieke taak te voltooien, gecodeerd BINNEN de context van deze procedure.

Deze methode om opgeslagen procedures te creëren die taken kunnen uitvoeren waarvoor verhoogde beveiligingsrechten nodig zijn zonder deze rechten permanent toe te wijzen, is erg handig.

Reacties

Answer

voer de beschrijving van de afbeelding hier in

selecteer database login -> Ga naar Beveiligbaar en klik op de zoekknop zoals in de voorgaande afbeelding. Als u op de knop Zoeken klikt, vindt u het volgende venster om het type object toe te voegen.

Klik op de knop Objecttypen en u krijgt het venster “Objecttypen selecteren” met verschillende objecten. Als u nu ziet, wordt de opgeslagen procedure vermeld in het gebied met objecttypen. Nu selecteren we onze specifieke opgeslagen procedure waarvoor we toestemming willen geven.

Opmerkingen

  • Ten eerste was de vraag meer dan vijf jaar oud toen je hem beantwoordde. Dat zou prima zijn, behalve dat het OP specifiek om oplossingen vroeg die geen ' de GUI gebruiken en in een script kunnen worden ingesloten. Uw antwoord gaat daar niet op in.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *