Stored procedure autenticate tramite certificato (2/2)
11 July 07 06:10 PM | marcomariotti | with no comments

Nella prima parte del tutorial abbiamo creato un utente (Utente) ed una stored procedure (LeggiDatiRemoti) sul database PrimoDB. Questa stored procedure va a leggere una tabella che si trova in un secondo database (SecondoDB) ed utilizza le crederenziali dell'utente Utente. Siccome l'utente non è autorizzato, il batch seguente si conclude con un messaggio di errore:

/*
* Prova esecuzione stored procedure
*/

USE PrimoDB
GO

exec LeggiDatiRemoti 1 -- Questa operazione non e' autorizzata!

Siamo finalmente giunti al nocciolo del tutorial: il codice seguente crea un certificato e lo usa per firmare la stored procedure.

/*
* Ecco il certificato!
*/

PRINT 'Creazione del certificato'

CREATE CERTIFICATE Certificato
ENCRYPTION BY PASSWORD = 'PasswordSegretissima'
WITH SUBJECT = 'Un bel certificato',
START_DATE = '01/01/2007',
EXPIRY_DATE = '01/01/2009';
GO

------ Aggiunta del certificato alla stored procedure
ADD SIGNATURE TO LeggiDatiRemoti
BY CERTIFICATE Certificato
WITH PASSWORD = 'PasswordSegretissima'
GO

Dopo aver contrassegnato la procedura, è necessario esportare la chiave pubblica del certificato in un file di testo e, successivamente, importare la stessa chiave nel database SecondoDB.

------ Backup della chiave pubblica del certificato
BACKUP CERTIFICATE Certificato
TO FILE = 'C:\Certificato.pub'
GO

------ Importazione della chiave pubblica del certificato
USE SecondoDB
GO

CREATE CERTIFICATE CertificatoImportato
FROM FILE = 'C:\Certificato.pub'
GO

L'ultimo passo è creare un utente di SecondoDB basato sul certificato e dotarlo dei permessi opportuni. A questo punto, la procedura di PrimoDB potrà leggere i dati che si trovano su SecondoDB senza problemi di sorta (provare per credere!)

------ Creazione di un utente basato sul certificato importato
CREATE USER UtenteCertificato
FROM CERTIFICATE CertificatoImportato
GO

GRANT AUTHENTICATE TO UtenteCertificato
GRANT SELECT ON RisorseUmane.Impiegati TO UtenteCertificato

/*
* Prova esecuzione stored procedure
*/

USE PrimoDB
GO

exec LeggiDatiRemoti 1 -- Ora l'operazione è autorizzata!

Filed under:
Stored procedure autenticate tramite certificato (1/2)
09 July 07 11:56 AM | marcomariotti | 1 comment(s)

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.

Filed under:

This Blog

Archives

Siti consigliati

Syndication