lunedì 4 dicembre 2017

Creazione User in Sql Server

Per una installazione ho avuto necessità di gestire più utenti all'interno dello stesso database.

Quindi richiamare un dato con :
SELECT * FROM . invece del normale SELECT * FROM dove l'user dbo è sottinteso.

i comandi da eseguire sono i seguenti ( ho messo i comandi perché quando si creano 50 utenti si fa prima tramite i comandi che tramite l'SqlManagement) :


USE [master] 
GO
-- Creazione utente per il login a livella di istanza
CREATE LOGIN ['<login>'] WITH PASSWORD=N'<password>', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 
GO

-- Da qui tutti i comandi sono specifici per il database
USE ['<Database>']
GO
-- Creazione utente del DB collegato all'utente di login
CREATE USER ['<user>'] FOR LOGIN ['<login>'] WITH DEFAULT_SCHEMA=['<schema>']
GO

-- Creazione Schema
CREATE SCHEMA ['<schema>'] AUTHORIZATION ['<user>']
GO

-- Aggiunta del ruolo db_ddladmin all'utente altrimenti non può creare e gestire le tabelle
EXEC sp_addrolemember N'db_ddladmin', N'<user>'
GO

Nel mio esempio reale '<login>','<password>','<user>' e '<schema>' avevano tutti lo stesso valore. (es. Ditta1)

Con questa struttura ho un solo database con tanti schema all'interno.

Con questo procedimento, per quanto riguarda Sigla, ho la stringa di connessione fatta così : 
DSN=DB1;UID=DITTA1;PWD=DITTA1;
DSN=DB1;UID=DITTA2;PWD=DITTA2;
ecc.

A livello di supporto una volta collegato al database DB1 posso lavorare con le tabelle usando :
SELECT * FROM DITTA1.DPCONFIG
Significa leggere la tabella DPCONFIG dello schema DITTA1 del database DB1

Aggiunta :
a seguito di un RESTORE DATABASE, dopo il CREATE LOGIN è sufficiente fare :

ALTER USER <user> WITH LOGIN=[<login>], DEFAULT_SCHEMA=[<schema>]

per riassociare l'utente del db all'utente dell'istanza 

mercoledì 15 febbraio 2017

Trasferimento dati fra versioni diverse di SQL Server

Come è risaputo su Sql Server non è possibile ripristinare un file di backup creato con una versione più recente.

Certe volte non è possibile neppure usare software di terze parti in quanto i due server non comunicano direttamente fra loro.

Sql Server Management Studio ci viene incontro. Permette infatti la creazione di script di creazione e di popolamento delle tabelle.

Si inizia sulla macchina su cui dobbiamo fare il backup, cliccando con il tasto destro sul database da copiare e scegliendo la voce "Tasks" e successivamente la voce "Generate Scripts".
A questo punto, tramite un wizard, viene richiesto se trasferire tutto il database o scegliere manualmente le tabelle/viste da trasferire.

Nella pagina successiva si può scegliere la destinazione del file che conterrà tutti comandi SQL.
Per default Management Studio esporta solo lo script per ricreare la struttura della tabella.
Premendo il tasto "Advanced" è possibile indicare che si vogliono anche i dati.
E' sufficiente impostare a "Schema and Data" la voce "Types of data to script".
Impostare anche a False la voce "Script of USE Database" se vogliamo importare i dati in un database con un nome diverso.
Impostando a True la voce "Script Indexes" vengono generate le istruzioni per la creazione degli indici collegati alle tabelle.
Al termine dell'operazione avremo un file .sql con tutte le istruzioni SQL per la creazione delle tabelle con i loro indici e il loro popolamento.

A questo punto è necessario copiare il file sulla macchina su cui si vuole ripristinare i dati, accedere al prompt dei comandi e digitare le seguenti istruzioni:
SQLCMD [-S server] [-U utente] [-P password] [-d database] [-i nome_file_sql]
Esempio:
SQLCMD -S localhost -U sa -P 12345678 -d DITTA1 -i c:\temp\ditta1.sql