Questo articolo è la prima parte di un tutorial su come utilizzare i certificati per autorizzare l’esecuzione di stored procedure da un’altra istanza di Sql Server 2005.
Iniziamo col creare un database di prova. Questo sara il DB da cui lanceremo una stored procedure per leggere dati presenti in un altro DB.
/*
* Creazione del database PrimoDB
*/
PRINT 'Creazione database PrimoDB'
CREATE DATABASE PrimoDB
GO
Creiamo un nuovo utente e la stored procedure. Nella creazione della SP utilizziamo l'espressione EXECUTE AS che indica a Sql Server 2005 di eseguire la SP sotto le credenziali dell'utente indicato. Si noti inoltre che la SP tenterà di leggere i dati da un secondo DB (SecondoDB) che tra breve andremo a creare...
USE PrimoDB
GO
PRINT 'Creazione dell''utente'
CREATE LOGIN Utente
WITH PASSWORD = 'password',
CHECK_POLICY = OFF,
CHECK_EXPIRATION = OFF,
DEFAULT_DATABASE = PrimoDB
CREATE USER Utente
FROM LOGIN Utente
GO
PRINT 'Creazione della stored-procedure'
CREATE PROC LeggiDatiRemoti(@idImpiegato int)
WITH EXECUTE AS 'Utente' --questo utente non è presente in SecondoDB
AS
select * from SecondoDB.RisorseUmane.Impiegati
where ID = @idImpiegato
GO
Andiamo ora a creare il database SecondoDB. Al suo interno dichiariamo uno schema RisorseUmane ed inseriamo una tabella Impiegati, popolata con dati fittizi.
/*
* Creazione del database SecondoDB
*/
PRINT 'Creazione database SecondoDB'
CREATE DATABASE SecondoDB
GO
------ Creazione dei dati
USE SecondoDB
GO
CREATE SCHEMA RisorseUmane
GO
PRINT 'Creazione tabella RisorseUmane.Impiegati'
CREATE TABLE RisorseUmane.Impiegati (
ID int PRIMARY KEY IDENTITY,
nome nvarchar(30),
cognome nvarchar(30))
GO
PRINT 'Popolamento tabella RisorseUmane.Impiegati'
INSERT RisorseUmane.Impiegati VALUES ('Mario','Rossi')
INSERT RisorseUmane.Impiegati VALUES ('Giuseppe','Verdi')
INSERT RisorseUmane.Impiegati VALUES ('Francesca','Neri')
PRINT 'Creazione database SecondoDB'
CREATE DATABASE SecondoDB
GO
------ Creazione dei dati
USE SecondoDB
GO
CREATE SCHEMA RisorseUmane
GO
PRINT 'Creazione tabella RisorseUmane.Impiegati'
CREATE TABLE RisorseUmane.Impiegati (
ID int PRIMARY KEY IDENTITY,
nome nvarchar(30),
cognome nvarchar(30))
GO
PRINT 'Popolamento tabella RisorseUmane.Impiegati'
INSERT RisorseUmane.Impiegati VALUES ('Mario','Rossi')
INSERT RisorseUmane.Impiegati VALUES ('Giuseppe','Verdi')
INSERT RisorseUmane.Impiegati VALUES ('Francesca','Neri')
Nella parte 2 testeremo le varie connessioni e implementeremo l'autenticazione tramite certificato.