sql >> Base de Datos >  >> RDS >> Database

Ejecución de tareas de mantenimiento de bases de datos SQL mediante SQLCMD

Este artículo trata sobre el desarrollo de una comprensión avanzada de la utilidad Sqlcmd que le permite ejecutar comandos T-SQL directamente desde el símbolo del sistema sin necesidad de SSMS (SQL Server Management Studio).

El artículo también destaca la importancia de usar Sqlcmd para realizar algunas tareas de base de datos de nivel avanzado que, de lo contrario, requerirían pasos adicionales, p. conectarse a la base de datos a través de una herramienta de base de datos preinstalada como SSMS (SQL Server Management Studio) o SSDT (SQL Server Data Tools) y luego prepararlo para ejecutar secuencias de comandos SQL en las bases de datos deseadas.

La utilidad Sqlcmd puede ahorrar mucho tiempo a los desarrolladores de bases de datos y administradores de bases de datos, ya que pueden ejecutar los scripts SQL necesarios directamente desde la línea de comandos.

Descripción general de los conceptos básicos de SQLCMD

Repasemos algunos conceptos básicos de la utilidad Sqlcmd si no está familiarizado con ella.

Definición sencilla

Sqlcmd es una herramienta de línea de comandos que le permite ejecutar comandos T-SQL directamente desde el símbolo del sistema.

Definición de Microsoft

De acuerdo con la documentación de Microsoft, la utilidad Sqlcmd es una utilidad de línea de comandos para la ejecución ad hoc interactiva de instrucciones y secuencias de comandos Transact-SQL y para la automatización de tareas de secuencias de comandos Transact-SQL.

Usos básicos de SQLCMD

Los siguientes son algunos de los usos básicos de Sqlcmd que se describen en la documentación de Microsoft:

  1. Sqlcmd puede ejecutar instrucciones T-SQL (en el símbolo del sistema)
  2. Sqlcmd puede ejecutar procedimientos definidos por el usuario o del sistema (en el símbolo del sistema)
  3. Sqlcmd también puede ejecutar archivos de secuencias de comandos SQL guardados (en el símbolo del sistema)
  4. Sqlcmd puede conectarse a múltiples instancias de SQL Server y ejecutar scripts
  5. Sqlcmd puede escribir la salida de declaraciones T-SQL en un archivo de texto

Consulte mi artículo 'Conceptos básicos para ejecutar declaraciones T-SQL desde la línea de comandos usando SQLCMD ', que es una guía sobre cómo implementar la utilidad Sqlcmd para realizar algunas de las tareas básicas diarias de T-SQL.

Requisitos previos

En este artículo se supone que tiene los conocimientos básicos de las tareas de mantenimiento de bases de datos realizadas a través de instrucciones T-SQL, así como algunos conocimientos básicos de la utilidad Sqlcmd.

Este artículo también asume que la base de datos de muestra 'Universidad' ya se ha creado en la instancia de SQL deseada.

Mi artículo 'Fundamentos de la ejecución de sentencias T-SQL desde la línea de comandos usando SQLCMD ' lo ayudará a obtener una comprensión sólida de los conceptos básicos de Sqlcmd antes de pasar a sus usos más avanzados.

Usos avanzados de SQLCMD

Aparte de los usos básicos, Sqlcmd tiene los siguientes usos avanzados:

  1. Sqlcmd puede ejecutar tareas de mantenimiento de bases de datos
  2. Sqlcmd puede ejecutar tareas de base de datos en varias instancias de SQL
  3. Sqlcmd puede automatizar las tareas de mantenimiento de la base de datos
  4. Sqlcmd puede automatizar scripts T-SQL en varias instancias

Tarea de base de datos 1:crear un usuario de base de datos de solo lectura

Echemos un vistazo a una tarea de base de datos muy importante de crear un usuario que solo tiene acceso de solo lectura para una base de datos (llamaremos a este usuario "Solo lectura").

Requisito:agregar un usuario de solo lectura a la base de datos de muestra

Imagine que a un DBA o desarrollador de base de datos se le ha asignado la tarea de agregar el usuario de solo lectura a una base de datos creada previamente.

Van a cumplir con este requisito mediante el uso de Sqlcmd.

Principio de privilegio mínimo y usuario de solo lectura

El propósito de crear el usuario ReadOnly es cumplir con The Principio de privilegio mínimo y, según la documentación de Microsoft, siempre debe seguir este principio al otorgar permisos a los usuarios de la base de datos. Otorgue los permisos mínimos necesarios para que un usuario o rol realice una tarea determinada.

Entonces, en la mayoría de los casos, necesitaremos crear un usuario de la base de datos de tal manera que los permisos de este usuario se limiten a solo poder leer los objetos de la base de datos, sin posibilidad de modificarlos.

Esto también es muy útil en escenarios de informes y análisis de bases de datos, en los que un usuario de la base de datos que va a acceder a los datos solo debe tener los derechos para leer la información. Otorgar más derechos de los necesarios, como permisos para agregar o soltar objetos, puede presentar riesgos de seguridad en este caso.

Pasos para crear el usuario de la base de datos de solo lectura

Por lo general, un nuevo usuario de base de datos de solo lectura se crea de la siguiente manera:

  1. Inicie sesión en SQL Server con los derechos suficientes para crear un nuevo usuario de base de datos
  2. Seleccione la base de datos deseada
  3. Cree un nuevo inicio de sesión con contraseña en SQL Server
  4. Cree un nuevo usuario para ese inicio de sesión
  5. Otorgue permisos de solo lectura a ese usuario para la base de datos requerida

Podemos ilustrar este proceso de la siguiente manera:

Ya configuré la base de datos de muestra ('Universidad')

Como se mencionó anteriormente, este artículo asume que la base de datos de muestra 'Universidad' ya se ha creado.

Consulte mi artículo anterior 'Conceptos básicos para ejecutar declaraciones T-SQL desde la línea de comandos usando SQLCMD ‘ para crear una base de datos de muestra o use el siguiente código T-SQL para configurar una base de datos de muestra llamada ‘Universidad’:

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

Uso de Sqlcmd para agregar un usuario de solo lectura

En primer lugar, deberá invocar la utilidad Sqlcmd a través de la ventana 'Ejecutar comando' después de asegurarse de que tiene suficientes derechos para crear un usuario de base de datos.

Sqlcmd -S PC

Como resultado de ejecutar este comando, se conectará a la instancia de SQL predeterminada sin nombre, si tiene una. De lo contrario, mencione \ para conectarse a la instancia SQL deseada.

Una vez que esté conectado a la instancia de SQL deseada, agregue un nuevo usuario de la base de datos con derechos de solo lectura llamado "Solo lectura" a la base de datos "Universidad" mediante el siguiente código:

USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

GO

Verifique el usuario de la base de datos recién creado (ReadOnly)

Abra SSMS (SQL Server Management Studio) y conéctese al motor de base de datos de SQL Server con las siguientes credenciales:

Nombre de usuario: Solo lectura

Contraseña:b1GS3crt00

Como resultado, estará conectado a SQL Database Engine.

Cuando esté conectado al motor de base de datos SQL, expanda el nodo Bases de datos en el Explorador de objetos y haga clic en Base de datos universitaria.

A continuación, elija Usuarios en Seguridad para ver el usuario de la base de datos "Solo lectura" de la siguiente manera:

Tarea 2 de la base de datos:eliminación del usuario de solo lectura de la base de datos mediante SQLCMD

Esta tarea de base de datos consiste en eliminar a un usuario de una base de datos a través de la utilidad Sqlcmd.

Requisito:elimine al usuario de solo lectura de la base de datos de muestra

Considere un nuevo requisito:descartar un usuario de la base de datos con acceso de solo lectura de la base de datos de muestra.

Pasos para eliminar el usuario de la base de datos de solo lectura

El proceso general para descartar el usuario de solo lectura recién creado junto con su inicio de sesión es el siguiente:

  1. Inicie sesión en SQL Server con los derechos suficientes para crear y eliminar un usuario de la base de datos
  2. Seleccione la base de datos deseada
  3. Eliminar al usuario de solo lectura de la función de lector de datos
  4. Eliminar usuario de solo lectura de la base de datos
  5. Eliminar inicio de sesión de solo lectura desde SQL Server

Uso de Sqlcmd para eliminar el usuario de solo lectura (con inicio de sesión)

Asegúrese de que todas las demás conexiones a la base de datos de la "Universidad" a través del usuario de solo lectura estén cerradas.

Conéctese a la instancia de SQL usando Sqlcmd y ejecute el siguiente código en el símbolo del sistema para cerrar todas las sesiones actuales para el inicio de sesión de solo lectura (cuando esté conectado a la instancia de SQL que se usó anteriormente para crear el usuario de solo lectura)

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

GO

Deberá verificar qué session_id se devuelve y descartar la conexión en función de ese session_id:

KILL 55

GO

Tenga en cuenta que '55' se utiliza aquí como ejemplo. Tendrá que eliminar cualquier session_id que obtenga en su máquina cuando se conecte a la instancia de SQL deseada.

A continuación, ejecute el siguiente código para eliminar el usuario de la base de datos e iniciar sesión:

Use University

EXEC sp_droprolemember 'db_datareader', 'ReadOnly'

EXEC sp_dropuser ReadOnly

EXEC sp_droplogin ReadOnly

GO

Como resultado, el usuario de la base de datos ReadOnly debe eliminarse correctamente.

Verificar el usuario descartado (ReadOnly)

Intente conectarse a SQL Server utilizando las siguientes credenciales:

Nombre de usuario:Solo lectura

Contraseña:b1GS3crt00

El intento fallido de conexión resultante de intentar conectarse a SQL Server utilizando el inicio de sesión de solo lectura demuestra que este inicio de sesión y el usuario de la base de datos se eliminaron con éxito.

De esta forma, con la ayuda de Sqlcmd, hemos eliminado un usuario de la base de datos con acceso de solo lectura simplemente ejecutando un código en el símbolo del sistema sin necesidad de usar SSMS (SQL Server Management Studio).

Tarea 3 de la base de datos:creación de un usuario de la base de datos con acceso de solo lectura en varias instancias de SQL

Exploremos los beneficios de usar un archivo de script SQL llamado a través de la utilidad Sqlcmd para agregar un usuario de base de datos con acceso de solo lectura a varias instancias de SQL para la base de datos de muestra.

Requisito:agregar un usuario de solo lectura para múltiples instancias para la base de datos de muestra

Como desarrollador de bases de datos o administrador de bases de datos, tiene la tarea de agregar un usuario de la base de datos con acceso de solo lectura a la base de datos de ejemplo para varias instancias de SQL a través de una secuencia de comandos mediante Sqlcmd.

Condiciones previas

Esta tarea asume que hay al menos dos instancias de SQL instaladas en su máquina y ambas tienen la base de datos de muestra 'Universidad', mientras que se debe crear un nombre de usuario de base de datos ReadOnly (con acceso de solo lectura) para ambas bases de datos.

Crear una base de datos de muestra en otra instancia de SQL

Omita este paso si ya ha creado la base de datos de muestra "Universidad" en una segunda instancia de SQL.

Primero conectémonos a otra instancia de SQL ejecutando el siguiente código en la ventana Ejecutar comando:

sqlcmd –S <computername>\<sqlinstancename>

Una vez que esté conectado a la instancia SQL deseada, utilice el código del principio del artículo para crear la base de datos 'Universidad' (o consulte mi artículo 'Conceptos básicos para ejecutar sentencias T-SQL desde la línea de comandos usando SQLCMD ‘).

Cree un archivo de secuencia de comandos para agregar un usuario de base de datos de solo lectura

Copie el siguiente script y guárdelo en el Bloc de notas como AddReadOnyUniversityDatabaseUser.sql archivo en C:\SQLScripts carpeta con fines de prueba.

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

Conéctese a la primera instancia de SQL y ejecute el script a través de Sqlcmd

Abra el símbolo del sistema escribiendo 'cmd en el cuadro de búsqueda. Luego, ejecuta la siguiente línea:

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

Donde "." (punto) significa una instancia de SQL predeterminada sin nombre que se puede reemplazar por una instancia de SQL específica de su elección.

Conéctese a la segunda instancia de SQL y ejecute el script a través de Sqlcmd

Luego, abra la línea de comando y use el siguiente código para ejecutar el script SQL que creará un usuario de base de datos en otra instancia de SQL:

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

Tenga en cuenta que 'SQLTAB' debe reemplazarse con el nombre de una instancia de SQL instalada en su máquina.

¡Felicidades! Ha creado correctamente un usuario de la base de datos con acceso de solo lectura para la base de datos de ejemplo en varias instancias de SQL simplemente ejecutando un archivo de secuencia de comandos con la utilidad Sqlcmd.

Hemos aprendido a simplificar varias tareas de la base de datos usando Sqlcmd tanto en modo directo (escribiendo código T-SQL una vez conectado a una instancia de SQL deseada) como en modo indirecto (cuando Sqlcmd ejecuta un script en una base de datos en una instancia de SQL deseada desde la línea de comandos). ).

Cosas que hacer

Ahora que está listo para ejecutar tareas de base de datos, como agregar un usuario de base de datos con permisos de solo lectura mediante la utilidad sqlcmd, puede mejorar aún más sus habilidades probando lo siguiente:

  1. Intente crear un usuario de base de datos con acceso de solo lectura para la base de datos de muestra SQLBookShop mencionada en mi artículo, excluyendo los procedimientos almacenados mencionados después de la descripción del uso de la utilidad sqlcmd.
  2. Intente crear una base de datos y un usuario de base de datos con acceso de solo lectura a través de un archivo de secuencia de comandos ejecutado a través de la utilidad sqlcmd para la base de datos de SQLBookShop, incluido cualquiera de los procedimientos almacenados mencionados en mi artículo.
  3. Cree un archivo de secuencia de comandos y ejecútelo con la utilidad Sqlcmd para eliminar un usuario de solo lectura agregado anteriormente de la base de datos de muestra University en varias instancias de SQL.

Herramienta útil:

dbForge Studio para SQL Server:potente IDE para la gestión, administración, desarrollo, generación de informes y análisis de datos de SQL Server.