Database
 sql >> база данни >  >> RDS >> Database

Изпълнение на задачи за поддръжка на база данни на SQL с помощта на SQLCMD

Тази статия е за разработването на разширено разбиране на помощната програма Sqlcmd, която ви позволява да изпълнявате T-SQL команди директно от командния ред, без да се нуждаете от SSMS (SQL Server Management Studio).

Статията също така подчертава важността на използването на Sqlcmd за изпълнение на някои задачи от база данни на напреднало ниво, които иначе биха изисквали допълнителни стъпки, напр. свързване към базата данни чрез предварително инсталиран инструмент за база данни, като SSMS (SQL Server Management Studio) или SSDT (SQL Server Data Tools), последвано от подготовка за изпълнение на SQL скриптове срещу желаната(ите) база(и).

Помощната програма Sqlcmd може да спестява много време за разработчиците на бази данни и администраторите на база данни, тъй като те могат да изпълняват необходимите SQL скриптове направо от командния ред.

Общ преглед на основните положения на SQLLCMD

Нека да преминем през някои основи на помощната програма Sqlcmd, ако не сте запознати с нея.

Проста дефиниция

Sqlcmd е инструмент за команден ред, който ви позволява да изпълнявате T-SQL команди директно от командния ред.

Дефиниция на Microsoft

Според документацията на Microsoft, помощната програма Sqlcmd е помощна програма от командния ред за ad hoc, интерактивно изпълнение на Transact-SQL изрази и скриптове и за автоматизиране на задачи за скриптиране на Transact-SQL.

Основни приложения на SQLCMD

Следват някои от основните употреби на Sqlcmd, описани в документацията на Microsoft:

  1. Sqlcmd може да изпълнява T-SQL изрази (в командния ред)
  2. Sqlcmd може да изпълнява дефинирани от потребителя или системни процедури (в командния ред)
  3. Sqlcmd може също да изпълнява запазени файлове с SQL скриптове (в командния ред)
  4. Sqlcmd може да се свързва с множество екземпляри на SQL Server и да изпълнява скриптове
  5. Sqlcmd може да запише изхода на T-SQL изрази в текстов файл

Моля, вижте моята статия „Основи на изпълнение на T-SQL изрази от командния ред с помощта на SQLCMD ‘, което е ръководство за внедряване на помощната програма Sqlcmd за изпълнение на някои от основните ежедневни T-SQL задачи.

Предварителни условия

Тази статия предполага, че имате основното ноу-хау за задачи по поддръжка на база данни, изпълнявани чрез T-SQL изрази, както и някои основни познания за помощната програма Sqlcmd.

Тази статия също така предполага, че примерната база данни „Университет“ вече е създадена в желания от вас SQL екземпляр.

Моята статия „Основи на изпълнение на T-SQL изявления от командния ред с помощта на SQLCMD “ ще ви помогне да получите солидно разбиране на основите на Sqlcmd, преди да преминете към по-напредналите му приложения.

Разширено използване на SQLCMD

Освен основните приложения, Sqlcmd има следните разширени приложения:

  1. Sqlcmd може да изпълнява задачи за поддръжка на база данни
  2. Sqlcmd може да изпълнява задачи на база данни на множество SQL екземпляри
  3. Sqlcmd може да автоматизира задачите за поддръжка на база данни
  4. Sqlcmd може да автоматизира T-SQL скриптове на множество екземпляри

База данни Задача 1:Създаване на потребител на база данни само за четене

Нека да разгледаме една много важна задача на базата данни за създаване на потребител, който има достъп само за четене за база данни (ще наречем този потребител „Само за четене“).

Изискване:добавяне на потребител само за четене към примерната база данни

Представете си, че разработчик на DBA или база данни е получил задача да добави потребителя само за четене към предварително създадена база данни.

Те ще изпълнят това изискване, като използват Sqlcmd.

Принцип на най-малко привилегии и потребител само за четене

Целта на създаването на потребител само за четене е да се съобрази с The Принцип на най-малкото привилегия , и според документацията на Microsoft винаги трябва да следвате този принцип, когато давате разрешения на потребители на база данни. Предоставете минималните разрешения, необходими на потребител или роля, за да изпълни дадена задача.

Така че в повечето случаи ще трябва да създадем потребител на база данни по такъв начин, че разрешенията на този потребител да са ограничени само до възможността да чете обектите на базата данни, без възможност да ги променя.

Това също е много полезно при сценарии за отчет и анализ на базата данни, при които потребител на база данни, който ще има достъп до данните, трябва да получи само правата да чете информацията. Предоставянето на повече права от необходимото – като разрешения за добавяне или пускане на обекти – може да създаде рискове за сигурността в този случай.

Стъпки за създаване на потребител на база данни само за четене

Обикновено се създава нов потребител на база данни само за четене, както следва:

  1. Влезте в SQL Server с достатъчно права, за да създадете нов потребител на база данни
  2. Изберете желаната база данни
  3. Създайте ново влизане с парола в SQL Server
  4. Създайте нов потребител за това влизане
  5. Дайте разрешения само за четене на този потребител за необходимата база данни

Можем да илюстрираме този процес по следния начин:

Вече е настроена примерна база данни („Университет“)

Както бе споменато по-горе, тази статия предполага, че примерната база данни „Университет“ вече е създадена.

Моля, вижте предишната ми статия „Основи на изпълнение на T-SQL изрази от командния ред с помощта на SQLCMD „, за да създадете примерна база данни или използвайте следния T-SQL код, за да настроите примерна база данни, наречена „Университет“:

[expand title =”Код “]

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

Използване на Sqlcmd за добавяне на потребител само за четене

На първо място, ще трябва да извикате помощната програма Sqlcmd през прозореца „Изпълни команда“, след като се уверите, че имате достатъчно права за създаване на потребител на база данни.

Sqlcmd -S PC

В резултат на изпълнението на тази команда ще се свържете с SQL екземпляр без име по подразбиране - ако имате такъв. В противен случай, моля, споменете \ за да се свържете с желания SQL екземпляр.

След като се свържете с желания SQL екземпляр, добавете нов потребител на база данни с права само за четене, наречен „ReadOnly“ към базата данни „University“, като използвате следния код:

USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

GO

Проверете новосъздадения потребител на база данни (само за четене)

Отворете SSMS (SQL Server Management Studio) и се свържете с SQL Server Database Engine, като използвате следните идентификационни данни:

Потребителско име:Само за четене

Парола:b1GS3crt00

В резултат на това ще бъдете свързани към SQL Database Engine.

Когато сте свързани към SQL Database Engine, разширете възела Databases в Object Explorer и щракнете върху Университетската база данни.

След това изберете Потребители под Защита, за да видите потребител на базата данни „Само за четене“, както следва:

База данни Задача 2:Отпадане на потребител само за четене на база данни с помощта на SQLCMD

Тази задача за база данни е за премахване на потребител от база данни чрез помощната програма Sqlcmd.

Изискване:изхвърлете потребителя само за четене от примерната база данни

Помислете за ново изискване – премахване на потребител на база данни с достъп само за четене от примерната база данни.

Стъпки за премахване на потребител на база данни само за четене

Общият процес на премахване на новосъздадения потребител само за четене заедно с неговото влизане е както следва:

  1. Влезте в SQL Server с достатъчно права, за да създадете и премахнете потребител на база данни
  2. Изберете желаната база данни
  3. Премахнете потребителя само за четене от ролята на четец на данни
  4. Изхвърлете потребителя само за четене от базата данни
  5. Изхвърлете влизането само за четене от SQL Server

Използване на Sqlcmd за премахване на потребител само за четене (с вход)

Моля, уверете се, че всички други връзки към базата данни „University“ чрез потребител само за четене са затворени.

Свържете се към SQL екземпляра с помощта на Sqlcmd и изпълнете следния код в командния ред, за да затворите всички текущи сесии за влизане само за четене (когато сте свързани към SQL екземпляр, който преди е бил използван за създаване на потребител само за четене)

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

GO

Ще трябва да проверите кой session_id се връща и да прекратите връзката въз основа на този session_id:

KILL 55

GO

Моля, имайте предвид, че „55“ се използва тук като пример. Ще трябва да махнете какъвто и да е session_id, който получавате на вашата машина, когато сте свързани с желания SQL екземпляр.

След това изпълнете следния код, за да премахнете потребителя на базата данни и да влезете:

Use University

EXEC sp_droprolemember 'db_datareader', 'ReadOnly'

EXEC sp_dropuser ReadOnly

EXEC sp_droplogin ReadOnly

GO

В резултат на това потребителят на базата данни ReadOnly трябва да бъде успешно премахнат.

Проверете изпуснатия потребител (само за четене)

Опитайте да се свържете със SQL Server, като използвате следните идентификационни данни:

Потребителско име:Само за четене

Парола:b1GS3crt00

Неуспешният опит за свързване в резултат на опит за свързване към SQL Server чрез вход само за четене доказва, че този потребител за вход и база данни са били успешно премахнати.

По този начин, с помощта на Sqlcmd, премахнахме потребител на база данни с достъп само за четене, като просто изпълнихме някакъв код в командния ред, без да е необходимо да използваме SSMS (SQL Server Management Studio).

База данни Задача 3:Създаване на потребител на база данни с достъп само за четене в множество SQL екземпляри

Нека да проучим предимствата на използването на SQL скриптов файл, извикан чрез помощната програма Sqlcmd, за да добавим потребител на база данни с достъп само за четене до множество SQL екземпляри за примерната база данни.

Изискване:Добавете потребител само за четене за множество екземпляри за примерна база данни

Като разработчик на база данни или DBA, вие имате задачата да добавите потребител на база данни с достъп само за четене към примерната база данни за множество SQL екземпляри чрез скрипт, използващ Sqlcmd.

Предварителни условия

Тази задача предполага, че има най-малко два SQL екземпляра, инсталирани на вашата машина и и двете имат примерната база данни „University“, докато потребителско име на база данни ReadOnly (с достъп само за четене) трябва да бъде създадено и за двете бази данни.

Създаване на примерна база данни на друг екземпляр на SQL

Моля, пропуснете тази стъпка, ако вече сте създали примерната база данни „Университет“ във втори SQL екземпляр.

Нека първо се свържем с друг екземпляр на SQL, като изпълним следния код в прозореца Run Command:

sqlcmd –S <computername>\<sqlinstancename>

След като се свържете с желания SQL екземпляр, моля, използвайте кода от началото на статията, за да създадете базата данни „Университет“ (или вижте моята статия „Основи на изпълнение на T-SQL инструкции от командния ред с помощта на SQLCMDа ‘).

Създайте скриптов файл, за да добавите потребител на база данни само за четене

Копирайте скрипта по-долу и го запазете в Notepad като AddReadOnyUniversityDatabaseUser.sql файл в C:\SQLScripts папка за тестови цели.

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

Свържете се с първия SQL екземпляр и стартирайте скрипта през Sqlcmd

Отворете командния ред, като напишете „cmd в полето за търсене. След това стартирайте следния ред:

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

Където "." (точка) означава ненаименуван SQL екземпляр по подразбиране, който може да бъде заменен от специфичен SQL екземпляр по избор.

Свържете се с втория SQL екземпляр и стартирайте скрипта през Sqlcmd

След това отворете командния ред и използвайте следния код, за да стартирате SQL скрипта, който ще създаде потребител на база данни на друг екземпляр на SQL:

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

Моля, имайте предвид, че „SQLTAB“ трябва да бъде заменен това с името на SQL екземпляр, инсталиран на вашата машина.

Честито! Успешно създадохте потребител на база данни с достъп само за четене за примерната база данни на множество SQL екземпляри, просто като стартирате скриптов файл с помощта на помощната програма Sqlcmd.

Научихме се да опростяваме различни задачи на базата данни, като използваме Sqlcmd както в директен режим (въвеждане на T-SQL код, веднъж свързан към желания SQL екземпляр), така и в индиректен режим (когато Sqlcmd изпълнява скрипт срещу база данни на желания SQL екземпляр от командния ред ).

Неща за правене

Сега, когато сте готови да изпълнявате задачи на база данни, като добавяне на потребител на база данни с разрешения само за четене с помощта на помощната програма sqlcmd, можете да подобрите уменията си допълнително, като опитате следните неща:

  1. Опитайте се да създадете потребител на база данни с достъп само за четене за примерната база данни SQLBookShop, спомената в моята статия, с изключение на съхранените процедури, споменати по-късно в описанието на използването на помощната програма sqlcmd.
  2. Опитайте да създадете база данни и потребител на база данни с достъп само за четене чрез скриптов файл, изпълняван чрез помощната програма sqlcmd за базата данни SQLBookShop, включително някоя от съхранените процедури, споменати в моята статия.
  3. Създайте скриптов файл и го изпълнете тестово с помощта на помощната програма Sqlcmd, за да премахнете по-рано добавен потребител само за четене от примерния университет на базата данни на множество SQL екземпляри.

Полезен инструмент:

dbForge Studio за SQL Server – мощна IDE за управление на 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. SQL Self Join

  2. Въведение в модела на данни за ER

  3. Хранилището на тестовата база данни на IRI-Windocks

  4. Използване на DBCC CLONEDATABASE и хранилище на заявки за тестване

  5. T-SQL срещу SQL