Cet article concerne le développement d'une compréhension avancée de l'utilitaire Sqlcmd qui vous permet d'exécuter des commandes T-SQL directement à partir de l'invite de commande sans avoir besoin de SSMS (SQL Server Management Studio).
L'article souligne également l'importance d'utiliser Sqlcmd pour effectuer certaines tâches de base de données de niveau avancé qui nécessiteraient autrement des étapes supplémentaires, par ex. se connecter à la base de données via un outil de base de données préinstallé tel que SSMS (SQL Server Management Studio) ou SSDT (SQL Server Data Tools), puis le préparer à exécuter des scripts SQL sur la ou les bases de données souhaitées.
L'utilitaire Sqlcmd peut être un gain de temps considérable pour les développeurs de bases de données et les administrateurs de base de données, car ils peuvent exécuter les scripts SQL requis directement à partir de la ligne de commande.
Présentation des bases de SQLCMD
Passons en revue quelques bases de l'utilitaire Sqlcmd si vous ne le connaissez pas.
Définition simple
Sqlcmd est un outil de ligne de commande qui vous permet d'exécuter des commandes T-SQL directement à partir de l'invite de commande.
Définition Microsoft
Selon la documentation de Microsoft, l'utilitaire Sqlcmd est un utilitaire de ligne de commande pour l'exécution ad hoc et interactive d'instructions et de scripts Transact-SQL et pour l'automatisation des tâches de script Transact-SQL.
Utilisations de base de SQLCMD
Voici quelques-unes des utilisations de base de Sqlcmd décrites dans la documentation Microsoft :
- Sqlcmd peut exécuter des instructions T-SQL (à l'invite de commande)
- Sqlcmd peut exécuter des procédures définies par l'utilisateur ou système (à l'invite de commande)
- Sqlcmd peut également exécuter des fichiers de scripts SQL enregistrés (à l'invite de commande)
- Sqlcmd peut se connecter à plusieurs instances SQL Server et exécuter des scripts
- Sqlcmd peut écrire la sortie des instructions T-SQL dans un fichier texte
Veuillez vous référer à mon article 'Les bases de l'exécution d'instructions T-SQL à partir de la ligne de commande à l'aide de SQLCMD ', qui est un guide sur la mise en œuvre de l'utilitaire Sqlcmd pour effectuer certaines des tâches T-SQL de base au jour le jour.
Pré-requis
Cet article suppose que vous avez les connaissances de base des tâches de maintenance de base de données effectuées via des instructions T-SQL, ainsi qu'une compréhension de base de l'utilitaire Sqlcmd.
Cet article suppose également que l'exemple de base de données "University" a déjà été créé sur l'instance SQL souhaitée.
Mon article 'Principes de base de l'exécution d'instructions T-SQL à partir de la ligne de commande à l'aide de SQLCMD ‘ vous aidera à acquérir une solide compréhension des bases de Sqlcmd avant de passer à ses utilisations plus avancées.
Utilisations avancées de SQLCMD
Outre les utilisations de base, Sqlcmd a les utilisations avancées suivantes :
- Sqlcmd peut exécuter des tâches de maintenance de base de données
- Sqlcmd peut exécuter des tâches de base de données sur plusieurs instances SQL
- Sqlcmd peut automatiser les tâches de maintenance de la base de données
- Sqlcmd peut automatiser les scripts T-SQL sur plusieurs instances
Tâche de base de données 1 :Créer un utilisateur de base de données en lecture seule
Jetons un coup d'œil à une tâche de base de données très importante consistant à créer un utilisateur qui n'a qu'un accès en lecture seule pour une base de données (nous appellerons cet utilisateur "ReadOnly").
Exigence :ajouter l'utilisateur ReadOnly à l'exemple de base de données
Imaginez qu'un administrateur de base de données ou un développeur de base de données ait été chargé d'ajouter l'utilisateur ReadOnly à une base de données précédemment créée.
Ils vont répondre à cette exigence en utilisant Sqlcmd.
Principe du moindre privilège et utilisateur en lecture seule
Le but de la création de l'utilisateur ReadOnly est de se conformer à The Principe du moindre privilège , et selon la documentation de Microsoft, vous devez toujours suivre ce principe lorsque vous accordez des autorisations aux utilisateurs de la base de données. Accordez les autorisations minimales nécessaires à un utilisateur ou à un rôle pour accomplir une tâche donnée.
Ainsi, dans la plupart des cas, nous devrons créer un utilisateur de base de données de manière à ce que les autorisations de cet utilisateur soient limitées à la lecture des objets de la base de données, sans possibilité de les modifier.
Ceci est également très utile dans les scénarios de rapport et d'analyse de base de données, dans lesquels un utilisateur de base de données qui va accéder aux données ne doit avoir que le droit de lire les informations. L'octroi de plus de droits que nécessaire, tels que des autorisations pour ajouter ou supprimer des objets, peut poser des risques de sécurité dans ce cas.
Étapes pour créer l'utilisateur de la base de données ReadOnly
Généralement, un nouvel utilisateur de base de données ReadOnly est créé comme suit :
- Connectez-vous à SQL Server avec les droits suffisants pour créer un nouvel utilisateur de base de données
- Sélectionnez la base de données souhaitée
- Créer une nouvelle connexion avec mot de passe dans SQL Server
- Créer un nouvel utilisateur pour cette connexion
- Accorder des autorisations en lecture seule à cet utilisateur pour la base de données requise
Nous pouvons illustrer ce processus comme suit :
Déjà configurer la base de données exemple ("Université")
Comme mentionné ci-dessus, cet article suppose que l'exemple de base de données "Université" a déjà été créé.
Veuillez vous référer à mon article précédent "Les bases de l'exécution d'instructions T-SQL à partir de la ligne de commande à l'aide de SQLCMD ‘ pour créer un exemple de base de données ou utilisez le code T-SQL suivant pour configurer un exemple de base de données appelé ‘University’ :
[expand title =»Code “]
-- (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]
Utilisation de Sqlcmd pour ajouter un utilisateur ReadOnly
Tout d'abord, vous devrez invoquer l'utilitaire Sqlcmd via la fenêtre "Exécuter la commande" après vous être assuré que vous disposez des droits suffisants pour créer un utilisateur de base de données.
Sqlcmd -S PC
À la suite de l'exécution de cette commande, vous serez connecté à l'instance SQL sans nom par défaut - si vous en avez une. Sinon, veuillez mentionner
Une fois que vous êtes connecté à l'instance SQL souhaitée, ajoutez un nouvel utilisateur de base de données avec des droits en lecture seule appelé "ReadOnly" à la base de données "University" en utilisant le code suivant :
USE University CREATE LOGIN ReadOnly with Password ='b1GS3crt00' CREATE USER Readonly for login readonly exec sp_addrolemember db_datareader,ReadOnly GO
Vérifiez l'utilisateur de la base de données nouvellement créé (ReadOnly)
Ouvrez SSMS (SQL Server Management Studio) et connectez-vous au moteur de base de données SQL Server à l'aide des informations d'identification suivantes :
Nom d'utilisateur :Lecture seule
Mot de passe :b1GS3crt00
En conséquence, vous serez connecté au moteur de base de données SQL.
Lorsque vous êtes connecté au moteur de base de données SQL, développez le nœud Bases de données dans l'explorateur d'objets et cliquez sur la base de données universitaire.
Ensuite, choisissez Utilisateurs sous Sécurité pour voir l'utilisateur de la base de données "ReadOnly" comme suit :
Tâche 2 de la base de données :suppression de l'utilisateur en lecture seule de la base de données à l'aide de SQLCMD
Cette tâche de base de données consiste à supprimer un utilisateur d'une base de données via l'utilitaire Sqlcmd.
Exigence :supprimez l'utilisateur ReadOnly de l'exemple de base de données
Envisagez une nouvelle exigence :supprimer un utilisateur de base de données avec un accès en lecture seule à partir de l'exemple de base de données.
Étapes pour supprimer l'utilisateur de la base de données ReadOnly
Le processus général de suppression de l'utilisateur ReadOnly nouvellement créé avec sa connexion est le suivant :
- Connectez-vous à SQL Server avec les droits suffisants pour créer et supprimer un utilisateur de base de données
- Sélectionnez la base de données souhaitée
- Supprimer l'utilisateur ReadOnly du rôle de lecteur de données
- Supprimer l'utilisateur ReadOnly de la base de données
- Supprimer la connexion en lecture seule de SQL Server
Utilisation de Sqlcmd pour supprimer l'utilisateur ReadOnly (avec connexion)
Veuillez vous assurer que toutes les autres connexions à la base de données "Université" via l'utilisateur ReadOnly sont fermées.
Connectez-vous à l'instance SQL à l'aide de Sqlcmd et exécutez le code suivant à l'invite de commande pour fermer toutes les sessions en cours pour la connexion ReadOnly (lorsqu'il est connecté à l'instance SQL qui a été précédemment utilisée pour créer l'utilisateur ReadOnly)
SELECT session_id FROM sys.dm_exec_sessions where login_name='ReadOnly' GO
Vous devrez vérifier quel session_id est renvoyé et supprimer la connexion basée sur ce session_id :
KILL 55 GO
Veuillez noter que « 55 » est utilisé ici à titre d'exemple. Vous devrez supprimer le session_id que vous obtenez sur votre machine lorsque vous êtes connecté à l'instance SQL souhaitée.
Ensuite, exécutez le code suivant pour supprimer l'utilisateur de la base de données et vous connecter :
Use University EXEC sp_droprolemember 'db_datareader', 'ReadOnly' EXEC sp_dropuser ReadOnly EXEC sp_droplogin ReadOnly GO
Par conséquent, l'utilisateur de base de données ReadOnly devrait être supprimé avec succès.
Vérifier l'utilisateur supprimé (ReadOnly)
Essayez de vous connecter à SQL Server en utilisant les informations d'identification suivantes :
Nom d'utilisateur :Lecture seule
Mot de passe :b1GS3crt00
L'échec de la tentative de connexion résultant de la tentative de connexion à SQL Server à l'aide de la connexion en lecture seule prouve que cette connexion et cet utilisateur de base de données ont été supprimés avec succès.
De cette façon, avec l'aide de Sqlcmd, nous avons supprimé un utilisateur de base de données avec un accès en lecture seule en exécutant simplement du code à l'invite de commande sans avoir besoin d'utiliser SSMS (SQL Server Management Studio).
Tâche 3 de la base de données :créer un utilisateur de base de données avec un accès en lecture seule dans plusieurs instances SQL
Explorons les avantages de l'utilisation d'un fichier de script SQL appelé via l'utilitaire Sqlcmd pour ajouter un utilisateur de base de données avec un accès en lecture seule à plusieurs instances SQL pour l'exemple de base de données.
Exigence :ajouter un utilisateur ReadOnly pour plusieurs instances pour l'exemple de base de données
En tant que développeur de base de données ou DBA, vous êtes chargé d'ajouter un utilisateur de base de données avec un accès en lecture seule à l'exemple de base de données pour plusieurs instances SQL via un script utilisant Sqlcmd.
Conditions préalables
Cette tâche suppose qu'au moins deux instances SQL sont installées sur votre machine et qu'elles disposent toutes deux de l'exemple de base de données "University", tandis qu'un nom d'utilisateur de base de données ReadOnly (avec accès en lecture seule) doit être créé pour les deux bases de données.
Création d'un exemple de base de données sur une autre instance SQL
Veuillez ignorer cette étape si vous avez déjà créé l'exemple de base de données "University" sur une deuxième instance SQL.
Commençons par nous connecter à une autre instance SQL en exécutant le code suivant dans la fenêtre Exécuter la commande :
sqlcmd –S <computername>\<sqlinstancename>
Une fois que vous êtes connecté à l'instance SQL souhaitée, veuillez utiliser le code du début de l'article pour créer la base de données 'University' (ou reportez-vous à mon article 'Basics of Running T-SQL Statements from Command Line en utilisant SQLCMD ‘).
Créer un fichier de script pour ajouter un utilisateur de base de données ReadOnly
Copiez le script ci-dessous et enregistrez-le dans le Bloc-notes sous AddReadOnyUniversityDatabaseUser.sql fichier dans C:\SQLScripts dossier à des fins de test.
-- 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
Connectez-vous à la première instance SQL et exécutez le script via Sqlcmd
Ouvrez l'invite de commande en tapant 'cmd ‘ dans le champ de recherche. Ensuite, exécutez la ligne suivante :
Sqlcmd –S . –i c:\SQLScripts\AddReadOnyUniversityDatabaseUser.sql
Où "." (point) signifie une instance SQL sans nom par défaut qui peut être remplacée par une instance SQL spécifique de votre choix.
Connectez-vous à la deuxième instance SQL et exécutez le script via Sqlcmd
Ensuite, ouvrez la ligne de commande et utilisez le code suivant pour exécuter le script SQL qui créera un utilisateur de base de données sur une autre instance SQL :
Sqlcmd –S .\SQLTAB –i c:\SQLScripts\AddReadOnyUniversityDatabaseUser.sql
Veuillez noter que "SQLTAB" doit être remplacé par le nom d'une instance SQL installée sur votre machine.
Toutes nos félicitations! Vous avez créé avec succès un utilisateur de base de données avec un accès en lecture seule pour l'exemple de base de données sur plusieurs instances SQL simplement en exécutant un fichier de script à l'aide de l'utilitaire Sqlcmd.
Nous avons appris à simplifier diverses tâches de base de données en utilisant Sqlcmd à la fois en mode direct (en tapant le code T-SQL une fois connecté à une instance SQL souhaitée) et en mode indirect (lorsque Sqlcmd exécute un script sur une base de données sur une instance SQL souhaitée à partir de la ligne de commande ).
Choses à faire
Maintenant que vous êtes prêt à exécuter des tâches de base de données telles que l'ajout d'un utilisateur de base de données avec des autorisations en lecture seule à l'aide de l'utilitaire sqlcmd, vous pouvez encore améliorer vos compétences en essayant les choses suivantes :
- Essayez de créer un utilisateur de base de données avec un accès en lecture seule pour l'exemple de base de données SQLBookShop mentionné dans mon article en excluant les procédures stockées mentionnées après la description de l'utilisation de l'utilitaire sqlcmd.
- Essayez de créer une base de données et un utilisateur de base de données avec un accès en lecture seule via un fichier de script exécuté via l'utilitaire sqlcmd pour la base de données SQLBookShop, y compris l'une des procédures stockées mentionnées dans mon article.
- Créez un fichier de script et testez-le à l'aide de l'utilitaire Sqlcmd pour supprimer un utilisateur en lecture seule précédemment ajouté de l'exemple de base de données University sur plusieurs instances SQL.
Outil utile :
dbForge Studio for SQL Server – puissant IDE pour la gestion, l'administration, le développement, la création de rapports et l'analyse de données de SQL Server.