Database
 sql >> Database >  >> RDS >> Database

Esecuzione di attività di manutenzione del database SQL utilizzando SQLCMD

Questo articolo riguarda lo sviluppo di una comprensione avanzata dell'utilità Sqlcmd che consente di eseguire comandi T-SQL direttamente dal prompt dei comandi senza la necessità di SSMS (SQL Server Management Studio).

L'articolo evidenzia anche l'importanza di utilizzare Sqlcmd per eseguire alcune attività di database di livello avanzato che altrimenti richiederebbero passaggi aggiuntivi, ad es. connettersi al database tramite uno strumento di database preinstallato come SSMS (SQL Server Management Studio) o SSDT (SQL Server Data Tools) seguito da prepararlo per eseguire gli script SQL sui database desiderati.

L'utilità Sqlcmd può far risparmiare molto tempo agli sviluppatori di database e ai DBA poiché possono eseguire gli script SQL richiesti direttamente dalla riga di comando.

Panoramica di base di SQLCMD

Esaminiamo alcune nozioni di base dell'utilità Sqlcmd se non la conosci.

Definizione semplice

Sqlcmd è uno strumento da riga di comando che consente di eseguire comandi T-SQL direttamente dal prompt dei comandi.

Definizione Microsoft

Secondo la documentazione Microsoft, l'utilità Sqlcmd è un'utilità della riga di comando per l'esecuzione interattiva ad hoc di istruzioni e script Transact-SQL e per automatizzare le attività di scripting Transact-SQL.

Usi di base di SQLCMD

Di seguito sono riportati alcuni degli usi di base di Sqlcmd descritti nella documentazione Microsoft:

  1. Sqlcmd può eseguire istruzioni T-SQL (al prompt dei comandi)
  2. Sqlcmd può eseguire procedure definite dall'utente o di sistema (al prompt dei comandi)
  3. Sqlcmd può anche eseguire file di script SQL salvati (al prompt dei comandi)
  4. Sqlcmd può connettersi a più istanze di SQL Server ed eseguire script
  5. Sqlcmd può scrivere l'output delle istruzioni T-SQL in un file di testo

Fare riferimento al mio articolo "Nozioni di base sull'esecuzione di istruzioni T-SQL dalla riga di comando utilizzando SQLCMD ', che è una guida sull'implementazione dell'utilità Sqlcmd per eseguire alcune delle attività T-SQL quotidiane di base.

Prerequisiti

Questo articolo presuppone che tu disponga delle conoscenze di base delle attività di manutenzione del database eseguite tramite istruzioni T-SQL, nonché di una conoscenza di base dell'utilità Sqlcmd.

Questo articolo presuppone inoltre che il database di esempio "Università" sia già stato creato nell'istanza SQL desiderata.

Il mio articolo "Nozioni di base sull'esecuzione di istruzioni T-SQL dalla riga di comando utilizzando SQLCMD ' ti aiuterà a ottenere una solida comprensione delle basi di Sqlcmd prima di passare ai suoi usi più avanzati.

Usi avanzati di SQLCMD

Oltre agli usi di base, Sqlcmd ha i seguenti usi avanzati:

  1. Sqlcmd può eseguire attività di manutenzione del database
  2. Sqlcmd può eseguire attività di database su più istanze SQL
  3. Sqlcmd può automatizzare le attività di manutenzione del database
  4. Sqlcmd può automatizzare gli script T-SQL su più istanze

Attività database 1:creazione di un utente database di sola lettura

Diamo un'occhiata a un'attività di database molto importante per la creazione di un utente che ha solo accesso in sola lettura per un database (chiameremo questo utente "Sola lettura").

Requisito:aggiunta dell'utente ReadOnly al database di esempio

Immagina che un DBA o uno sviluppatore di database sia stato incaricato di aggiungere l'utente di sola lettura a un database creato in precedenza.

Soddisferanno questo requisito utilizzando Sqlcmd.

Principio del privilegio minimo e utente di sola lettura

Lo scopo della creazione dell'utente di sola lettura è rispettare The Principio del privilegio minimo e, secondo la documentazione Microsoft, dovresti sempre seguire questo principio quando concedi le autorizzazioni agli utenti del database. Concedi le autorizzazioni minime necessarie affinché un utente o un ruolo esegua una determinata attività.

Quindi, nella maggior parte dei casi, dovremo creare un utente del database in modo tale che i suoi permessi siano limitati alla sola possibilità di leggere gli oggetti del database, senza possibilità di modificarli.

Ciò è anche molto utile negli scenari di analisi e report di database, in cui a un utente del database che accederà ai dati dovrebbe essere concesso solo il diritto di leggere le informazioni. Concedere più diritti di quelli richiesti, come le autorizzazioni per aggiungere o eliminare oggetti, in questo caso può comportare rischi per la sicurezza.

Passaggi per creare l'utente del database di sola lettura

Di solito, un nuovo utente del database di sola lettura viene creato come segue:

  1. Accedi a SQL Server con diritti sufficienti per creare un nuovo utente del database
  2. Seleziona il database desiderato
  3. Crea un nuovo accesso con password in SQL Server
  4. Crea un nuovo utente per quell'accesso
  5. Concedi autorizzazioni di sola lettura a quell'Utente per il database richiesto

Possiamo illustrare questo processo come segue:

Ha già configurato il database di esempio ("Università")

Come accennato in precedenza, questo articolo presuppone che il database di esempio "Università" sia già stato creato.

Fare riferimento al mio precedente articolo "Nozioni di base sull'esecuzione di istruzioni T-SQL dalla riga di comando utilizzando SQLCMD ' per creare un database di esempio o utilizzare il seguente codice T-SQL per configurare un database di esempio chiamato 'Università':

[expand title =”Codice “]

-- (1) Create the ‘University’ sample database

CREATE DATABASE University;

GO


USE University


-- (2) Create Course table

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES T WHERE T.TABLE_NAME='Course')

DROP TABLE dbo.Course

CREATE TABLE [dbo].[Course] (

[CourseId] INT IDENTITY (1, 1) NOT NULL,

[Name] VARCHAR (30) NOT NULL,

[Detail] VARCHAR (200) NULL,

CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED ([CourseId] ASC)

);


-- (3) Create Student table

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES T WHERE T.TABLE_NAME='Student')

DROP TABLE dbo.Student

CREATE TABLE [dbo].[Student] (

[StudentId] INT IDENTITY (1, 1) NOT NULL,

[Name] VARCHAR (30) NULL,

[Course] VARCHAR (30) NULL,

[Marks] INT NULL,

[ExamDate] DATETIME2 (7) NULL,

CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ([StudentId] ASC)

);


-- (4) Populate Course table

SET IDENTITY_INSERT [dbo].[Course] ON

INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (1, N'DevOps for Databases', N'This is about DevOps for Databases')

INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (2, N'Power BI Fundamentals', N'This is about Power BI Fundamentals')

INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (3, N'T-SQL Programming', N'About T-SQL Programming')

INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (4, N'Tabular Data Modeling', N'This is about Tabular Data Modeling')

INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (5, N'Analysis Services Fundamentals', N'This is about Analysis Services Fundamentals')

SET IDENTITY_INSERT [dbo].[Course] OFF


-- (5) Populate Student table

SET IDENTITY_INSERT [dbo].[Student] ON

INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (1, N'Asif', N'Database Management System', 80, N'2016-01-01 00:00:00')

INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (2, N'Peter', N'Database Management System', 85, N'2016-01-01 00:00:00')

INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (3, N'Sam', N'Database Management System', 85, N'2016-01-01 00:00:00')

INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (4, N'Adil', N'Database Management System', 85, N'2016-01-01 00:00:00')

INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (5, N'Naveed', N'Database Management System', 90, N'2016-01-01 00:00:00')

SET IDENTITY_INSERT [dbo].[Student] OFF


GO

[/espandi]

Utilizzo di Sqlcmd per aggiungere un utente di sola lettura

Prima di tutto, dovrai invocare l'utilità Sqlcmd tramite la finestra "Esegui comando" dopo esserti assicurato di disporre dei diritti sufficienti per creare un utente del database.

Sqlcmd -S PC

Come risultato dell'esecuzione di questo comando, verrai connesso all'istanza SQL senza nome predefinita, se ne hai una. In caso contrario, menziona \ per connettersi all'istanza SQL desiderata.

Dopo esserti connesso all'istanza SQL desiderata, aggiungi un nuovo utente del database con diritti di sola lettura chiamato "ReadOnly" al database "University" utilizzando il codice seguente:

USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

GO

Controlla l'utente del database appena creato (Sola lettura)

Aprire SSMS (SQL Server Management Studio) e connettersi a Motore di database di SQL Server utilizzando le credenziali seguenti:

Nome utente: Sola lettura

Password:b1GS3crt00

Di conseguenza, verrai connesso a SQL Database Engine.

Quando sei connesso a SQL Database Engine, espandi il nodo Database in Esplora oggetti e fai clic sul Database di Ateneo.

Quindi, scegli Utenti in Sicurezza per vedere l'utente del database "Sola lettura" come segue:

Attività database 2:eliminazione dell'utente di sola lettura del database utilizzando SQLCMD

Questa attività del database riguarda l'eliminazione di un utente da un database tramite l'utilità Sqlcmd.

Requisito:eliminare l'utente di sola lettura dal database di esempio

Considera un nuovo requisito:eliminare un utente del database con accesso in sola lettura dal database di esempio.

Passaggi per eliminare l'utente del database di sola lettura

Il processo generale per eliminare l'utente di sola lettura appena creato insieme al suo accesso è il seguente:

  1. Accedi a SQL Server con diritti sufficienti per creare ed eliminare un utente del database
  2. Seleziona il database desiderato
  3. Rimuovi l'utente di sola lettura dal ruolo Lettore dati
  4. Elimina l'utente di sola lettura dal database
  5. Elimina l'accesso in sola lettura da SQL Server

Utilizzo di Sqlcmd per eliminare l'utente di sola lettura (con accesso)

Assicurati che tutte le altre connessioni al database "Università" tramite l'utente di sola lettura siano chiuse.

Connettiti all'istanza SQL utilizzando Sqlcmd ed esegui il codice seguente al prompt dei comandi per chiudere tutte le sessioni correnti per l'accesso di sola lettura (se connesso all'istanza SQL che è stata precedentemente utilizzata per creare l'utente di sola lettura)

SELECT session_id FROM sys.dm_exec_sessions where login_name='ReadOnly'

GO

Dovrai controllare quale session_id viene restituito e abbandonare la connessione in base a tale session_id:

KILL 55

GO

Si prega di notare che '55' è usato qui come esempio. Dovrai eliminare qualsiasi session_id che stai ricevendo sul tuo computer quando connesso all'istanza SQL desiderata.

Quindi, esegui il codice seguente per eliminare l'utente del database e accedere:

Use University

EXEC sp_droprolemember 'db_datareader', 'ReadOnly'

EXEC sp_dropuser ReadOnly

EXEC sp_droplogin ReadOnly

GO

Di conseguenza, l'utente del database ReadOnly dovrebbe essere eliminato correttamente.

Controlla l'utente abbandonato (Sola lettura)

Prova a connetterti a SQL Server utilizzando le seguenti credenziali:

Nome utente:Sola lettura

Password:b1GS3crt00

Il tentativo di connessione non riuscito risultante dal tentativo di connessione a SQL Server utilizzando l'accesso di sola lettura dimostra che questo account di accesso e l'utente del database sono stati rimossi correttamente.

In questo modo, con l'aiuto di Sqlcmd, abbiamo rimosso un utente del database con accesso in sola lettura semplicemente eseguendo del codice al prompt dei comandi senza la necessità di utilizzare SSMS (SQL Server Management Studio).

Attività del database 3:creazione di un utente del database con accesso in sola lettura in più istanze SQL

Esaminiamo i vantaggi dell'utilizzo di un file di script SQL chiamato tramite l'utilità Sqlcmd per aggiungere un utente del database con accesso in sola lettura a più istanze SQL per il database di esempio.

Requisito:aggiungere l'utente di sola lettura per più istanze per il database di esempio

In qualità di sviluppatore di database o DBA, hai il compito di aggiungere un utente del database con accesso in sola lettura al database di esempio per più istanze SQL tramite uno script che utilizza Sqlcmd.

Pre-condizioni

Questa attività presuppone che sul computer siano installate almeno due istanze SQL e che entrambe dispongano del database di esempio "Università", mentre è necessario creare un nome utente del database ReadOnly (con accesso in sola lettura) per entrambi i database.

Creazione di un database di esempio su un'altra istanza SQL

Salta questo passaggio se hai già creato il database di esempio "Università" su una seconda istanza SQL.

Connettiamoci prima a un'altra istanza SQL eseguendo il codice seguente nella finestra Esegui comando:

sqlcmd –S <computername>\<sqlinstancename>

Una volta connesso all'istanza SQL desiderata, utilizzare il codice dall'inizio dell'articolo per creare il database "Università" (o fare riferimento al mio articolo "Nozioni di base sull'esecuzione di istruzioni T-SQL dalla riga di comando utilizzando SQLCMD ').

Crea un file di script per aggiungere l'utente del database di sola lettura

Copia lo script qui sotto e salvalo nel Blocco note come AddReadOnyUniversityDatabaseUser.sql file in C:\SQLScripts cartella a scopo di test.

-- This script creates a database user named ReadOnly with read-only access for the University database

USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

Connettiti alla prima istanza SQL ed esegui lo script tramite Sqlcmd

Apri il prompt dei comandi digitando "cmd ' nella casella di ricerca. Quindi, esegui la seguente riga:

Sqlcmd –S . –i c:\SQLScripts\AddReadOnyUniversityDatabaseUser.sql

In cui si "." (punto) indica un'istanza SQL predefinita senza nome che può essere sostituita da un'istanza SQL specifica a scelta.

Connettiti alla seconda istanza SQL ed esegui lo script tramite Sqlcmd

Quindi, apri la riga di comando e usa il codice seguente per eseguire lo script SQL che creerà un utente del database su un'altra istanza SQL:

Sqlcmd –S .\SQLTAB –i c:\SQLScripts\AddReadOnyUniversityDatabaseUser.sql

Tieni presente che "SQLTAB" dovrebbe essere sostituito con il nome di un'istanza SQL installata sul tuo computer.

Congratulazioni! Hai creato correttamente un utente del database con accesso in sola lettura per il database di esempio su più istanze SQL semplicemente eseguendo un file di script utilizzando l'utilità Sqlcmd.

Abbiamo imparato a semplificare varie attività del database utilizzando Sqlcmd sia in modalità diretta (digitando il codice T-SQL una volta connesso a un'istanza SQL desiderata) sia in modalità indiretta (quando Sqlcmd esegue uno script su un database su un'istanza SQL desiderata dalla riga di comando ).

Cose da fare

Ora che sei pronto per eseguire attività del database come l'aggiunta di un utente del database con autorizzazioni di sola lettura utilizzando l'utilità sqlcmd, puoi migliorare ulteriormente le tue abilità provando le seguenti cose:

  1. Prova a creare un utente del database con accesso in sola lettura per il database di esempio SQLBookShop menzionato nel mio articolo escludendo le stored procedure menzionate dopo la descrizione dell'utilizzo dell'utilità sqlcmd.
  2. Prova a creare un database e un utente del database con accesso in sola lettura tramite un file di script eseguito tramite l'utilità sqlcmd per il database SQLBookShop, inclusa una qualsiasi delle procedure memorizzate menzionate nel mio articolo.
  3. Crea un file di script ed eseguilo di prova utilizzando l'utilità Sqlcmd per rimuovere un utente di sola lettura aggiunto in precedenza dal database di esempio University su più istanze SQL.

Strumento utile:

dbForge Studio per SQL Server:potente IDE per la gestione, l'amministrazione, lo sviluppo, il reporting e l'analisi dei dati di SQL Server.