sql >> Databáze >  >> RDS >> Database

Spouštění úloh údržby databáze SQL pomocí SQLCMD

Tento článek je o rozvinutí pokročilého pochopení nástroje Sqlcmd, který vám umožní spouštět příkazy T-SQL přímo z příkazového řádku, aniž byste potřebovali SSMS (SQL Server Management Studio).

Článek také zdůrazňuje důležitost používání Sqlcmd k provádění některých databázových úloh na pokročilé úrovni, které by jinak vyžadovaly další kroky, např. připojení k databázi prostřednictvím předem nainstalovaného databázového nástroje, jako je SSMS (SQL Server Management Studio) nebo SSDT (SQL Server Data Tools), a poté jeho příprava ke spouštění skriptů SQL proti požadovaným databázím.

Nástroj Sqlcmd může být skvělou úsporou času pro vývojáře databází a správce databází, protože mohou spouštět požadované SQL skripty přímo z příkazového řádku.

Přehled základů SQLCMD

Pojďme si projít základy nástroje Sqlcmd, pokud jej neznáte.

Jednoduchá definice

Sqlcmd je nástroj příkazového řádku, který umožňuje spouštět příkazy T-SQL přímo z příkazového řádku.

Definice společnosti Microsoft

Podle dokumentace společnosti Microsoft je nástroj Sqlcmd nástroj příkazového řádku pro ad hoc, interaktivní provádění příkazů a skriptů Transact-SQL a pro automatizaci úloh skriptování Transact-SQL.

Základní použití SQLCMD

Níže jsou uvedena některá ze základních použití Sqlcmd, jak je uvedeno v dokumentaci společnosti Microsoft:

  1. Sqlcmd může spouštět příkazy T-SQL (na příkazovém řádku)
  2. Sqlcmd může provádět uživatelem definované nebo systémové procedury (na příkazovém řádku)
  3. Sqlcmd může také spouštět uložené soubory skriptů SQL (na příkazovém řádku)
  4. Sqlcmd se může připojit k více instancím SQL Server a spouštět skripty
  5. Sqlcmd může zapsat výstup příkazů T-SQL do textového souboru

Přečtěte si můj článek „Základy spouštění příkazů T-SQL z příkazového řádku pomocí SQLCMD ‘, což je průvodce implementací nástroje Sqlcmd k provádění některých základních každodenních úloh T-SQL.

Předpoklady

Tento článek předpokládá, že máte základní know-how o úlohách údržby databáze prováděných pomocí příkazů T-SQL a také určité základní znalosti o nástroji Sqlcmd.

Tento článek také předpokládá, že vzorová databáze ‚University‘ již byla vytvořena na požadované instanci SQL.

Můj článek ‘Základy spouštění příkazů T-SQL z příkazového řádku pomocí SQLCMD ‘ vám pomůže dobře porozumět základům Sqlcmd, než přejdete k jeho pokročilejšímu použití.

Pokročilá použití SQLCMD

Kromě základních použití má Sqlcmd následující pokročilá použití:

  1. Sqlcmd může spouštět úlohy údržby databáze
  2. Sqlcmd může spouštět databázové úlohy na více instancích SQL
  3. Sqlcmd může automatizovat úlohy údržby databáze
  4. Sqlcmd může automatizovat skripty T-SQL na více instancích

Úloha databáze 1:Vytvoření uživatele databáze pouze pro čtení

Pojďme se podívat na velmi důležitý databázový úkol, kterým je vytvoření uživatele, který má k databázi přístup pouze pro čtení (tohoto uživatele budeme nazývat ‚ReadOnly‘).

Požadavek:přidání uživatele pouze pro čtení do ukázkové databáze

Představte si, že správce databáze nebo vývojář databáze dostal za úkol přidat uživatele ReadOnly do dříve vytvořené databáze.

Tento požadavek splní pomocí Sqlcmd.

Princip nejmenšího oprávnění a uživatel pouze pro čtení

Účelem vytvoření uživatele ReadOnly je dodržet The Princip nejmenšího privilegia a podle dokumentace společnosti Microsoft byste se měli při udělování oprávnění uživatelům databáze vždy řídit touto zásadou. Udělte uživateli nebo roli minimální oprávnění nezbytná k provedení daného úkolu.

Ve většině případů tedy budeme muset vytvořit databázového uživatele tak, aby jeho oprávnění byla omezena na to, aby mohl databázové objekty pouze číst, bez možnosti je upravovat.

To je také velmi užitečné ve scénářích databázových zpráv a analýz, ve kterých by uživatel databáze, který se chystá přistupovat k datům, měl dostat pouze práva ke čtení informací. Udělení více práv, než je požadováno – například oprávnění k přidávání nebo vypouštění objektů – může v tomto případě představovat bezpečnostní rizika.

Kroky pro vytvoření uživatele databáze ReadOnly

Obvykle se nový uživatel databáze ReadOnly vytvoří následovně:

  1. Přihlaste se k serveru SQL Server s dostatečnými právy k vytvoření nového uživatele databáze
  2. Vyberte požadovanou databázi
  3. Vytvořte nové přihlášení s heslem v SQL Server
  4. Vytvořte nového uživatele pro toto přihlášení
  5. Udělte tomuto uživateli oprávnění pouze pro čtení pro požadovanou databázi

Tento proces můžeme ilustrovat následovně:

Již je nastavena ukázková databáze (‚Univerzita‘)

Jak bylo uvedeno výše, tento článek předpokládá, že vzorová databáze ‚University‘ již byla vytvořena.

Přečtěte si můj předchozí článek „Základy spouštění příkazů T-SQL z příkazového řádku pomocí SQLCMD ‘ k vytvoření ukázkové databáze nebo použijte následující kód T-SQL k nastavení ukázkové databáze s názvem ,Univerzita‘:

[rozbalit název =”Kód “]

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

Použití Sqlcmd k přidání uživatele pouze pro čtení

Nejprve budete muset vyvolat obslužný program Sqlcmd prostřednictvím okna „Spustit příkaz“ poté, co se ujistíte, že máte dostatečná práva k vytvoření uživatele databáze.

Sqlcmd -S PC

V důsledku spuštění tohoto příkazu se připojíte k výchozí nepojmenované instanci SQL – pokud nějakou máte. V opačném případě uveďte \ pro připojení k požadované instanci SQL.

Jakmile se připojíte k požadované instanci SQL, přidejte nového uživatele databáze s právy pouze pro čtení s názvem ‚ReadOnly‘ do databáze ‚University‘ pomocí následujícího kódu:

USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

GO

Zkontrolujte nově vytvořeného uživatele databáze (ReadOnly)

Otevřete SSMS (SQL Server Management Studio) a připojte se k SQL Server Database Engine pomocí následujících přihlašovacích údajů:

Uživatelské jméno: Pouze pro čtení

Heslo:b1GS3crt00

V důsledku toho budete připojeni k SQL Database Engine.

Když jste připojeni k SQL Database Engine, rozbalte uzel Databases v Object Exploreru a klikněte na University Database.

Dále vyberte Uživatelé v části Zabezpečení, abyste viděli uživatele databáze ‚Pouze pro čtení‘ takto:

Úloha databáze 2:Vypuštění uživatele pouze pro čtení databáze pomocí SQLCMD

Tato databázová úloha spočívá v odstranění uživatele z databáze pomocí nástroje Sqlcmd.

Požadavek:vypustit uživatele pouze pro čtení z ukázkové databáze

Zvažte nový požadavek – vyřazení uživatele databáze s přístupem pouze pro čtení z ukázkové databáze.

Kroky k vyřazení uživatele databáze ReadOnly

Obecný proces odstranění nově vytvořeného uživatele ReadOnly spolu s jeho přihlášením je následující:

  1. Přihlaste se k serveru SQL Server s dostatečnými právy k vytvoření a zrušení uživatele databáze
  2. Vyberte požadovanou databázi
  3. Odebrat uživatele ReadOnly z role Čtečka dat
  4. Vypustit uživatele pouze pro čtení z databáze
  5. Zrušte přihlášení pouze pro čtení ze serveru SQL

Použití Sqlcmd k odstranění uživatele pouze pro čtení (s přihlášením)

Ujistěte se prosím, že všechna ostatní připojení k databázi ‚University‘ prostřednictvím uživatele ReadOnly jsou uzavřena.

Připojte se k instanci SQL pomocí Sqlcmd a spusťte následující kód na příkazovém řádku pro uzavření všech aktuálních relací pro přihlášení ReadOnly (při připojení k instanci SQL, která byla dříve použita k vytvoření uživatele ReadOnly)

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

GO

Budete muset zkontrolovat, které session_id je vráceno, a zrušit připojení na základě tohoto session_id:

KILL 55

GO

Vezměte prosím na vědomí, že „55“ je zde použito jako příklad. Po připojení k požadované instanci SQL budete muset zrušit jakékoli session_id, které získáváte na svém počítači.

Dále spusťte následující kód pro zrušení uživatele databáze a přihlášení:

Use University

EXEC sp_droprolemember 'db_datareader', 'ReadOnly'

EXEC sp_dropuser ReadOnly

EXEC sp_droplogin ReadOnly

GO

V důsledku toho by měl být uživatel databáze ReadOnly úspěšně zrušen.

Zkontrolujte vyřazeného uživatele (pouze pro čtení)

Zkuste se připojit k serveru SQL pomocí následujících pověření:

Uživatelské jméno:Pouze pro čtení

Heslo:b1GS3crt00

Neúspěšný pokus o připojení v důsledku pokusu o připojení k serveru SQL pomocí přihlášení pouze pro čtení dokazuje, že toto přihlášení a uživatel databáze byly úspěšně odstraněny.

Tímto způsobem jsme s pomocí Sqlcmd odstranili databázového uživatele s přístupem pouze pro čtení jednoduchým spuštěním nějakého kódu na příkazovém řádku bez nutnosti použití SSMS (SQL Server Management Studio).

Úloha databáze 3:Vytvoření uživatele databáze s přístupem pouze pro čtení ve více instancích SQL

Pojďme prozkoumat výhody použití souboru skriptu SQL volaného pomocí nástroje Sqlcmd k přidání uživatele databáze s přístupem pouze pro čtení k více instancím SQL pro ukázkovou databázi.

Požadavek:Přidat uživatele Pouze pro čtení pro více instancí pro ukázkovou databázi

Jako vývojář databáze nebo DBA máte za úkol přidat uživatele databáze s přístupem pouze pro čtení k ukázkové databázi pro více instancí SQL pomocí skriptu pomocí Sqlcmd.

Předběžné podmínky

Tato úloha předpokládá, že na vašem počítači jsou nainstalovány alespoň dvě instance SQL a obě mají vzorovou databázi 'University', přičemž pro obě databáze je třeba vytvořit uživatelské jméno databáze ReadOnly (s přístupem pouze pro čtení).

Vytvoření ukázkové databáze v jiné instanci SQL

Tento krok prosím přeskočte, pokud jste již vytvořili vzorovou databázi ‚University‘ na druhé instanci SQL.

Nejprve se připojte k jiné instanci SQL spuštěním následujícího kódu v okně Spustit příkaz:

sqlcmd –S <computername>\<sqlinstancename>

Jakmile se připojíte k požadované instanci SQL, použijte kód ze začátku článku k vytvoření databáze 'Univerzita' (nebo si přečtěte můj článek 'Základy spouštění příkazů T-SQL z příkazového řádku pomocí SQLCMD ‘).

Vytvořte soubor skriptu pro přidání uživatele databáze ReadOnly

Zkopírujte níže uvedený skript a uložte jej do programu Poznámkový blok jako AddReadOnyUniversityDatabaseUser.sql soubor v C:\SQLScripts složku pro testovací účely.

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

Připojte se k první instanci SQL a spusťte skript prostřednictvím Sqlcmd

Otevřete příkazový řádek zadáním „cmd ve vyhledávacím poli. Potom spusťte následující řádek:

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

Kde "." (tečka) označuje výchozí nepojmenovanou instanci SQL, kterou lze nahradit konkrétní vybranou instancí SQL.

Připojte se k druhé instanci SQL a spusťte skript prostřednictvím Sqlcmd

Dále otevřete příkazový řádek a pomocí následujícího kódu spusťte skript SQL, který vytvoří uživatele databáze na jiné instanci SQL:

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

Vezměte prosím na vědomí, že „SQLTAB“ by měl být nahrazen názvem instance SQL nainstalované na vašem počítači.

Gratulujeme! Úspěšně jste vytvořili uživatele databáze s přístupem pouze pro čtení pro ukázkovou databázi na více instancích SQL jednoduše spuštěním souboru skriptu pomocí nástroje Sqlcmd.

Naučili jsme se zjednodušovat různé databázové úlohy pomocí Sqlcmd v přímém režimu (zadání kódu T-SQL po připojení k požadované instanci SQL) i nepřímém režimu (když Sqlcmd spouští skript proti databázi na požadované instanci SQL z příkazového řádku ).

Co dělat

Nyní, když jste připraveni spouštět databázové úlohy, jako je přidání uživatele databáze s oprávněním pouze pro čtení pomocí nástroje sqlcmd, můžete své dovednosti dále zlepšit tím, že vyzkoušíte následující věci:

  1. Zkuste vytvořit databázového uživatele s přístupem pouze pro čtení pro ukázkovou databázi SQLBookShop zmíněnou v mém článku s výjimkou uložených procedur zmíněných dále v popisu použití nástroje sqlcmd.
  2. Zkuste vytvořit databázi a uživatele databáze s přístupem pouze pro čtení prostřednictvím souboru skriptu spouštěného pomocí nástroje sqlcmd pro databázi SQLBookShop včetně kterékoli z uložených procedur uvedených v mém článku.
  3. Vytvořte soubor skriptu a otestujte jej pomocí nástroje Sqlcmd k odebrání dříve přidaného uživatele pouze pro čtení z ukázkové databáze University na více instancích SQL.

Užitečný nástroj:

dbForge Studio pro SQL Server – výkonné IDE pro správu, administraci, vývoj, sestavování dat a analýzu SQL Serveru.


  1. Jak přejmenovat databázi v SQL Server - SQL Server / TSQL výukový program, část 26

  2. Jak používat klauzuli GROUP BY v SQL

  3. Jaký je limit velikosti pro argument podprogramu varchar2 PL/SQL v Oracle?

  4. Získání návratové hodnoty z uložené procedury v C#