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
- Toto je stejná odpověď, jakou jste včera zveřejnili na SO , což Také jsem musel formátovat kvůli čitelnosti.
Odpovědět
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ší.