Udostępnij przez


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:

  1. Skonfigurowanie środowiska.

  2. Tworzenie certyfikat.

  3. Utworzyć i zarejestrować procedura składowana przy użyciu certyfikat.

  4. Utwórz konto certyfikat przy użyciu certyfikat.

  5. Prawa certyfikat konta bazy danych.

  6. Wyświetlanie kontekstowe dostępu.

  7. 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