Samouczek: Procedury przechowywane za pomocą certyfikatu podpisywania
Ten samouczek przedstawia podpisywania procedury przechowywane przy użyciu certyfikat generowanych przez SQL Server.
Ostrzeżenie
Aby uruchomić kod w tym samouczku musi mieć oba mieszany tryb zabezpieczeń skonfigurowane i AdventureWorks2008R2 Baza danych zainstalowana.Scenariusz
procedura składowana za pomocą certyfikat podpisywania jest przydatne, gdy chcesz wymagać uprawnień do procedura składowana, ale nie chcesz jawnie prawa użytkownika.Chociaż można wykonać tego zadania w inny sposób, takich jak użycie jako wykonywanie instrukcja przy użyciu certyfikat umożliwia używanie śledzenia do znalezienia wywołującego oryginalnej procedura składowana.Zapewnia wysoki poziom inspekcji, szczególnie podczas zabezpieczeń lub operacje Data Definition Language (DDL).
Można utworzyć certyfikat w master bazy danych, aby umożliwić uprawnień na poziomie serwera, lub można utworzyć certyfikat w dowolnej baz danych użytkowników, aby umożliwić bazy danych poziom uprawnień.W tym scenariuszu użytkownik z żadnych praw na podstawie tabel musi mieć dostęp procedura składowana w AdventureWorks2008R2 bazy danych i chcesz inspekcji wstępnej dostępu obiektu.Zamiast używać innych metod łańcuch własności, spowoduje utworzenie serwera i konto użytkownika bez praw do podstawowych obiektów bazy danych i konto użytkownika bazy danych z prawami do tabela i procedura składowana.procedura składowana i drugiego konta użytkownika bazy danych będzie zabezpieczony przy użyciu certyfikat.Drugie konto bazy danych mają dostęp do wszystkich obiektów i udzielić dostępu do procedura składowana do pierwszego konta użytkownika w bazie danych.
W tym scenariuszu będzie najpierw utworzyć certyfikat bazy danych, procedura składowana, a użytkownik, a następnie spowoduje przetestowanie procesu, wykonaj następujące kroki:
Skonfigurowanie środowiska.
Tworzenie certyfikat.
Utworzyć i zarejestrować procedura składowana przy użyciu certyfikat.
Utwórz konto certyfikat przy użyciu certyfikat.
Prawa certyfikat konta bazy danych.
Wyświetlanie kontekstowe dostępu.
Resetuj środowiska.
Każdy blok kodu w tym przykładzie jest wyjaśnione w wierszu.Aby skopiować pełny przykład, zobacz Pełny przykład na końcu tego samouczka.
1.Configure the Environment
Aby zestaw kontekstu początkowego przykładu, w SQL Server Management Studio Otwórz nową kwerendę i uruchom poniższy kod, aby otworzyć AdventureWorks2008R2 bazy danych.Ten kod zmienia kontekst bazy danych do AdventureWorks2008R2 i tworzy nowe konto serwera logowania i bazy danych użytkownika (TestCreditRatingUser), przy użyciu hasła.
USE AdventureWorks2008R2;
GO
-- Set up a login for the test user
CREATE LOGIN TestCreditRatingUser
WITH PASSWORD = 'ASDECd2439587y'
GO
CREATE USER TestCreditRatingUser
FOR LOGIN TestCreditRatingUser;
GO
Więcej informacji na temat instrukcja CREATE USER, zobacz Utwórz użytkownika (Transact-SQL).Więcej informacji na temat instrukcja tworzenia logowania, zobacz Utwórz logowania (Transact-SQL).
2.Create a Certificate
Certyfikaty można utworzyć przy użyciu serwera master bazy danych jako kontekst przy użyciu baza danych użytkownika lub oba.Istnieje wiele opcji do zabezpieczania certyfikat.Aby uzyskać więcej informacji o certyfikatach, zobacz Tworzenie certyfikatu (Transact-SQL).
Uruchom ten kod do tworzenia certyfikat bazy danych i zabezpieczyć go przy użyciu hasła.
CREATE CERTIFICATE TestCreditRatingCer
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Credit Rating Records Access',
EXPIRY_DATE = '12/05/2010';
GO
3.Create and Sign a Stored Procedure Using the Certificate
Użyć następującego kodu, aby utworzyć procedura składowana, która wybiera danych z Vendor tabela w Purchasing schemat bazy danych, ograniczanie dostępu do tylko spółki o zdolności kredytowej 1.Należy zauważyć, że pierwsza sekcja procedura składowana są wyświetlane w kontekście konta użytkownika uruchomiona procedura składowana jest tylko pojęcia wykazać.Nie jest wymagane dla spełnienia wymogów.
CREATE PROCEDURE TestCreditRatingSP
AS
BEGIN
-- Show who is running the stored procedure
SELECT SYSTEM_USER 'system Login'
, USER AS 'Database Login'
, NAME AS 'Context'
, TYPE
, USAGE
FROM sys.user_token
-- Now get the data
SELECT AccountNumber, Name, CreditRating
FROM Purchasing.Vendor
WHERE CreditRating = 1
END
GO
Uruchomić ten kod do procedura składowana w bazie danych do podpisania certyfikat, przy użyciu hasła.
ADD SIGNATURE TO TestCreditRatingSP
BY CERTIFICATE TestCreditRatingCer
WITH PASSWORD = 'pGFD4bb925DGvbd2439587y';
GO
Więcej informacji na temat procedur przechowywanych, zobacz Procedury przechowywane (aparat bazy danych).
Aby uzyskać więcej informacji dotyczących schematów bazy danych, zobacz Schematy (aparat bazy danych).
Więcej informacji na temat podpisywania procedur przechowywanych, zobacz Dodaj podpis (Transact-SQL).
4.Create a Certificate Account Using the Certificate
Uruchomić ten kod, aby utworzyć użytkownika bazy danych (TestCreditRatingcertificateAccount) z certyfikat.To konto ma nie logowanie do serwera i będzie ostatecznie sterowanie dostępem do tabel.
USE AdventureWorks2008R2;
GO
CREATE USER TestCreditRatingcertificateAccount
FROM CERTIFICATE TestCreditRatingCer;
GO
5.Grant the Certificate Account Database Rights
Uruchomić ten kod, aby udzielić TestCreditRatingcertificateAccount prawa do tabela bazowa i procedura składowana.
GRANT SELECT
ON Purchasing.Vendor
TO TestCreditRatingcertificateAccount;
GO
GRANT EXECUTE
ON TestCreditRatingSP
TO TestCreditRatingcertificateAccount;
GO
Aby uzyskać więcej informacji dotyczących przyznawania uprawnień do obiektów, zobacz UDZIEL (Transact-SQL).
6.Display the Access Context
Aby wyświetlić prawa skojarzone z dostępu procedura składowana, uruchom poniższy kod, aby udzielić praw, aby uruchomić procedura składowana, aby TestCreditRatingUser użytkownika.
GRANT EXECUTE
ON TestCreditRatingSP
TO TestCreditRatingUser;
GO
Następnie należy uruchomić następujący kod do uruchomienia procedura składowana jako dbo logowania używane na serwerze.Obserwować wyjściowe informacje kontekstu użytkownika.Zostaną wyświetlone dbo konta jako kontekst ze swoich własnych praw, a nie przez członkostwo grupy.
EXECUTE TestCreditRatingSP;
GO
Uruchom poniższy kod umożliwia EXECUTE AS instrukcja stać się TestCreditRatingUser kont i uruchomić procedura składowana.To czas zobaczą kontekst użytkownika jest ustawiona na kontekst MAPOWANEGO na certyfikat użytkownika.
EXECUTE AS LOGIN = 'TestCreditRatingUser';
GO
EXECUTE TestCreditRatingSP;
GO
To pokazuje inspekcję dostępne, ponieważ podpisane procedura składowana.
Ostrzeżenie
Istnieją dwa sposoby użytkownika, aby przełączyć kontekstów w bazie danych: SETUSER lub jako EXECUTEAby uzyskać więcej informacji na temat przełączania kontekstu, zobacz WYKONYWANIE jako vs. SETUSER.
7.Reset the Environment
Następujący kod używa REVERT instrukcja do zwracania kontekstu bieżącego konta do dboi resetuje środowiska.
REVERT;
GO
DROP PROCEDURE TestCreditRatingSP;
GO
DROP USER TestCreditRatingcertificateAccount;
GO
DROP USER TestCreditRatingUser;
GO
DROP LOGIN TestCreditRatingUser;
GO
DROP CERTIFICATE TestCreditRatingCer;
GO
Aby uzyskać więcej informacji na temat instrukcja PRZYWRACANIA Zobacz PRZYWRÓĆ (Transact-SQL).
Pełny przykład
Ta sekcja zawiera kod pełny przykład.
/* Step 1 - Open the AdventureWorks2008R2 database */
USE AdventureWorks2008R2;
GO
-- Set up a login for the test user
CREATE LOGIN TestCreditRatingUser
WITH PASSWORD = 'ASDECd2439587y'
GO
CREATE USER TestCreditRatingUser
FOR LOGIN TestCreditRatingUser;
GO
/* Step 2 - Create a certificate in the AdventureWorks2008R2 database */
CREATE CERTIFICATE TestCreditRatingCer
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Credit Rating Records Access',
EXPIRY_DATE = '12/05/2010';
GO
/* Step 3 - Create a stored procedure and
sign it using the certificate */
CREATE PROCEDURE TestCreditRatingSP
AS
BEGIN
-- Shows who is running the stored procedure
SELECT SYSTEM_USER 'system Login'
, USER AS 'Database Login'
, NAME AS 'Context'
, TYPE
, USAGE
FROM sys.user_token;
-- Now get the data
SELECT AccountNumber, Name, CreditRating
FROM Purchasing.Vendor
WHERE CreditRating = 1;
END
GO
ADD SIGNATURE TO TestCreditRatingSP
BY CERTIFICATE TestCreditRatingCer
WITH PASSWORD = 'pGFD4bb925DGvbd2439587y';
GO
/* Step 4 - Create a database user for the certificate.
This user has the ownership chain associated with it. */
USE AdventureWorks2008R2;
GO
CREATE USER TestCreditRatingcertificateAccount
FROM CERTIFICATE TestCreditRatingCer;
GO
/* Step 5 - Grant the user database rights */
GRANT SELECT
ON Purchasing.Vendor
TO TestCreditRatingcertificateAccount;
GO
GRANT EXECUTE
ON TestCreditRatingSP
TO TestCreditRatingcertificateAccount;
GO
/* Step 6 - Test, using the EXECUTE AS statement */
GRANT EXECUTE
ON TestCreditRatingSP
TO TestCreditRatingUser;
GO
-- Run the procedure as the dbo user, notice the output for the type
EXEC TestCreditRatingSP;
GO
EXECUTE AS LOGIN = 'TestCreditRatingUser';
GO
EXEC TestCreditRatingSP;
GO
/* Step 7 - Clean up the example */
REVERT;
GO
DROP PROCEDURE TestCreditRatingSP;
GO
DROP USER TestCreditRatingcertificateAccount;
GO
DROP USER TestCreditRatingUser;
GO
DROP LOGIN TestCreditRatingUser;
GO
DROP CERTIFICATE TestCreditRatingCer;
GO
Zobacz także