Normálně při vytváření uložené procedury používám následující jako šablonu řazení

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

Existuje způsob, jak zahrnout udělení oprávnění ke spuštění pouze této uložené proceduře, když jsem na to?
Například jako …

Grant execute [User_Execute] 

… ale pouze pro tuto uloženou proceduru?

Viděl jsem nějaké další podobné otázky, ale zdá se, že všechny odkazují na VŠECHNY uložené procedury a ne jen na jednu, ani jsem neviděl jednu, kde můžete určit oprávnění uvnitř skriptu create procedure. Dokonce i odpovědi na to, jak mohu nastavit oprávnění bez grafického uživatelského rozhraní pro konkrétní uložené procedury, by byly vítány.

Upravit Nejlepší odpověď mě určitě nasměrovala správným směrem, to je v podstatě to, co Hledal jsem, nemyslel jsem na dávkování příkazů, což je to, co jsem nakonec udělal, dávkování příkazu spolu s mojí uloženou procedurou. Každopádně si myslím, že je to docela úhledné.

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

Komentáře

  • Kód uvedený v upraveném textu je platný a má správnou odpověď na tuto otázku.

Odpověď

GRANT EXECUTE ON dbo.procname TO username; 

Odpověď

zkrácená tabulka Nastavení oprávnění pro objekty, jako jsou uložené procedury, lze provést pomocí:

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

Můžete však také chtít udělit práva zabezpečení na přihlašovací i uživatelská úroveň. Budete chtít určit a udělit POUZE potřebná práva pro objekty, které vyžadují přístup (například spuštění). Zvažte použití EXECUTE AS schopnosti, která umožňuje zosobnění jiného uživatele k ověření oprávnění, která jsou vyžadována ke spuštění kódu BEZ nutnosti udělit všechna potřebná práva všem podkladovým objektům (např. tabulky). EXECUTE AS lze přidat k uloženým procedurám, funkcím, spouštěčům atd.

Přidejte do kódu následujícím způsobem přímo v rámci uložené procedury:

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER 

V tomto případě vydáváte za vlastníka volaného modulu. Můžete také vydávat SEBE, NEBO uživatele vytvářejícího nebo pozměňujícího modul NEBO … imperonovat CALLER, který umožní modulu převzít oprávnění aktuálního uživatele NEBO … zosobnit VLASTNÍKA, který převezme svolení vlastník procedury, která se volá NEBO … vydává se za „uživatelské_jméno“, které se vydává za konkrétního uživatele NEBO … vydává se za „přihlašovací_jméno“, za které se vydává za konkrétní přihlašovací jméno.

Většinou budete stačí pouze udělit EXECUTE práva k uloženým procs a poté se práva udělí všem objektům, na které se odkazuje v rámci uloženého proc.

Tímto způsobem NEMUSÍTE udělit implicitní práva (příklad: aktualizovat data nebo zavolat další procs). Řetězení vlastnictví to zvládne za vás. To je obzvláště užitečné pro dynamický sql nebo pokud potřebujete vytvořit zvýšené bezpečnostní úkoly, jako je CREATE TABLE. EXECUTE AS je užitečný nástroj, který je třeba uvážit.

Tento příklad vám může všechno objasnit:

Vytvořte uživatele s názvem NoPrivUser pomocí veřejný přístup k databázi (např. 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 

POZNÁMKA: Tvůrce nebo vlastník tohoto postupu VYŽADUJE VYTVOŘENÍ PRÁV TABULKY v cílové databázi.

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. 

S klauzulí EXECUTE AS je uložená procedura spuštěna v kontextu vlastníka objektu. Tento kód úspěšně vytvoří dbo.MyTable a řádky se úspěšně vloží. V tomto příkladu nemá uživatel NoPrivUser absolutně žádná udělená práva k úpravám tabulky ani ke čtení či úpravám jakýchkoli údajů v této tabulce.

Trvá to jen o právech potřebných k dokončení tohoto konkrétního úkolu kódovaného V RÁMCI tohoto postupu.

Tato metoda vytváření uložených procedur, které mohou provádět úkoly vyžadující zvýšená bezpečnostní práva bez trvalého přiřazení těchto práv, je velmi užitečná.

Komentáře

Odpovědět

sem zadejte popis obrázku

vyberte přihlášení do databáze -> Přejděte na Zabezpečené a klikněte na tlačítko Hledat jako na předchozím obrázku. Po kliknutí na tlačítko Hledat najdete následující okno pro přidání typu objektu.

Klikněte na tlačítko Typy objektů a zobrazí se okno „Vybrat typy objektů“ s různými objekty. Nyní, pokud vidíte, je uložená procedura uvedena v oblasti typů objektů. Nyní vybereme naši konkrétní uloženou proceduru, ke které chceme poskytnout povolení.

Komentáře

  • Za prvé, otázka byla stará více než pět let, když jste na ni odpověděli. To by bylo v pořádku, až na to, že OP konkrétně požádal o řešení, která ' t nepoužívají GUI a mohou být vložena do skriptu. Vaše odpověď to neřeší.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *