Come eseguire una stored procedure con Entity Framework 4.0

Ecco come chiamare una stored procedure con Entity Framework 4.0, il codice è preso dalla presentazione fatta all'ultimo evento di 1nn0va:

// Chiama la stored usp_Authenticate passando username e password
var db = new BlogEntities();
var user = db.ExecuteStoreQuery("exec usp_Authenticate {0},{1}",
           username, password);

Modificare lo schema di una tabella in SQL

Per chi ha un sito in hosting su Aruba conosce bene la necessità di dover specificare come schema degli oggetti del database il nome assegnato dal provider, che poi è lo stesso del db. In questi giorni mi sono imbattuto in questa problematica dovendo aggiornare questo blog all'ultima versione di BlogEngine.NET, da qui la necessità di cambiare lo schema predefinito dbo con quello fornito da Aruba. Ecco come farlo con una query SQL:

ALTER SCHEMA MSSql0001 TRANSFER dbo.be_Users

T-SQL: assegnarsi un ruolo con la stored procedure sp_addrolemember

La stored procedure sp_addrolemember viene utilizzata in SQLServer 2005 per aggiunge un utente del database, un ruolo del database, un account di accesso di Windows o un gruppo di Windows ad un ruolo di database per il database aperto nel contesto corrente.
Peccato che non esista un controllo per impedire al chiamante di eseguire la procedura su se stesso. Per evitare questo spiacevole inconveniente è necessario indicare a SQLServer di considerare attendibile il database in oggetto attraverso il seguente script sql:

ALTER DATABASE dbname SET TRUSTWORTHY ON

Quando il database è impostato su TRUSTWORTHY ON non è però possibile eseguire l'impersonate di un altro utente, se ne abbiamo la necessità dobbiamo prima impostare TRUSTWORTHY ad OFF come nell'esempio seguente:

EXECUTE AS LOGIN = 'login1';
GO
--Set TRUSTWORTHY OFF
ALTER DATABASE dbname SET TRUSTWORTHY OFF
GO
EXECUTE AS USER = 'user2';
--Execution context set to user2
GO
--Set TRUSTWORTHY ON
ALTER DATABASE dbname SET TRUSTWORTHY ON
--Reset the execution context to the previous context
REVERT;
GO

Nota: Per impostare questa opzione, è necessario essere un membro del ruolo sysadmin.


T-SQL: gestire permessi a livello di colonna

Nella gestione della sicurezza di un database può essere necessario in alcuni casi arrivare a definire dei permessi a livello di colonna.
Nell'esempio di codice Transact SQL sottostante vediamo come in SQL Server possiamo negare all'utente di tipo studente la modifica della colonna Matricola all'interno della tabella dbo.Studenti del database Universita:

USE Universita
GO
DENY UPDATE ( Matricola ) ON OBJECT::dbo.Studenti TO studente