Database
 sql >> Base de Dados >  >> RDS >> Database

Executando tarefas de manutenção do banco de dados SQL usando SQLCMD


Este artigo trata do desenvolvimento de uma compreensão avançada do utilitário Sqlcmd, que permite executar comandos T-SQL diretamente do prompt de comando sem precisar do SSMS (SQL Server Management Studio).

O artigo também destaca a importância de usar o Sqlcmd para executar algumas tarefas de banco de dados de nível avançado que, de outra forma, exigiriam etapas adicionais, por exemplo. conectar-se ao banco de dados por meio de uma ferramenta de banco de dados pré-instalada, como SSMS (SQL Server Management Studio) ou SSDT (SQL Server Data Tools), seguida de prepará-lo para executar scripts SQL nos bancos de dados desejados.

O utilitário Sqlcmd pode ser uma grande economia de tempo para desenvolvedores de banco de dados e DBAs, pois eles podem executar os scripts SQL necessários diretamente da linha de comando.

Visão geral do SQLCMD básico


Vamos passar por alguns conceitos básicos do utilitário Sqlcmd se você não estiver familiarizado com ele.

Definição simples


Sqlcmd é uma ferramenta de linha de comando que permite executar comandos T-SQL diretamente do prompt de comando.

Definição da Microsoft


De acordo com a documentação da Microsoft, o utilitário Sqlcmd é um utilitário de linha de comando para execução interativa ad hoc de instruções e scripts Transact-SQL e para automatizar tarefas de script Transact-SQL.

Usos básicos do SQLCMD


A seguir estão alguns dos usos básicos do Sqlcmd, conforme abordado na Documentação da Microsoft:
  1. Sqlcmd pode executar instruções T-SQL (no prompt de comando)
  2. Sqlcmd pode executar procedimentos definidos pelo usuário ou do sistema (no prompt de comando)
  3. Sqlcmd também pode executar arquivos de scripts SQL salvos (no prompt de comando)
  4. Sqlcmd pode se conectar a várias instâncias do SQL Server e executar scripts
  5. Sqlcmd pode gravar a saída de instruções T-SQL em um arquivo de texto

Consulte o meu artigo 'Noções básicas de execução de instruções T-SQL a partir da linha de comando usando SQLCMD ', que é um guia sobre como implementar o utilitário Sqlcmd para executar algumas das tarefas T-SQL básicas do dia-a-dia.

Pré-requisitos


Este artigo pressupõe que você tenha o conhecimento básico de tarefas de manutenção de banco de dados executadas por meio de instruções T-SQL, bem como alguns conhecimentos básicos do utilitário Sqlcmd.

Este artigo também pressupõe que o banco de dados de exemplo 'Universidade' já foi criado na instância SQL desejada.

Meu artigo 'Noções básicas de execução de instruções T-SQL da linha de comando usando SQLCMD ' irá ajudá-lo a obter uma compreensão sólida dos conceitos básicos do Sqlcmd antes de passar para seus usos mais avançados.

Usos avançados do SQLCMD


Além dos usos básicos, o Sqlcmd possui os seguintes usos avançados:
  1. Sqlcmd pode executar tarefas de manutenção de banco de dados
  2. Sqlcmd pode executar tarefas de banco de dados em várias instâncias SQL
  3. Sqlcmd pode automatizar tarefas de manutenção de banco de dados
  4. Sqlcmd pode automatizar scripts T-SQL em várias instâncias

Tarefa de banco de dados 1:criando um usuário de banco de dados somente leitura


Vamos dar uma olhada em uma tarefa de banco de dados muito importante de criar um usuário que só tem acesso somente leitura para um banco de dados (chamaremos esse usuário de 'ReadOnly').

Requisito:adicionar usuário ReadOnly ao banco de dados de amostra


Imagine que um DBA ou desenvolvedor de banco de dados recebeu a tarefa de adicionar o usuário ReadOnly a um banco de dados criado anteriormente.

Eles vão atender a esse requisito usando Sqlcmd.

Princípio de privilégio mínimo e usuário ReadOnly


O objetivo de criar o usuário ReadOnly é cumprir com O Princípio do menor privilégio , e de acordo com a documentação da Microsoft, você deve sempre seguir esse princípio ao conceder permissões aos usuários do banco de dados. Conceda as permissões mínimas necessárias para um usuário ou função realizar uma determinada tarefa.

Portanto, na maioria dos casos, precisaremos criar um usuário do banco de dados de forma que as permissões desse usuário sejam limitadas a apenas ler os objetos do banco de dados, sem poder modificá-los.

Isso também é muito útil em cenários de relatório e análise de banco de dados, nos quais um usuário de banco de dados que vai acessar os dados deve ter apenas o direito de ler as informações. Conceder mais direitos do que o necessário – como permissões para adicionar ou descartar objetos – pode representar riscos de segurança neste caso.

Etapas para criar o usuário de banco de dados ReadOnly


Normalmente, um novo usuário de banco de dados ReadOnly é criado da seguinte forma:
  1. Faça login no SQL Server com direitos suficientes para criar um novo usuário de banco de dados
  2. Selecione o banco de dados desejado
  3. Crie um novo login com senha no SQL Server
  4. Crie um novo usuário para esse login
  5. Conceder permissões somente leitura a esse usuário para o banco de dados necessário

Podemos ilustrar esse processo da seguinte forma:


Já configurou o banco de dados de amostra ('Universidade')


Como mencionado acima, este artigo pressupõe que o banco de dados de exemplo 'Universidade' já foi criado.

Consulte meu artigo anterior 'Noções básicas de execução de instruções T-SQL da linha de comando usando SQLCMD ' para criar um banco de dados de exemplo ou use o seguinte código T-SQL para configurar um banco de dados de exemplo chamado 'Universidade':

[expandir título ="Código “]
-- (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

[/expandir]

Usando Sqlcmd para adicionar usuário ReadOnly


Antes de tudo, você precisará invocar o utilitário Sqlcmd através da janela ‘Executar comando’ depois de certificar-se de ter direitos suficientes para criar um usuário de banco de dados.
Sqlcmd -S PC



Como resultado da execução deste comando, você será conectado à instância SQL sem nome padrão – se tiver uma. Caso contrário, mencione \ para se conectar à instância SQL desejada.



Quando estiver conectado à instância SQL desejada, adicione um novo usuário de banco de dados com direitos somente leitura chamado 'ReadOnly' ao banco de dados 'University' usando o seguinte código:
USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

GO


Verifique o usuário do banco de dados recém-criado (ReadOnly)


Abra o SSMS (SQL Server Management Studio) e conecte-se ao SQL Server Database Engine usando as seguintes credenciais:

Nome de usuário: Somente leitura

Senha:b1GS3crt00



Como resultado, você será conectado ao Mecanismo de Banco de Dados SQL.

Quando estiver conectado ao SQL Database Engine, expanda o nó Databases no Object Explorer e clique no University Database.

Em seguida, escolha Usuários em Segurança para ver o usuário do banco de dados ‘ReadOnly’ da seguinte forma:


Tarefa de banco de dados 2:descartando o usuário somente leitura do banco de dados usando SQLCMD


Esta tarefa de banco de dados trata de descartar um usuário de um banco de dados por meio do utilitário Sqlcmd.

Requisito:remover o usuário ReadOnly do banco de dados de amostra


Considere um novo requisito – eliminar um usuário de banco de dados com acesso somente leitura do banco de dados de exemplo.

Etapas para descartar o usuário do banco de dados ReadOnly


O processo geral de descartar o usuário ReadOnly recém-criado junto com seu Login é o seguinte:
  1. Faça login no SQL Server com direitos suficientes para criar e descartar um usuário de banco de dados
  2. Selecione o banco de dados desejado
  3. Remover o usuário ReadOnly da função de leitor de dados
  4. Retire o usuário ReadOnly do banco de dados
  5. Eliminar o login somente leitura do SQL Server

Usando Sqlcmd para descartar usuário ReadOnly (com login)


Certifique-se de que todas as outras conexões com o banco de dados 'Universidade' por meio do usuário ReadOnly estejam fechadas.

Conecte-se à instância SQL usando Sqlcmd e execute o seguinte código no prompt de comando para fechar todas as sessões atuais para o logon ReadOnly (quando conectado à instância SQL que foi usada anteriormente para criar o usuário ReadOnly)
SELECT session_id FROM sys.dm_exec_sessions where login_name='ReadOnly'

GO

Você precisará verificar qual session_id é retornada e descartar a conexão com base nessa session_id:
KILL 55

GO



Observe que '55' é usado aqui como exemplo. Você terá que descartar qualquer session_id que esteja recebendo em sua máquina quando estiver conectado à instância SQL desejada.

Em seguida, execute o seguinte código para descartar o usuário do banco de dados e o login:
Use University

EXEC sp_droprolemember 'db_datareader', 'ReadOnly'

EXEC sp_dropuser ReadOnly

EXEC sp_droplogin ReadOnly

GO

Como resultado, o usuário do banco de dados ReadOnly deve ser descartado com êxito.


Verifique o usuário descartado (ReadOnly)


Tente se conectar ao SQL Server usando as seguintes credenciais:

Nome de usuário:Somente leitura

Senha:b1GS3crt00



A tentativa de conexão com falha resultante da tentativa de se conectar ao SQL Server usando o logon ReadOnly prova que esse logon e o usuário do banco de dados foram removidos com êxito.

Dessa forma, com a ajuda do Sqlcmd, removemos um usuário do banco de dados com acesso somente leitura, simplesmente executando algum código no prompt de comando sem a necessidade de usar o SSMS (SQL Server Management Studio).

Tarefa de banco de dados 3:criando um usuário de banco de dados com acesso somente leitura em várias instâncias SQL


Vamos explorar os benefícios de usar um arquivo de script SQL chamado por meio do utilitário Sqlcmd para adicionar um usuário de banco de dados com acesso somente leitura a várias instâncias SQL para o banco de dados de exemplo.

Requisito:adicionar usuário ReadOnly para várias instâncias para banco de dados de amostra


Como desenvolvedor de banco de dados ou DBA, você tem a tarefa de adicionar um usuário de banco de dados com acesso somente leitura ao banco de dados de amostra para várias instâncias SQL por meio de um script usando Sqlcmd.

Pré-condições


Esta tarefa pressupõe que haja pelo menos duas instâncias SQL instaladas em sua máquina e ambas tenham o banco de dados de exemplo ‘University’, enquanto um nome de usuário de banco de dados ReadOnly (com acesso somente leitura) precisa ser criado para ambos os bancos de dados.

Criando um banco de dados de amostra em outra instância SQL


Pule esta etapa se você já criou o banco de dados de exemplo 'Universidade' em uma segunda instância do SQL.

Vamos primeiro nos conectar a outra instância SQL executando o seguinte código na janela Executar Comando:
sqlcmd –S <computername>\<sqlinstancename>



Quando estiver conectado à instância SQL desejada, use o código do início do artigo para criar o banco de dados 'Universidade' (ou consulte meu artigo 'Noções básicas de execução de instruções T-SQL a partir da linha de comando usando SQLCMD ‘).


Crie um arquivo de script para adicionar o usuário do banco de dados ReadOnly


Copie o script abaixo e salve-o no Bloco de Notas como AddReadOnyUniversityDatabaseUser.sql arquivo em C:\SQLScripts pasta para fins de teste.
-- 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


Conecte-se à primeira instância do SQL e execute o script por meio do Sqlcmd


Abra o prompt de comando digitando 'cmd ' na caixa de pesquisa. Em seguida, execute a seguinte linha:
Sqlcmd –S . –i c:\SQLScripts\AddReadOnyUniversityDatabaseUser.sql

Onde "." (ponto) significa uma instância SQL sem nome padrão que pode ser substituída por uma instância SQL específica de sua escolha.


Conecte-se à segunda instância do SQL e execute o script por meio do Sqlcmd


Em seguida, abra a linha de comando e use o seguinte código para executar o script SQL que criará um usuário de banco de dados em outra instância SQL:
Sqlcmd –S .\SQLTAB –i c:\SQLScripts\AddReadOnyUniversityDatabaseUser.sql

Observe que 'SQLTAB' deve ser substituído pelo nome de uma instância SQL instalada em sua máquina.



Parabéns! Você criou com êxito um usuário de banco de dados com acesso somente leitura para o banco de dados de amostra em várias instâncias SQL simplesmente executando um arquivo de script usando o utilitário Sqlcmd.

Aprendemos a simplificar várias tarefas de banco de dados usando o Sqlcmd no modo direto (digitando o código T-SQL uma vez conectado a uma instância SQL desejada) e no modo indireto (quando o Sqlcmd executa um script em um banco de dados em uma instância SQL desejada a partir da linha de comando ).

Coisas para fazer


Agora que você está pronto para executar tarefas de banco de dados, como adicionar um usuário de banco de dados com permissões somente leitura usando o utilitário sqlcmd, você pode melhorar ainda mais suas habilidades tentando as seguintes coisas:
  1. Tente criar um usuário de banco de dados com acesso somente leitura para o banco de dados de exemplo SQLBookShop mencionado em meu artigo, excluindo os procedimentos armazenados mencionados depois da descrição do uso do utilitário sqlcmd.
  2. Tente criar um banco de dados e um usuário de banco de dados com acesso somente leitura por meio de um arquivo de script executado por meio do utilitário sqlcmd para o banco de dados SQLBookShop, incluindo qualquer um dos procedimentos armazenados mencionados em meu artigo.
  3. Crie um arquivo de script e teste-o usando o utilitário Sqlcmd para remover um usuário somente leitura adicionado anteriormente do banco de dados de exemplo University em várias instâncias SQL.

Ferramenta útil:


dbForge Studio for SQL Server – IDE poderoso para gerenciamento, administração, desenvolvimento, relatório e análise de dados do SQL Server.