sql >> Databasteknik >  >> RDS >> Database

Köra SQL-databasunderhållsuppgifter med SQLCMD

Den här artikeln handlar om att utveckla en avancerad förståelse av verktyget Sqlcmd som låter dig köra T-SQL-kommandon direkt från kommandotolken utan att behöva SSMS (SQL Server Management Studio).

Artikeln lyfter också fram vikten av att använda Sqlcmd för att utföra vissa databasuppgifter på avancerad nivå som annars skulle kräva ytterligare steg, t.ex. bli ansluten till databasen via ett förinstallerat databasverktyg som SSMS (SQL Server Management Studio) eller SSDT (SQL Server Data Tools) följt av att göra den redo att köra SQL-skript mot den eller de önskade databaserna.

Verktyget Sqlcmd kan vara en stor tidsbesparing för databasutvecklare och DBA:er eftersom de kan köra de nödvändiga SQL-skripten direkt från kommandoraden.

SQLCMD Grundläggande översikt

Låt oss gå igenom några grunder i Sqlcmd-verktyget om du inte är bekant med det.

Enkel definition

Sqlcmd är ett kommandoradsverktyg som låter dig köra T-SQL-kommandon direkt från kommandotolken.

Microsoft definition

Enligt Microsofts dokumentation är verktyget Sqlcmd ett kommandoradsverktyg för ad hoc, interaktiv exekvering av Transact-SQL-satser och skript och för att automatisera Transact-SQL-skriptuppgifter.

Grundläggande användningar av SQLCMD

Följande är några av Sqlcmds grundläggande användningsområden som täcks av Microsoft-dokumentationen:

  1. Sqlcmd kan köra T-SQL-satser (vid kommandotolken)
  2. Sqlcmd kan köra användardefinierade eller systemprocedurer (vid kommandotolken)
  3. Sqlcmd kan också köra sparade SQL-skriptfiler (vid kommandotolken)
  4. Sqlcmd kan ansluta till flera SQL Server-instanser och köra skript
  5. Sqlcmd kan skriva utdata från T-SQL-satser till en textfil

Se min artikel "Grunderna för att köra T-SQL-satser från kommandoraden med SQLCMD ', som är en guide för att implementera verktyget Sqlcmd för att utföra några av de grundläggande dagliga T-SQL-uppgifterna.

Förutsättningar

Den här artikeln förutsätter att du har den grundläggande kunskapen om databasunderhållsuppgifter som utförs via T-SQL-satser, samt en viss grundläggande förståelse för verktyget Sqlcmd.

Den här artikeln förutsätter också att exempeldatabasen "University" redan har skapats på din önskade SQL-instans.

Min artikel "Grunderna för att köra T-SQL-satser från kommandoraden med SQLCMD ' hjälper dig att få en gedigen förståelse av Sqlcmds grunder innan du går vidare till dess mer avancerade användningsområden.

Avancerad användning av SQLCMD

Förutom de grundläggande användningsområdena har Sqlcmd följande avancerade användningsområden:

  1. Sqlcmd kan köra databasunderhållsuppgifter
  2. Sqlcmd kan köra databasuppgifter på flera SQL-instanser
  3. Sqlcmd kan automatisera databasunderhållsuppgifter
  4. Sqlcmd kan automatisera T-SQL-skript på flera instanser

Databasuppgift 1:Skapa en skrivskyddad databasanvändare

Låt oss ta en titt på en mycket viktig databasuppgift att skapa en användare som bara har skrivskyddad åtkomst för en databas (vi kallar den här användaren "ReadOnly").

Krav:lägga till ReadOnly-användare till exempeldatabasen

Föreställ dig att en DBA- eller databasutvecklare har fått i uppdrag att lägga till ReadOnly-användaren till en tidigare skapad databas.

De kommer att uppfylla detta krav genom att använda Sqlcmd.

Principen om minsta privilegium och skrivskyddad användare

Syftet med att skapa ReadOnly-användaren är att följa The Principen om minsta privilegium , och enligt Microsofts dokumentation bör du alltid följa denna princip när du beviljar behörigheter till databasanvändare. Ge de minsta behörigheter som krävs för att en användare eller roll ska kunna utföra en given uppgift.

Så i de flesta fall måste vi skapa en databasanvändare på ett sådant sätt att denna användares behörigheter begränsas till att endast kunna läsa databasobjekten, utan möjlighet att ändra dem.

Detta är också till stor hjälp i databasrapporter och analysscenarier, där en databasanvändare som ska få åtkomst till data endast ska ges rättigheter att läsa informationen. Att bevilja fler rättigheter än vad som krävs – till exempel behörigheter att lägga till eller släppa objekt – kan utgöra säkerhetsrisker i det här fallet.

Steg för att skapa en skrivskyddad databasanvändare

Vanligtvis skapas en ny skrivskyddad databasanvändare enligt följande:

  1. Logga in på SQL Server med tillräckliga rättigheter för att skapa en ny databasanvändare
  2. Välj önskad databas
  3. Skapa en ny inloggning med lösenord i SQL Server
  4. Skapa en ny användare för den inloggningen
  5. Ge skrivskyddad behörighet till den användaren för den nödvändiga databasen

Vi kan illustrera denna process på följande sätt:

Redan konfigurerat exempeldatabas ('Universitet')

Som nämnts ovan antar den här artikeln att exempeldatabasen "University" redan har skapats.

Se min tidigare artikel "Grunderna för att köra T-SQL-satser från kommandoraden med SQLCMD ' för att skapa en exempeldatabas eller använd följande T-SQL-kod för att ställa in en exempeldatabas som heter 'University':

[expand title =”Kod "]

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

[/expand]

Använder Sqlcmd för att lägga till skrivskyddad användare

Först och främst måste du anropa Sqlcmd-verktyget genom fönstret "Kör kommando" efter att ha kontrollerat att du har tillräckliga rättigheter för att skapa en databasanvändare.

Sqlcmd -S PC

Som ett resultat av att köra det här kommandot blir du ansluten till den förvalda namnlösa SQL-instansen – om du har en. Annars nämner du \ för att ansluta till önskad SQL-instans.

När du är ansluten till den önskade SQL-instansen lägger du till en ny databasanvändare med skrivskyddade rättigheter som heter "ReadOnly" till "University"-databasen genom att använda följande kod:

USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

GO

Kontrollera den nyskapade databasanvändaren (ReadOnly)

Öppna SSMS (SQL Server Management Studio) och anslut till SQL Server Database Engine med hjälp av följande referenser:

Användarnamn: Skrivskyddad

Lösenord:b1GS3crt00

Som ett resultat kommer du att vara ansluten till SQL Database Engine.

När du är ansluten till SQL Database Engine, expandera Databases-noden i Objektutforskaren och klicka på University Database.

Välj sedan Användare under Säkerhet för att se "ReadOnly" databasanvändare enligt följande:

Databasuppgift 2:Ta bort skrivskyddad databasanvändare med SQLCMD

Denna databasuppgift handlar om att ta bort en användare från en databas via verktyget Sqlcmd.

Krav:släpp skrivskyddad användare från exempeldatabasen

Överväg ett nytt krav – att ta bort en databasanvändare med skrivskyddad åtkomst från exempeldatabasen.

Steg för att släppa skrivskyddad databasanvändare

Den allmänna processen att ta bort den nyskapade ReadOnly-användaren tillsammans med dess inloggning är som följer:

  1. Logga in på SQL Server med tillräckliga rättigheter för att skapa och släppa en databasanvändare
  2. Välj önskad databas
  3. Ta bort skrivskyddad användare från rollen Data Reader
  4. Släpp skrivskyddad användare från databasen
  5. Släpp skrivskyddad inloggning från SQL Server

Använder Sqlcmd för att släppa skrivskyddad användare (med inloggning)

Se till att alla andra anslutningar till 'Universitetets'-databasen via ReadOnly-användare är stängda.

Anslut till SQL-instansen med Sqlcmd och kör följande kod vid kommandotolken för att stänga alla aktuella sessioner för ReadOnly-inloggningen (när den är ansluten till SQL-instansen som tidigare användes för att skapa ReadOnly-användaren)

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

GO

Du måste kontrollera vilket session_id som returneras och avbryta anslutningen baserat på det session_id:

KILL 55

GO

Observera att "55" används här som ett exempel. Du måste släppa det session_id du får på din dator när du är ansluten till den önskade SQL-instansen.

Kör sedan följande kod för att släppa databasanvändaren och logga in:

Use University

EXEC sp_droprolemember 'db_datareader', 'ReadOnly'

EXEC sp_dropuser ReadOnly

EXEC sp_droplogin ReadOnly

GO

Som ett resultat bör databasanvändaren ReadOnly avslutas.

Kontrollera den avbrutna användaren (ReadOnly)

Försök att ansluta till SQL Server med hjälp av följande referenser:

Användarnamn:ReadOnly

Lösenord:b1GS3crt00

Det misslyckade anslutningsförsöket till följd av försök att ansluta till SQL Server med skrivskyddad inloggning bevisar att denna inloggning och databasanvändare har tagits bort.

På detta sätt, med hjälp av Sqlcmd, har vi tagit bort en databasanvändare med skrivskyddad tillgång genom att helt enkelt köra lite kod vid kommandotolken utan att behöva använda SSMS (SQL Server Management Studio).

Databasuppgift 3:Skapa en databasanvändare med skrivskyddad åtkomst i flera SQL-instanser

Låt oss utforska fördelarna med att använda en SQL-skriptfil som anropas via verktyget Sqlcmd för att lägga till en databasanvändare med skrivskyddad åtkomst till flera SQL-instanser för exempeldatabasen.

Krav:Lägg till skrivskyddad användare för flera instanser för exempeldatabasen

Som databasutvecklare eller DBA har du i uppdrag att lägga till en databasanvändare med skrivskyddad åtkomst till exempeldatabasen för flera SQL-instanser via ett skript som använder Sqlcmd.

Förutsättningar

Den här uppgiften förutsätter att det finns minst två SQL-instanser installerade på din maskin och båda har exempeldatabasen 'University', medan ett databasanvändarnamn ReadOnly (med skrivskyddad åtkomst) måste skapas för båda databaserna.

Skapa en exempeldatabas på en annan SQL-instans

Hoppa över det här steget om du redan har skapat exempeldatabasen "Universitetet" på en andra SQL-instans.

Låt oss först ansluta till en annan SQL-instans genom att köra följande kod i fönstret Kör kommando:

sqlcmd –S <computername>\<sqlinstancename>

När du är ansluten till den önskade SQL-instansen, använd koden från början av artikeln för att skapa 'University'-databasen (eller se min artikel 'Grunderna för att köra T-SQL-satser från kommandoraden använder SQLCMD ’).

Skapa en skriptfil för att lägga till en skrivskyddad databasanvändare

Kopiera skriptet nedan och spara det i Anteckningar som AddReadOnyUniversityDatabaseUser.sql fil i C:\SQLScripts mapp för teständamå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

Anslut till den första SQL-instansen och kör skriptet genom Sqlcmd

Öppna kommandotolken genom att skriva "cmd i sökrutan. Kör sedan följande rad:

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

Var "." (punkt) betecknar en standard utan namngiven SQL-instans som kan ersättas av en specifik SQL-instans som du vill.

Anslut till den andra SQL-instansen och kör skriptet genom Sqlcmd

Öppna sedan kommandoraden och använd följande kod för att köra SQL-skriptet som skapar en databasanvändare på en annan SQL-instans:

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

Observera att "SQLTAB" bör ersättas med namnet på en SQL-instans som är installerad på din maskin.

Grattis! Du har framgångsrikt skapat en databasanvändare med skrivskyddad åtkomst för exempeldatabasen på flera SQL-instanser genom att helt enkelt köra en skriptfil med hjälp av verktyget Sqlcmd.

Vi har lärt oss att förenkla olika databasuppgifter genom att använda Sqlcmd i både direktläge (att skriva T-SQL-kod när den är ansluten till en önskad SQL-instans) och indirekt läge (när Sqlcmd kör ett skript mot en databas på en önskad SQL-instans från kommandoraden ).

Saker att göra

Nu när du är redo att köra databasuppgifter som att lägga till en databasanvändare med skrivskyddad behörighet med hjälp av verktyget sqlcmd, kan du förbättra dina färdigheter ytterligare genom att prova följande saker:

  1. Försök att skapa en databasanvändare med skrivskyddad åtkomst för exempeldatabasen SQLBookShop som nämns i min artikel, exklusive de lagrade procedurerna som nämns efter beskrivningen av att använda verktyget sqlcmd.
  2. Försök att skapa en databas och en databasanvändare med skrivskyddad åtkomst via en skriptfil som körs genom verktyget sqlcmd för SQLBookShop-databasen inklusive någon av de lagrade procedurerna som nämns i min artikel.
  3. Skapa en skriptfil och testkör den med hjälp av verktyget Sqlcmd för att ta bort en tidigare tillagd skrivskyddad användare från exempeldatabasen University på flera SQL-instanser.

Användbart verktyg:

dbForge Studio för SQL Server – kraftfull IDE för SQL Server-hantering, administration, utveckling, datarapportering och analys.


  1. Vad är det bästa sättet att använda stor bokstav i varje ord i en sträng i SQL Server

  2. Hur pg_sleep() fungerar i PostgreSQL

  3. Insamlingsmetod:DELETE-procedur i Oracle Database

  4. Hur man installerar MySQL med phpMyAdmin på Ubuntu 14.04