Normaalisti kun luon tallennetun menettelyn, käytän seuraavaa lajittelumallina
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end
Onko mahdollista sisällyttää suoritusoikeuden myöntäminen vain kyseiselle tallennetulle menettelylle, kun olen siinä?
Esimerkiksi kuten …
Grant execute [User_Execute]
… mutta vain tälle tallennetulle menettelylle?
Olen nähnyt joitain muita vastaavia kysymyksiä, mutta ne kaikki näyttävät viittaavan KAIKKIIN tallennettuihin toimintoihin eikä vain yhteen, enkä ole nähnyt sellaista, missä voit määrittää käyttöoikeudet komentosarjan create procedure
sisällä. Jopa vastaukset siitä, kuinka voin määrittää käyttöoikeudet ilman GUI: tä tietyille tallennetuille menettelyille, ovat tervetulleita.
Muokkaa Ylin vastaus osoitti minut varmasti oikeaan suuntaan, tämä on pohjimmiltaan mitä Etsin, en ajatellut komentojen jakamista, minkä päädyin tekemään, erittämällä komennon yhdessä tallennettujen menettelyjen kanssa. Joka tapauksessa mielestäni se on melko liukas.
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO
Kommentit
- Muokatussa tekstissä annettu koodi on kelvollinen ja oikea vastaus tähän kysymykseen.
Vastaa
GRANT EXECUTE ON dbo.procname TO username;
Vastaa
katkaise taulukko Lupien asettaminen kohteille, kuten tallennetuille menettelyille, voidaan suorittaa seuraavasti:
GRANT EXECUTE ON <schema>.<object> to <user>;
Voit kuitenkin haluta myöntää suojausoikeudet myös osoitteessa sekä kirjautumis- että käyttäjätasolla. Haluat määrittää ja myöntää VAIN tarvittavat oikeudet kohteille, jotka tarvitsevat pääsyn (kuten suorittaminen). Harkitse EXECUTE AS
-ominaisuuden käyttöä, joka sallii toisena henkilönä esiintymisen toisena henkilönä validoidakseen koodin suorittamiseen tarvittavat käyttöoikeudet ILMAN tarvitsematta myöntää kaikkia tarvittavia oikeuksia kaikille taustalla oleville kohteille (esim. taulukot). EXECUTE AS
voidaan lisätä tallennettuihin toimintoihin, toimintoihin, laukaisimiin jne.
Lisää koodiin seuraavasti suoraan tallennetun menettelyn sisällä:
CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER
Tässä tapauksessa esiintyy jäljiteltävän moduulin omistajana. Voit myös esiintyä itsenäisenä TAI käyttäjänä, joka luo tai muuttaa moduulia TAI … pakottaa CALLERia, mikä mahdollistaa moduulin ottavan vastaan nykyisen käyttäjän oikeudet, TAI … esiintyä OMISTAJAKSI, joka ottaa vastaan käyttäjän luvan menettelyn omistaja kutsutaan TAI … esiintyy ”käyttäjänimi”, joka esiintyy tietyksi käyttäjänä. TAI … esiintyy ”kirjautumisnimi”, jolla esiintyy tietty kirjautumistunnus.
Suurimman osan ajasta, Sinun tarvitsee vain myöntää EXECUTE
oikeudet tallennettuihin proci-tiedostoihin ja sitten oikeudet myönnetään kaikille objekteille, joihin viitataan tallennetussa procissa.
Tällä tavalla sinun ei tarvitse anna implisiittisiä oikeuksia (esimerkki: päivittää tietoja tai kutsua ylimääräisiä prosesseja). Omistusketju hoitaa tämän sinulle. Tämä on erityisen hyödyllistä dynaamisen sql: n yhteydessä tai jos sinun on luotava korkeammat suojaustehtävät, kuten CREATE TABLE
. EXECUTE AS
on kätevä työkalu näiden huomioimiseksi.
Tämä esimerkki voi auttaa selventämään tätä kaikkea:
Luo NoPrivUser-niminen käyttäjä julkinen pääsy tietokantaan (esim. 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
HUOMAUTUS: TÄNNEN MENETTELYN LUOTTAJA TAI OMISTAJA VAADII LUOVA TAULUKON OIKEUKSIA kohdetietokannassa.
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.
Lausekkeella EXECUTE AS
tallennettu menettely suoritetaan objektin omistajan yhteydessä. Tämä koodi luo onnistuneesti dbo.MyTable
ja rivit lisätään. Tässä esimerkissä käyttäjällä NoPrivUser
ei ole mitään oikeuksia muokata taulukkoa tai lukea tai muokata mitään tämän taulukon tietoja.
Se vie vain tämän menettelyn yhteydessä koodatun tehtävän suorittamiseen tarvittavista oikeuksista.
Tämä tapa luoda tallennettuja menettelyjä, jotka voivat suorittaa korotettuja suojausoikeuksia edellyttäviä tehtäviä määrittämättä kyseisiä oikeuksia pysyvästi, on hyödyllinen.
Kommentit
- Tämä on sama vastaus, jonka lähetit SO: han eilen , joka Minun täytyi myös muotoilla luettavuus.
Vastaa
valitse tietokannan sisäänkirjautuminen -> Siirry suojattuun ja napsauta Haku-painiketta kuten edellisessä kuvassa. Napsauttamalla Haku-painiketta löydät seuraavan ikkunan lisätäksesi objektityypin.
Napsauta Objektityypit-painiketta ja saat Valitse objektityypit -ikkunan, jossa on useita objekteja. Jos näet, tallennettu menettely on lueteltu kohdetyyppialueella. Nyt valitsemme tietyn tallennetun menettelyn, jolle haluamme antaa luvan.
Kommentit
- Ensinnäkin kysymys oli yli viisi vuotta vanha, kun vastait siihen. Se olisi hieno, paitsi että OP pyysi nimenomaan ratkaisuja, jotka eivät ' käytä graafista käyttöliittymää ja jotka voidaan upottaa komentosarjaan. Vastauksessasi ei puututa siihen.