Database
 sql >> Baza danych >  >> RDS >> Database

Uruchamianie zadań konserwacji bazy danych SQL przy użyciu SQLCMD

Ten artykuł dotyczy rozwinięcia zaawansowanego zrozumienia narzędzia Sqlcmd, które pozwala uruchamiać polecenia T-SQL bezpośrednio z wiersza poleceń bez konieczności korzystania z SSMS (SQL Server Management Studio).

W artykule podkreślono również znaczenie używania Sqlcmd do wykonywania niektórych zadań bazy danych na poziomie zaawansowanym, które w innym przypadku wymagałyby dodatkowych kroków, np. nawiązanie połączenia z bazą danych za pomocą wstępnie zainstalowanego narzędzia bazy danych, takiego jak SSMS (SQL Server Management Studio) lub SSDT (SQL Server Data Tools), a następnie przygotowanie go do uruchamiania skryptów SQL w żądanych bazach danych.

Narzędzie Sqlcmd może być świetną oszczędnością czasu dla programistów baz danych i administratorów baz danych, ponieważ mogą uruchamiać wymagane skrypty SQL bezpośrednio z wiersza poleceń.

Przegląd podstaw SQLCMD

Przyjrzyjmy się podstawom narzędzia Sqlcmd, jeśli go nie znasz.

Prosta definicja

Sqlcmd to narzędzie wiersza poleceń, które pozwala uruchamiać polecenia T-SQL bezpośrednio z wiersza poleceń.

Definicja Microsoft

Zgodnie z dokumentacją Microsoft, narzędzie Sqlcmd jest narzędziem wiersza poleceń do ad hoc, interaktywnego wykonywania instrukcji i skryptów Transact-SQL oraz do automatyzacji zadań skryptowych Transact-SQL.

Podstawowe zastosowania SQLCMD

Oto niektóre z podstawowych zastosowań Sqlcmd opisanych w dokumentacji Microsoft:

  1. Sqlcmd może uruchamiać instrukcje T-SQL (w wierszu poleceń)
  2. Sqlcmd może wykonywać procedury zdefiniowane przez użytkownika lub procedury systemowe (w wierszu poleceń)
  3. Sqlcmd może również uruchamiać zapisane pliki skryptów SQL (w wierszu poleceń)
  4. Sqlcmd może łączyć się z wieloma instancjami SQL Server i uruchamiać skrypty
  5. Sqlcmd może zapisywać dane wyjściowe instrukcji T-SQL do pliku tekstowego

Proszę zapoznać się z moim artykułem „Podstawy uruchamiania instrukcji T-SQL z wiersza poleceń za pomocą SQLCMD „, który jest przewodnikiem po implementacji narzędzia Sqlcmd do wykonywania niektórych podstawowych codziennych zadań T-SQL.

Wymagania wstępne

W tym artykule założono, że posiadasz podstawową wiedzę na temat zadań konserwacji bazy danych wykonywanych za pomocą instrukcji T-SQL, a także podstawową wiedzę na temat narzędzia Sqlcmd.

W tym artykule założono również, że przykładowa baza danych „Uniwersytet” została już utworzona na wybranej przez Ciebie instancji SQL.

Mój artykuł „Podstawy uruchamiania instrukcji T-SQL z wiersza poleceń za pomocą SQLCMD „pomoże Ci w zrozumieniu podstaw SQLcmd przed przejściem do jego bardziej zaawansowanych zastosowań.

Zaawansowane zastosowania SQLCMD

Oprócz podstawowych zastosowań Sqlcmd ma następujące zaawansowane zastosowania:

  1. Sqlcmd może uruchamiać zadania konserwacji bazy danych
  2. Sqlcmd może uruchamiać zadania bazy danych na wielu instancjach SQL
  3. Sqlcmd może zautomatyzować zadania konserwacji bazy danych
  4. Sqlcmd może zautomatyzować skrypty T-SQL w wielu instancjach

Zadanie bazy danych 1:Tworzenie użytkownika bazy danych tylko do odczytu

Rzućmy okiem na bardzo ważne zadanie bazy danych, jakim jest utworzenie użytkownika, który ma dostęp tylko do odczytu do bazy danych (nazwiemy tego użytkownika „Tylko do odczytu”).

Wymaganie:dodanie użytkownika Tylko do odczytu do przykładowej bazy danych

Wyobraź sobie, że administratorowi baz danych lub programistowi bazy danych powierzono zadanie dodania użytkownika Tylko do odczytu do wcześniej utworzonej bazy danych.

Zamierzają spełnić to wymaganie, używając Sqlcmd.

Zasada najniższych uprawnień i użytkownik tylko do odczytu

Celem utworzenia użytkownika tylko do odczytu jest spełnienie zasady Zasada najmniejszych uprawnień i zgodnie z dokumentacją firmy Microsoft należy zawsze przestrzegać tej zasady podczas nadawania uprawnień użytkownikom bazy danych. Przyznaj minimalne uprawnienia potrzebne użytkownikowi lub roli do wykonania danego zadania.

Tak więc w większości przypadków będziemy musieli utworzyć użytkownika bazy danych w taki sposób, aby jego uprawnienia były ograniczone tylko do odczytu obiektów bazy danych, bez możliwości ich modyfikowania.

Jest to również bardzo pomocne w scenariuszach raportów i analiz baz danych, w których użytkownik bazy danych, który ma uzyskać dostęp do danych, powinien mieć jedynie uprawnienia do odczytu informacji. Przyznanie większej liczby praw niż jest to wymagane – takich jak uprawnienia do dodawania lub upuszczania obiektów – może w tym przypadku stanowić zagrożenie bezpieczeństwa.

Kroki tworzenia użytkownika bazy danych tylko do odczytu

Zwykle nowy użytkownik bazy danych tylko do odczytu jest tworzony w następujący sposób:

  1. Zaloguj się do SQL Server z uprawnieniami wystarczającymi do utworzenia nowego użytkownika bazy danych
  2. Wybierz żądaną bazę danych
  3. Utwórz nowy login z hasłem w SQL Server
  4. Utwórz nowego użytkownika dla tego loginu
  5. Przyznaj temu użytkownikowi uprawnienia tylko do odczytu dla wymaganej bazy danych

Możemy zilustrować ten proces w następujący sposób:

Już skonfiguruj przykładową bazę danych („Uniwersytet”)

Jak wspomniano powyżej, w tym artykule założono, że przykładowa baza danych „Uniwersytet” została już utworzona.

Proszę zapoznać się z moim poprzednim artykułem „Podstawy uruchamiania instrukcji T-SQL z wiersza poleceń przy użyciu SQLCMD ‘, aby utworzyć przykładową bazę danych lub użyj następującego kodu T-SQL, aby skonfigurować przykładową bazę danych o nazwie „Uniwersytet”:

[rozwiń tytuł =”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

[/rozwiń]

Używanie Sqlcmd do dodawania użytkownika tylko do odczytu

Przede wszystkim musisz wywołać narzędzie Sqlcmd przez okno „Uruchom polecenie” po upewnieniu się, że masz wystarczające uprawnienia do utworzenia użytkownika bazy danych.

Sqlcmd -S PC

W wyniku uruchomienia tego polecenia zostaniesz połączony z domyślną nienazwaną instancją SQL – jeśli taką posiadasz. W przeciwnym razie podaj \ aby połączyć się z żądaną instancją SQL.

Po nawiązaniu połączenia z żądaną instancją SQL dodaj nowego użytkownika bazy danych z prawami tylko do odczytu o nazwie „Tylko do odczytu” do bazy danych „Uniwersytet”, używając następującego kodu:

USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

GO

Sprawdź nowo utworzonego użytkownika bazy danych (tylko do odczytu)

Otwórz SSMS (SQL Server Management Studio) i połącz się z silnikiem bazy danych SQL Server, używając następujących poświadczeń:

Nazwa użytkownika:Tylko do odczytu

Hasło:b1GS3crt00

W rezultacie zostaniesz połączony z SQL Database Engine.

Kiedy połączysz się z SQL Database Engine, rozwiń węzeł Bazy danych w Eksploratorze obiektów i kliknij Uniwersytecką bazę danych.

Następnie wybierz Użytkownicy w sekcji Bezpieczeństwo, aby zobaczyć użytkownika bazy danych „Tylko do odczytu” w następujący sposób:

Zadanie bazy danych 2:Usunięcie użytkownika tylko do odczytu bazy danych za pomocą SQLCMD

To zadanie bazy danych polega na usunięciu użytkownika z bazy danych za pomocą narzędzia Sqlcmd.

Wymaganie:usuń użytkownika tylko do odczytu z przykładowej bazy danych

Rozważ nowe wymaganie – usunięcie użytkownika bazy danych z dostępem tylko do odczytu z przykładowej bazy danych.

Kroki usuwania użytkownika bazy danych tylko do odczytu

Ogólny proces usuwania nowo utworzonego użytkownika tylko do odczytu wraz z jego loginem jest następujący:

  1. Zaloguj się do SQL Server z wystarczającymi prawami, aby utworzyć i usunąć użytkownika bazy danych
  2. Wybierz żądaną bazę danych
  3. Usuń użytkownika tylko do odczytu z roli odczytującego dane
  4. Usuń użytkownika tylko do odczytu z bazy danych
  5. Upuść logowanie tylko do odczytu z serwera SQL

Korzystanie z Sqlcmd do usunięcia użytkownika tylko do odczytu (z logowaniem)

Upewnij się, że wszystkie inne połączenia z bazą danych „Uniwersytet” za pośrednictwem użytkownika Tylko do odczytu są zamknięte.

Połącz się z instancją SQL za pomocą Sqlcmd i uruchom następujący kod w wierszu poleceń, aby zamknąć wszystkie bieżące sesje dla logowania tylko do odczytu (w przypadku połączenia z instancją SQL, która została wcześniej użyta do utworzenia użytkownika tylko do odczytu)

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

GO

Musisz sprawdzić, który identyfikator sesji jest zwracany i przerwać połączenie na podstawie tego identyfikatora sesji:

KILL 55

GO

Zwróć uwagę, że „55” jest tutaj użyty jako przykład. Będziesz musiał usunąć dowolny identyfikator sesji, który otrzymujesz na swoim komputerze po połączeniu z żądaną instancją SQL.

Następnie uruchom następujący kod, aby usunąć użytkownika bazy danych i zalogować się:

Use University

EXEC sp_droprolemember 'db_datareader', 'ReadOnly'

EXEC sp_dropuser ReadOnly

EXEC sp_droplogin ReadOnly

GO

W rezultacie użytkownik bazy danych Tylko do odczytu powinien zostać pomyślnie usunięty.

Sprawdź porzuconego użytkownika (tylko do odczytu)

Spróbuj połączyć się z SQL Server przy użyciu następujących poświadczeń:

Nazwa użytkownika:Tylko do odczytu

Hasło:b1GS3crt00

Nieudana próba połączenia wynikająca z próby połączenia się z SQL Server przy użyciu loginu Tylko do odczytu dowodzi, że ten login i użytkownik bazy danych zostały pomyślnie usunięte.

W ten sposób, z pomocą Sqlcmd, usunęliśmy użytkownika bazy danych z dostępem tylko do odczytu, po prostu uruchamiając kod w wierszu poleceń bez konieczności używania SSMS (SQL Server Management Studio).

Zadanie bazy danych 3:Tworzenie użytkownika bazy danych z dostępem tylko do odczytu w wielu instancjach SQL

Przyjrzyjmy się korzyściom płynącym z używania pliku skryptu SQL wywoływanego za pomocą narzędzia Sqlcmd w celu dodania użytkownika bazy danych z dostępem tylko do odczytu do wielu instancji SQL dla przykładowej bazy danych.

Wymaganie:dodaj użytkownika tylko do odczytu dla wielu instancji przykładowej bazy danych

Jako programista baz danych lub administrator baz danych masz za zadanie dodać użytkownika bazy danych z dostępem tylko do odczytu do przykładowej bazy danych dla wielu instancji SQL za pomocą skryptu używającego Sqlcmd.

Warunki wstępne

To zadanie zakłada, że ​​na Twoim komputerze są zainstalowane co najmniej dwie instancje SQL i obie mają przykładową bazę danych 'University', podczas gdy nazwa użytkownika bazy danych tylko do odczytu (z dostępem tylko do odczytu) musi zostać utworzona dla obu baz danych.

Tworzenie przykładowej bazy danych w innej instancji SQL

Pomiń ten krok, jeśli już utworzyłeś przykładową bazę danych „Uniwersytet” w drugiej instancji SQL.

Najpierw połączmy się z inną instancją SQL, uruchamiając następujący kod w oknie Uruchom polecenie:

sqlcmd –S <computername>\<sqlinstancename>

Po nawiązaniu połączenia z żądaną instancją SQL użyj kodu z początku artykułu, aby utworzyć bazę danych „Uniwersytet” (lub zapoznaj się z moim artykułem „Podstawy uruchamiania instrukcji T-SQL z wiersza poleceń” przy użyciu SQLCMD ‘).

Utwórz plik skryptu, aby dodać użytkownika bazy danych tylko do odczytu

Skopiuj poniższy skrypt i zapisz go w Notatniku jako AddReadOnyUniversityDatabaseUser.sql plik w C:\SQLScripts folder do celów testowych.

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

Połącz się z pierwszą instancją SQL i uruchom skrypt przez Sqlcmd

Otwórz wiersz polecenia, wpisując „cmd w polu wyszukiwania. Następnie uruchom następującą linię:

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

Gdzie "." (kropka) oznacza domyślną nienazwaną instancję SQL, którą można zastąpić wybraną konkretną instancją SQL.

Połącz się z drugą instancją SQL i uruchom skrypt przez Sqlcmd

Następnie otwórz wiersz poleceń i użyj poniższego kodu, aby uruchomić skrypt SQL, który utworzy użytkownika bazy danych w innej instancji SQL:

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

Pamiętaj, że „SQLTAB” należy zastąpić nazwą instancji SQL zainstalowanej na twoim komputerze.

Gratulacje! Pomyślnie utworzyłeś użytkownika bazy danych z dostępem tylko do odczytu do przykładowej bazy danych w wielu instancjach SQL, po prostu uruchamiając plik skryptu za pomocą narzędzia Sqlcmd.

Nauczyliśmy się upraszczać różne zadania związane z bazą danych, używając Sqlcmd zarówno w trybie bezpośrednim (wpisywanie kodu T-SQL po połączeniu z żądaną instancją SQL), jak i w trybie pośrednim (gdy Sqlcmd uruchamia skrypt na bazie danych na żądanej instancji SQL z wiersza poleceń ).

Rzeczy do zrobienia

Teraz, gdy jesteś gotowy do wykonywania zadań związanych z bazą danych, takich jak dodawanie użytkownika bazy danych z uprawnieniami tylko do odczytu za pomocą narzędzia sqlcmd, możesz dalej doskonalić swoje umiejętności, próbując następujących rzeczy:

  1. Spróbuj utworzyć użytkownika bazy danych z dostępem tylko do odczytu dla przykładowej bazy danych SQLBookShop wspomnianej w moim artykule, wyłączając procedury składowane wymienione później w opisie użycia narzędzia sqlcmd.
  2. Spróbuj utworzyć bazę danych i użytkownika bazy danych z dostępem tylko do odczytu za pomocą pliku skryptu uruchomionego przez narzędzie sqlcmd dla bazy danych SQLBookShop, w tym dowolnej z procedur składowanych wymienionych w moim artykule.
  3. Utwórz plik skryptu i przetestuj go za pomocą narzędzia Sqlcmd, aby usunąć wcześniej dodanego użytkownika tylko do odczytu z przykładowej bazy danych Uniwersytet w wielu instancjach SQL.

Przydatne narzędzie:

dbForge Studio dla SQL Server – potężne IDE do zarządzania, administrowania, rozwoju, raportowania i analizy danych SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytania do bazy danych:jak znaleźć igłę w stogu siana?

  2. Estymacja liczności dla predykatu w wyrażeniu COUNT

  3. Samouczek dotyczący danych:Korzystanie z funkcji okna

  4. COVID-19 Gotowość w ScaleGrid

  5. Jak połączyć wyniki dwóch zapytań w SQL?