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:
- Sqlcmd pode executar instruções T-SQL (no prompt de comando)
- Sqlcmd pode executar procedimentos definidos pelo usuário ou do sistema (no prompt de comando)
- Sqlcmd também pode executar arquivos de scripts SQL salvos (no prompt de comando)
- Sqlcmd pode se conectar a várias instâncias do SQL Server e executar scripts
- 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:
- Sqlcmd pode executar tarefas de manutenção de banco de dados
- Sqlcmd pode executar tarefas de banco de dados em várias instâncias SQL
- Sqlcmd pode automatizar tarefas de manutenção de banco de dados
- 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:
- Faça login no SQL Server com direitos suficientes para criar um novo usuário de banco de dados
- Selecione o banco de dados desejado
- Crie um novo login com senha no SQL Server
- Crie um novo usuário para esse login
- 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
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:
- Faça login no SQL Server com direitos suficientes para criar e descartar um usuário de banco de dados
- Selecione o banco de dados desejado
- Remover o usuário ReadOnly da função de leitor de dados
- Retire o usuário ReadOnly do banco de dados
- 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:
- 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.
- 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.
- 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.