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

Kørsel af SQL-databasevedligeholdelsesopgaver ved hjælp af SQLCMD

Denne artikel handler om at udvikle en avanceret forståelse af Sqlcmd-værktøjet, som lader dig køre T-SQL-kommandoer direkte fra kommandoprompten uden at skulle bruge SSMS (SQL Server Management Studio).

Artiklen fremhæver også vigtigheden af ​​at bruge Sqlcmd til at udføre nogle databaseopgaver på avanceret niveau, som ellers ville kræve yderligere trin, f.eks. at få forbindelse til databasen via et forudinstalleret databaseværktøj såsom SSMS (SQL Server Management Studio) eller SSDT (SQL Server Data Tools) efterfulgt af at gøre den klar til at køre SQL-scripts mod den eller de ønskede databaser.

Sqlcmd-værktøjet kan være en stor tidsbesparelse for databaseudviklere og DBA'er, da de kan køre de nødvendige SQL-scripts direkte fra kommandolinjen.

SQLCMD grundlæggende oversigt

Lad os gennemgå nogle grundlæggende funktioner i Sqlcmd-værktøjet, hvis du ikke er bekendt med det.

Simpel definition

Sqlcmd er et kommandolinjeværktøj, der lader dig køre T-SQL-kommandoer direkte fra kommandoprompten.

Microsoft definition

Ifølge Microsoft-dokumentationen er Sqlcmd-værktøjet et kommandolinjeværktøj til ad hoc, interaktiv udførelse af Transact-SQL-sætninger og scripts og til automatisering af Transact-SQL-scriptopgaver.

Grundlæggende anvendelser af SQLCMD

Følgende er nogle af Sqlcmds grundlæggende anvendelser som dækket i Microsoft-dokumentationen:

  1. Sqlcmd kan køre T-SQL-sætninger (ved kommandoprompten)
  2. Sqlcmd kan udføre brugerdefinerede eller systemprocedurer (ved kommandoprompten)
  3. Sqlcmd kan også køre gemte SQL-scriptfiler (ved kommandoprompten)
  4. Sqlcmd kan oprette forbindelse til flere SQL Server-instanser og køre scripts
  5. Sqlcmd kan skrive output fra T-SQL-sætninger til en tekstfil

Se venligst min artikel "Grundlæggende om at køre T-SQL-sætninger fra kommandolinje ved hjælp af SQLCMD ', som er en guide til implementering af Sqlcmd-værktøjet til at udføre nogle af de grundlæggende daglige T-SQL-opgaver.

Forudsætninger

Denne artikel antager, at du har den grundlæggende viden om databasevedligeholdelsesopgaver udført via T-SQL-sætninger, samt en vis grundlæggende forståelse af Sqlcmd-værktøjet.

Denne artikel antager også, at eksempeldatabasen 'University' allerede er oprettet på din ønskede SQL-instans.

Min artikel "Grundlæggende om at køre T-SQL-sætninger fra kommandolinje ved hjælp af SQLCMD ' vil hjælpe dig med at få en solid forståelse af Sqlcmd grundlæggende, før du går videre til dets mere avancerede anvendelser.

Avanceret brug af SQLCMD

Udover de grundlæggende anvendelser har Sqlcmd følgende avancerede anvendelser:

  1. Sqlcmd kan køre databasevedligeholdelsesopgaver
  2. Sqlcmd kan køre databaseopgaver på flere SQL-instanser
  3. Sqlcmd kan automatisere databasevedligeholdelsesopgaver
  4. Sqlcmd kan automatisere T-SQL-scripts på flere forekomster

Databaseopgave 1:Oprettelse af en skrivebeskyttet databasebruger

Lad os tage et kig på en meget vigtig databaseopgave med at oprette en bruger, der kun har skrivebeskyttet adgang til en database (vi kalder denne bruger 'ReadOnly').

Krav:tilføjelse af skrivebeskyttet bruger til eksempeldatabasen

Forestil dig, at en DBA eller databaseudvikler har fået til opgave at tilføje ReadOnly-brugeren til en tidligere oprettet database.

De vil opfylde dette krav ved at bruge Sqlcmd.

Princippet om mindst privilegium og skrivebeskyttet bruger

Formålet med at oprette ReadOnly-brugeren er at overholde The Princippet om mindste privilegium , og ifølge Microsoft-dokumentationen bør du altid følge dette princip, når du giver tilladelser til databasebrugere. Giv de minimumstilladelser, der er nødvendige for, at en bruger eller rolle kan udføre en given opgave.

Så i de fleste tilfælde bliver vi nødt til at oprette en databasebruger på en sådan måde, at denne brugers tilladelser er begrænset til kun at kunne læse databaseobjekterne uden mulighed for at ændre dem.

Dette er også meget nyttigt i databaserapport- og analysescenarier, hvor en databasebruger, der skal have adgang til dataene, kun skal have rettighederne til at læse informationen. Tildeling af flere rettigheder end påkrævet – såsom tilladelser til at tilføje eller slippe objekter – kan udgøre sikkerhedsrisici i dette tilfælde.

Trin til at oprette ReadOnly-databasebrugeren

Normalt oprettes en ny ReadOnly-databasebruger som følger:

  1. Log ind på SQL Server med tilstrækkelige rettigheder til at oprette en ny databasebruger
  2. Vælg den ønskede database
  3. Opret et nyt login med adgangskode i SQL Server
  4. Opret en ny bruger til det pågældende login
  5. Giv den pågældende bruger skrivebeskyttet tilladelse til den påkrævede database

Vi kan illustrere denne proces som følger:

Allerede opsat prøvedatabase ('Universitet')

Som nævnt ovenfor antager denne artikel, at prøvedatabasen 'Universitet' allerede er oprettet.

Se venligst min tidligere artikel "Grundlæggende om at køre T-SQL-sætninger fra kommandolinje ved hjælp af SQLCMD ' for at oprette en prøvedatabase eller bruge følgende T-SQL-kode til at opsætte en prøvedatabase kaldet 'University':

[expand title =”Kode “]

-- (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

[/udvid]

Brug af Sqlcmd til at tilføje ReadOnly-bruger

Først og fremmest skal du starte Sqlcmd-værktøjet gennem vinduet 'Kør kommando' efter at have sikret dig, at du har tilstrækkelige rettigheder til at oprette en databasebruger.

Sqlcmd -S PC

Som et resultat af at køre denne kommando, vil du få forbindelse til den standard unavngivne SQL-instans – hvis du har en. Ellers skal du nævne \ for at oprette forbindelse til den ønskede SQL-instans.

Når du er tilsluttet den ønskede SQL-instans, skal du tilføje en ny databasebruger med skrivebeskyttede rettigheder kaldet 'ReadOnly' til 'University'-databasen ved at bruge følgende kode:

USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

GO

Tjek den nyoprettede databasebruger (skrivebeskyttet)

Åbn SSMS (SQL Server Management Studio), og opret forbindelse til SQL Server Database Engine ved hjælp af følgende legitimationsoplysninger:

Brugernavn: Skrivebeskyttet

Adgangskode:b1GS3crt00

Som et resultat bliver du forbundet til SQL Database Engine.

Når du er forbundet til SQL Database Engine, skal du udvide databasenoden i Objekt Explorer og klikke på University Database.

Vælg derefter Brugere under Sikkerhed for at se 'ReadOnly'-databasebruger som følger:

Databaseopgave 2:Slet Database ReadOnly-bruger ved hjælp af SQLCMD

Denne databaseopgave handler om at droppe en bruger fra en database via Sqlcmd-værktøjet.

Krav:slip skrivebeskyttet bruger fra eksempeldatabasen

Overvej et nyt krav – at droppe en databasebruger med skrivebeskyttet adgang fra eksempeldatabasen.

Trin til at droppe skrivebeskyttet databasebruger

Den generelle proces med at droppe den nyoprettede ReadOnly-bruger sammen med dens login er som følger:

  1. Log på SQL Server med tilstrækkelige rettigheder til at oprette og slette en databasebruger
  2. Vælg den ønskede database
  3. Fjern skrivebeskyttet bruger fra rollen Datalæser
  4. Slet skrivebeskyttet bruger fra databasen
  5. Slet skrivebeskyttet login fra SQL Server

Brug af Sqlcmd til at droppe ReadOnly-bruger (med login)

Sørg for, at alle andre forbindelser til 'Universitet'-databasen gennem ReadOnly-bruger er lukket.

Opret forbindelse til SQL-forekomsten ved hjælp af Sqlcmd, og kør følgende kode ved kommandoprompten for at lukke alle aktuelle sessioner for ReadOnly-login (når forbundet til SQL-instansen, som tidligere blev brugt til at oprette ReadOnly-brugeren)

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

GO

Du bliver nødt til at kontrollere, hvilket session_id der returneres og afbryde forbindelsen baseret på det session_id:

KILL 55

GO

Bemærk venligst, at '55' er brugt her som et eksempel. Du bliver nødt til at droppe det session_id, du får på din maskine, når du er tilsluttet den ønskede SQL-instans.

Kør derefter følgende kode for at slippe databasebrugeren og logge på:

Use University

EXEC sp_droprolemember 'db_datareader', 'ReadOnly'

EXEC sp_dropuser ReadOnly

EXEC sp_droplogin ReadOnly

GO

Som et resultat heraf skulle databasebrugeren ReadOnly blive slettet.

Tjek den mistede bruger (skrivebeskyttet)

Prøv at oprette forbindelse til SQL Server ved hjælp af følgende legitimationsoplysninger:

Brugernavn:Skrivebeskyttet

Adgangskode:b1GS3crt00

Det mislykkede forbindelsesforsøg som følge af forsøg på at oprette forbindelse til SQL Server ved hjælp af ReadOnly-login beviser, at denne login- og databasebruger er blevet fjernet.

På denne måde har vi ved hjælp af Sqlcmd fjernet en databasebruger med skrivebeskyttet adgang ved blot at køre noget kode ved kommandoprompten uden at skulle bruge SSMS (SQL Server Management Studio).

Databaseopgave 3:Oprettelse af en databasebruger med skrivebeskyttet adgang i flere SQL-forekomster

Lad os undersøge fordelene ved at bruge en SQL-scriptfil kaldet gennem Sqlcmd-værktøjet til at tilføje en databasebruger med skrivebeskyttet adgang til flere SQL-instanser til prøvedatabasen.

Krav:Tilføj skrivebeskyttet bruger til flere forekomster til eksempeldatabase

Som databaseudvikler eller DBA har du til opgave at tilføje en databasebruger med skrivebeskyttet adgang til eksempeldatabasen for flere SQL-instanser via et script ved hjælp af Sqlcmd.

Forudsætninger

Denne opgave forudsætter, at der er mindst to SQL-instanser installeret på din maskine, og at de begge har prøvedatabasen 'University', mens et databasebrugernavn ReadOnly (med skrivebeskyttet adgang) skal oprettes for begge databaser.

Oprettelse af en eksempeldatabase på en anden SQL-instans

Spring dette trin over, hvis du allerede har oprettet eksempeldatabasen 'Universitet' på en anden SQL-instans.

Lad os først oprette forbindelse til en anden SQL-instans ved at køre følgende kode i vinduet Kør kommando:

sqlcmd –S <computername>\<sqlinstancename>

Når du er forbundet til den ønskede SQL-instans, skal du bruge koden fra begyndelsen af ​​artiklen til at oprette 'University'-databasen (eller se min artikel 'Grundlæggende om at køre T-SQL-sætninger fra kommandolinjen ved hjælp af SQLCMD ').

Opret en scriptfil for at tilføje ReadOnly-databasebruger

Kopier scriptet nedenfor, og gem det i Notesblok somAdReadOnyUniversityDatabaseUser.sql fil i C:\SQLScripts mappe til testformål.

-- 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

Opret forbindelse til den første SQL-instans, og kør scriptet gennem Sqlcmd

Åbn kommandoprompten ved at skrive 'cmd ' i søgefeltet. Kør derefter følgende linje:

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

Hvor "." (punktum) angiver en standard unavngiven SQL-instans, som kan erstattes af en specifik SQL-instans efter eget valg.

Opret forbindelse til den anden SQL-instans, og kør scriptet gennem Sqlcmd

Åbn derefter kommandolinjen og brug følgende kode til at køre SQL-scriptet, som vil oprette en databasebruger på en anden SQL-instans:

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

Bemærk venligst, at 'SQLTAB' skal erstattes med navnet på en SQL-instans, der er installeret på din maskine.

Tillykke! Du har med succes oprettet en databasebruger med skrivebeskyttet adgang til eksempeldatabasen på flere SQL-instanser ved blot at køre en scriptfil ved hjælp af Sqlcmd-værktøjet.

Vi har lært at forenkle forskellige databaseopgaver ved at bruge Sqlcmd i både direkte tilstand (indtastning af T-SQL-kode, når den er forbundet til en ønsket SQL-instans) og indirekte tilstand (når Sqlcmd kører et script mod en database på en ønsket SQL-instans fra kommandolinjen ).

Ting at gøre

Nu hvor du er klar til at køre databaseopgaver såsom tilføjelse af en databasebruger med skrivebeskyttede tilladelser ved hjælp af sqlcmd-værktøjet, kan du forbedre dine færdigheder yderligere ved at prøve følgende ting:

  1. Prøv at oprette en databasebruger med skrivebeskyttet adgang til eksempeldatabasen SQLBookShop nævnt i min artikel, med undtagelse af de lagrede procedurer, der er nævnt efterfølgende beskrivelsen af ​​brugen af ​​sqlcmd-værktøjet.
  2. Prøv at oprette en database og en databasebruger med skrivebeskyttet adgang via en scriptfil, der køres gennem værktøjet sqlcmd til SQLBookShop-databasen, inklusive en af ​​de lagrede procedurer, der er nævnt i min artikel.
  3. Opret en scriptfil, og testkør den ved hjælp af Sqlcmd-værktøjet til at fjerne en tidligere tilføjet skrivebeskyttet bruger fra eksempeldatabasen University på flere SQL-instanser.

Nyttigt værktøj:

dbForge Studio til SQL Server – kraftfuld IDE til SQL Server-administration, administration, udvikling, datarapportering og analyse.


  1. Oracle 'Partition By' og 'Row_Number' nøgleord

  2. Sådan skriver du til en CSV-fil ved hjælp af Oracle SQL*Plus

  3. Hvordan får du førende jokertegn-fuldtekstsøgninger til at fungere i SQL Server?

  4. Fejlfinding:For mange omdirigeringer