obciąć tabelę Ustawienie uprawnień do obiektów takich jak procedury składowane można wykonać za pomocą:
GRANT EXECUTE ON <schema>.<object> to <user>;
Możesz jednak także przyznać uprawnienia bezpieczeństwa zarówno na poziomie logowania, jak i na poziomie użytkownika. Będziesz chciał określić i przyznać TYLKO niezbędne prawa do obiektów wymagających dostępu (takich jak wykonanie). Rozważ skorzystanie z EXECUTE AS
możliwości, która umożliwia podszywanie się pod innego użytkownika w celu sprawdzenia uprawnień wymaganych do wykonania kodu BEZ konieczności przyznawania wszystkich niezbędnych uprawnień wszystkim bazowym obiektom (np. Tabelom). EXECUTE AS
można dodawać do procedur przechowywanych, funkcji, wyzwalaczy itp.
Dodaj do kodu w następujący sposób bezpośrednio w Procedurze składowanej:
CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER
W tym przypadku podszywasz się pod właściciela wywoływanego modułu. Możesz także podszyć się pod SELF, LUB użytkownika tworzącego lub zmieniającego moduł LUB ... imperonować CALLER, co pozwoli modułowi na przejęcie uprawnień bieżącego użytkownika, LUB ... podszywać się pod WŁAŚCICIELA, który przejmie pozwolenie właściciel procedury nazywa się OR ... personifikuje „nazwa_użytkownika”, który podszywa się pod konkretnego użytkownika LUB ... personifikuje „login_name” za pomocą personifikuje określonego loginu.
W większości przypadków wystarczy przyznać EXECUTE
uprawnienia do przechowywanych procesów, a następnie prawa są przyznawane wszystkim obiektom, do których istnieją odniesienia w przechowywanym procesie.
W ten sposób NIE musisz udzielać uprawnień domyślnych (na przykład: aktualizować dane lub wywoływać dodatkowe procy). Łańcuch własności obsługuje to za Ciebie. Jest to szczególnie przydatne w przypadku dynamicznego SQL-a lub jeśli chcesz utworzyć zadania o podwyższonym poziomie bezpieczeństwa, takie jak CREATE TABLE
. EXECUTE AS
jest przydatnym narzędziem do rozważenia.
Ten przykład może pomóc wyjaśnić to wszystko:
Utwórz użytkownika o nazwie NoPrivUser z publicznym dostępem do bazy danych (np. 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
UWAGA: TWÓRCA LUB WŁAŚCICIEL NINIEJSZEJ PROCEDURY BĘDZIE WYMAGAĆ TWORZENIA PRAW TABELI w docelowej bazie danych.
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.
Dzięki EXECUTE AS
klauzuli procedura przechowywana jest uruchamiana w kontekście właściciela obiektu. Ten kod został pomyślnie utworzony, dbo.MyTable
a wiersze zostały pomyślnie wstawione. W tym przykładzie użytkownik NoPrivUser
nie ma absolutnie żadnych przyznanych uprawnień do modyfikowania tabeli lub odczytu lub modyfikacji dowolnych danych w tej tabeli.
Przyjmuje tylko prawa potrzebne do wykonania tego konkretnego zadania zakodowanego W RAMACH tej procedury.
Ta metoda tworzenia procedur składowanych, które mogą wykonywać zadania wymagające podwyższonych uprawnień bezpieczeństwa bez trwałego przypisywania tych praw, jest bardzo przydatna.