Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Chạy các tác vụ bảo trì cơ sở dữ liệu SQL bằng SQLCMD

Bài viết này nói về việc phát triển sự hiểu biết nâng cao về tiện ích Sqlcmd cho phép bạn chạy các lệnh T-SQL trực tiếp từ dấu nhắc lệnh mà không cần SSMS (SQL Server Management Studio).

Bài viết cũng nhấn mạnh tầm quan trọng của việc sử dụng Sqlcmd để thực hiện một số tác vụ cơ sở dữ liệu cấp nâng cao mà nếu không sẽ yêu cầu các bước bổ sung, ví dụ:được kết nối với cơ sở dữ liệu thông qua một công cụ cơ sở dữ liệu được cài đặt sẵn như SSMS (SQL Server Management Studio) hoặc SSDT (SQL Server Data Tools), tiếp theo là chuẩn bị sẵn sàng để chạy các tập lệnh SQL dựa trên (các) cơ sở dữ liệu mong muốn.

Tiện ích Sqlcmd có thể là một công cụ tiết kiệm thời gian tuyệt vời cho các nhà phát triển Cơ sở dữ liệu và DBA vì họ có thể chạy các tập lệnh SQL được yêu cầu ngay từ dòng lệnh.

Tổng quan Cơ bản về SQLCMD

Hãy xem qua một số khái niệm cơ bản về tiện ích Sqlcmd nếu bạn chưa quen với nó.

Định nghĩa đơn giản

Sqlcmd là một công cụ dòng lệnh cho phép bạn chạy các lệnh T-SQL trực tiếp từ dấu nhắc lệnh.

Định nghĩa của Microsoft

Theo tài liệu của Microsoft, tiện ích Sqlcmd là một tiện ích dòng lệnh để thực thi đặc biệt, thực thi tương tác các câu lệnh và tập lệnh Transact-SQL và để tự động hóa các tác vụ viết kịch bản Transact-SQL.

Cách sử dụng cơ bản của SQLCMD

Sau đây là một số cách sử dụng cơ bản của Sqlcmd được đề cập trong Tài liệu Microsoft:

  1. Sqlcmd có thể chạy các câu lệnh T-SQL (tại dấu nhắc lệnh)
  2. Sqlcmd có thể thực thi các thủ tục do người dùng xác định hoặc các thủ tục hệ thống (tại dấu nhắc lệnh)
  3. Sqlcmd cũng có thể chạy các tệp tập lệnh SQL đã lưu (tại dấu nhắc lệnh)
  4. Sqlcmd có thể kết nối với nhiều phiên bản SQL Server và chạy các tập lệnh
  5. Sqlcmd có thể ghi kết quả đầu ra của các câu lệnh T-SQL vào một tệp văn bản

Vui lòng tham khảo bài viết của tôi ‘ Khái niệm cơ bản về chạy câu lệnh T-SQL từ dòng lệnh sử dụng SQLCMD ‘, Là hướng dẫn về cách triển khai tiện ích Sqlcmd để thực hiện một số tác vụ T-SQL cơ bản hàng ngày.

Điều kiện tiên quyết

Bài viết này giả định rằng bạn có bí quyết cơ bản về các tác vụ bảo trì cơ sở dữ liệu được thực hiện thông qua các câu lệnh T-SQL, cũng như một số hiểu biết cơ bản về tiện ích Sqlcmd.

Bài viết này cũng giả định rằng cơ sở dữ liệu mẫu ‘University’ đã được tạo trên phiên bản SQL mong muốn của bạn.

Bài viết của tôi ‘ Khái niệm cơ bản về chạy câu lệnh T-SQL từ dòng lệnh sử dụng SQLCMD ‘Sẽ giúp bạn hiểu rõ về các khái niệm cơ bản của Sqlcmd trước khi chuyển sang các cách sử dụng nâng cao hơn của nó.

Sử dụng SQLCMD nâng cao

Ngoài những công dụng cơ bản, Sqlcmd còn có những công dụng nâng cao sau:

  1. Sqlcmd có thể chạy các tác vụ bảo trì cơ sở dữ liệu
  2. Sqlcmd có thể chạy các tác vụ cơ sở dữ liệu trên nhiều phiên bản SQL
  3. Sqlcmd có thể tự động hóa các tác vụ bảo trì cơ sở dữ liệu
  4. Sqlcmd có thể tự động hóa các tập lệnh T-SQL trên nhiều trường hợp

Nhiệm vụ cơ sở dữ liệu 1:Tạo người dùng cơ sở dữ liệu chỉ đọc

Chúng ta hãy xem xét nhiệm vụ cơ sở dữ liệu rất quan trọng là tạo người dùng chỉ có quyền truy cập chỉ đọc cho cơ sở dữ liệu (chúng tôi sẽ gọi người dùng này là 'ReadOnly').

Yêu cầu:thêm người dùng ReadOnly vào cơ sở dữ liệu mẫu

Hãy tưởng tượng rằng một DBA hoặc nhà phát triển cơ sở dữ liệu được giao nhiệm vụ thêm người dùng ReadOnly vào cơ sở dữ liệu đã tạo trước đó.

Họ sẽ đáp ứng yêu cầu này bằng cách sử dụng Sqlcmd.

Nguyên tắc về Đặc quyền Ít nhất và Người dùng Chỉ đọc

Mục đích của việc tạo người dùng ReadOnly là tuân thủ The Nguyên tắc về Đặc quyền Ít nhất và theo tài liệu của Microsoft, bạn phải luôn tuân thủ nguyên tắc này khi cấp quyền cho người dùng cơ sở dữ liệu. Cấp các quyền tối thiểu cần thiết cho người dùng hoặc vai trò để hoàn thành một nhiệm vụ nhất định.

Vì vậy, trong hầu hết các trường hợp, chúng tôi sẽ cần tạo người dùng cơ sở dữ liệu theo cách mà quyền của người dùng này bị giới hạn ở mức chỉ có thể đọc các đối tượng cơ sở dữ liệu mà không có khả năng sửa đổi chúng.

Điều này cũng rất hữu ích trong các kịch bản phân tích và báo cáo cơ sở dữ liệu, trong đó người dùng cơ sở dữ liệu sẽ truy cập dữ liệu chỉ nên được cấp quyền để đọc thông tin. Việc cấp nhiều quyền hơn mức yêu cầu - chẳng hạn như quyền thêm hoặc bớt đối tượng - có thể gây ra rủi ro bảo mật trong trường hợp này.

Các bước tạo người dùng cơ sở dữ liệu ReadOnly

Thông thường, người dùng cơ sở dữ liệu ReadOnly mới được tạo như sau:

  1. Đăng nhập vào SQL Server với đủ quyền để tạo người dùng cơ sở dữ liệu mới
  2. Chọn cơ sở dữ liệu mong muốn
  3. Tạo một Đăng nhập mới bằng Mật khẩu trong SQL Server
  4. Tạo Người dùng mới cho Đăng nhập đó
  5. Cấp quyền chỉ đọc cho Người dùng đó đối với cơ sở dữ liệu bắt buộc

Chúng ta có thể minh họa quá trình này như sau:

Đã thiết lập cơ sở dữ liệu mẫu (‘Đại học’)

Như đã đề cập ở trên, bài viết này giả định rằng cơ sở dữ liệu mẫu ‘Đại học’ đã được tạo.

Vui lòng tham khảo bài viết trước của tôi ‘ Khái niệm cơ bản về chạy câu lệnh T-SQL từ dòng lệnh sử dụng SQLCMD ‘Để tạo cơ sở dữ liệu mẫu hoặc sử dụng mã T-SQL sau để thiết lập cơ sở dữ liệu mẫu có tên là‘ Đại học ’:

[expand title =” “]

 - (1) Tạo cơ sở dữ liệu mẫu 'Trường đại học' CourseCREATE 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) Tạo Student tableIF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES T WHERE T.TABLE_NAME ='Student') DROP TABLE dbo.StudentCREATE 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) Điền bảng Khóa họcSET IDENTITY_INSERT [dbo]. [Khóa học] ONINSERT INTO [dbo]. [Khóa học] ([Khóa học], [Tên], [Chi tiết]) GIÁ TRỊ (1, N'DevOps for Databases ', N'Đây là về DevOps for Databases') CHÈN VÀO [dbo]. [Khóa học] ([CourseId], [Name], [Detail]) GIÁ TRỊ (2, N'Power BI Fundamentals ', N'Đây là về Power BI Fundamentals') CHÈN VÀO [dbo]. [Course] ([CourseId], [Name ], [Chi tiết]) GIÁ TRỊ (3, Lập trình N'T-SQL ', Không giới thiệu về Lập trình T-SQL') CHÈN VÀO [dbo]. [Khóa học] ([Khóa học], [Tên], [Chi tiết]) GIÁ TRỊ (4, N'Tabular Data Modeling ', N'This is about Tabular Data Modeling') CHÈN VÀO [dbo]. [Course] ([CourseId], [Name], [Detail]) VALUES (5, N'Analysis Services Nguyên tắc cơ bản ', N'Đây là về Nguyên tắc cơ bản về dịch vụ phân tích') SET IDENTITY_INSERT [dbo]. [Khóa học] TẮT-- (5) Điền bảng Sinh viênSET IDENTITY_INSERT [dbo]. [Sinh viên] ONINSERT INTO [dbo]. [Sinh viên] ([ StudentId], [Name], [Course], [Marks], [ExamDate]) GIÁ TRỊ (1, N'Asif ', N'Database Management System', 80, N'2016-01-01 00:00:00 ' ) CHÈN VÀO [dbo]. [Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (2, N'Peter ', N'Database Management System', 85, N '2016-01-01 00:00:00') CHÈN VÀO [dbo]. [Student] ([StudentId], [Name], [Course], [Mar ks], [ExamDate]) VALUES (3, N'Sam ', N'Database Management System', 85, N'2016-01-01 00:00:00 ') CHÈN VÀO [dbo]. [Student] ([ StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (4, N'Adil ', N'Database Management System', 85, N'2016-01-01 00:00:00 ' ) CHÈN VÀO [dbo]. [Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (5, N'Naveed ', N'Database Management System', 90, N '2016-01-01 00:00:00') ĐẶT IDENTITY_INSERT [dbo]. [Sinh viên] OFFGO 

[/ mở rộng]

Sử dụng Sqlcmd để thêm người dùng ReadOnly

Trước hết, bạn sẽ cần gọi tiện ích Sqlcmd thông qua cửa sổ "Run command" sau khi đảm bảo rằng bạn có đủ quyền để tạo người dùng cơ sở dữ liệu.

 Sqlcmd -S PC 

Kết quả của việc chạy lệnh này, bạn sẽ được kết nối với phiên bản SQL không tên mặc định - nếu bạn có. Nếu không, vui lòng đề cập đến \ để kết nối với phiên bản SQL mong muốn.

Sau khi bạn được kết nối với phiên bản SQL mong muốn, hãy thêm người dùng cơ sở dữ liệu mới có quyền chỉ đọc được gọi là ‘ReadOnly’ vào cơ sở dữ liệu ‘Đại học’ bằng cách sử dụng mã sau:

 SỬ DỤNG UniversityCREATE ĐĂNG NHẬP Chỉ đọc với mật khẩu ='b1GS3crt00'CREATE USER Chỉ đọc để đăng nhập readonlyexec sp_addrolemember db_datareader, ReadOnlyGO 

Kiểm tra người dùng cơ sở dữ liệu mới được tạo (ReadOnly)

Mở SSMS (SQL Server Management Studio) và kết nối với SQL Server Database Engine bằng thông tin đăng nhập sau:

Tên người dùng: ReadOnly

Mật khẩu: b1GS3crt00

Do đó, bạn sẽ được kết nối với SQL Database Engine.

Khi bạn được kết nối với Công cụ cơ sở dữ liệu SQL, hãy mở rộng nút Cơ sở dữ liệu trong Trình khám phá đối tượng và nhấp vào Cơ sở dữ liệu đại học.

Tiếp theo, chọn Người dùng trong Bảo mật để xem người dùng cơ sở dữ liệu ‘ReadOnly’ như sau:

Nhiệm vụ cơ sở dữ liệu 2:Bỏ qua người dùng chỉ đọc cơ sở dữ liệu sử dụng SQLCMD

Nhiệm vụ cơ sở dữ liệu này là về việc loại bỏ một người dùng khỏi cơ sở dữ liệu thông qua tiện ích Sqlcmd.

Yêu cầu:thả người dùng ReadOnly khỏi cơ sở dữ liệu mẫu

Xem xét một yêu cầu mới - loại bỏ người dùng cơ sở dữ liệu có quyền truy cập chỉ đọc từ cơ sở dữ liệu mẫu.

Các bước để thả người dùng cơ sở dữ liệu ReadOnly

Quy trình chung để loại bỏ người dùng ReadOnly mới được tạo cùng với Đăng nhập của nó như sau:

  1. Đăng nhập vào SQL Server với đủ quyền để tạo và thả người dùng cơ sở dữ liệu
  2. Chọn cơ sở dữ liệu mong muốn
  3. Xóa người dùng ReadOnly khỏi vai trò Người đọc dữ liệu
  4. Bỏ người dùng ReadOnly khỏi cơ sở dữ liệu
  5. Bỏ đăng nhập ReadOnly từ SQL Server

Sử dụng Sqlcmd để thả người dùng ReadOnly (có Đăng nhập)

Vui lòng đảm bảo rằng tất cả các kết nối khác tới cơ sở dữ liệu 'Đại học' thông qua người dùng ReadOnly đều bị đóng.

Kết nối với phiên bản SQL bằng Sqlcmd và chạy mã sau tại dấu nhắc lệnh để đóng tất cả các phiên hiện tại cho đăng nhập ReadOnly (khi được kết nối với phiên bản SQL đã được sử dụng trước đó để tạo người dùng ReadOnly)

 SELECT session_id FROM sys.dm_exec_sessions nơi login_name ='ReadOnly'GO 

Bạn sẽ cần kiểm tra session_id nào được trả lại và ngắt kết nối dựa trên session_id đó:

 GIẾT 55GO 

Xin lưu ý rằng ‘55’ được sử dụng ở đây làm ví dụ. Bạn sẽ phải bỏ bất kỳ session_id nào bạn đang nhận được trên máy của mình khi được kết nối với phiên bản SQL mong muốn.

Tiếp theo, chạy mã sau để thả người dùng cơ sở dữ liệu và đăng nhập:

 Sử dụng UniversityEXEC sp_droprolemember 'db_datareader', 'ReadOnly'EXEC sp_dropuser ReadOnlyEXEC sp_droplogin ReadOnlyGO 

Do đó, người dùng cơ sở dữ liệu ReadOnly sẽ được loại bỏ thành công.

Kiểm tra người dùng bị loại bỏ (ReadOnly)

Cố gắng kết nối với SQL Server bằng thông tin đăng nhập sau:

Tên người dùng: ReadOnly

Mật khẩu: b1GS3crt00

Sự cố kết nối không thành công do cố gắng kết nối với SQL Server bằng thông tin đăng nhập ReadOnly chứng tỏ rằng thông tin đăng nhập và người dùng cơ sở dữ liệu này đã được xóa thành công.

Bằng cách này, với sự trợ giúp của Sqlcmd, chúng tôi đã xóa người dùng cơ sở dữ liệu có quyền truy cập chỉ đọc bằng cách chỉ cần chạy một số mã tại dấu nhắc lệnh mà không cần sử dụng SSMS (SQL Server Management Studio).

Nhiệm vụ cơ sở dữ liệu 3:Tạo người dùng cơ sở dữ liệu có quyền truy cập chỉ đọc trong Nhiều phiên bản SQL

Hãy cùng khám phá những lợi ích của việc sử dụng tệp tập lệnh SQL được gọi thông qua tiện ích Sqlcmd để thêm người dùng cơ sở dữ liệu có quyền truy cập chỉ đọc vào nhiều phiên bản SQL cho cơ sở dữ liệu mẫu.

Yêu cầu:Thêm người dùng ReadOnly cho nhiều trường hợp cho cơ sở dữ liệu mẫu

Là nhà phát triển cơ sở dữ liệu hoặc DBA, bạn có nhiệm vụ thêm người dùng cơ sở dữ liệu có quyền truy cập chỉ đọc vào cơ sở dữ liệu mẫu cho nhiều phiên bản SQL thông qua tập lệnh sử dụng Sqlcmd.

Điều kiện trước

Tác vụ này giả định rằng có ít nhất hai phiên bản SQL được cài đặt trên máy của bạn và cả hai đều có cơ sở dữ liệu mẫu 'Đại học', trong khi tên người dùng cơ sở dữ liệu ReadOnly (với quyền truy cập chỉ đọc) cần được tạo cho cả hai cơ sở dữ liệu.

Tạo cơ sở dữ liệu mẫu trên Phiên bản SQL khác

Vui lòng bỏ qua bước này nếu bạn đã tạo cơ sở dữ liệu mẫu ‘Đại học’ trên phiên bản SQL thứ hai.

Trước tiên, hãy để chúng tôi kết nối với một phiên bản SQL khác bằng cách chạy đoạn mã sau trong cửa sổ Run Command:

 sqlcmd –S  \  

Khi bạn được kết nối với phiên bản SQL mong muốn, vui lòng sử dụng mã từ đầu bài viết để tạo cơ sở dữ liệu 'Đại học' (hoặc tham khảo bài viết của tôi ' Khái niệm cơ bản về Chạy câu lệnh T-SQL từ Dòng lệnh sử dụng SQLCMD ‘).

Tạo tệp tập lệnh để thêm người dùng cơ sở dữ liệu ReadOnly

Sao chép tập lệnh bên dưới và lưu trong Notepad dưới dạng AddReadOnyUniversityDatabaseUser.sql tệp trong C:\ SQLScripts thư mục cho mục đích thử nghiệm.

 - Tập lệnh này tạo một người dùng cơ sở dữ liệu có tên ReadOnly với quyền truy cập chỉ đọc cho cơ sở dữ liệu Đại học. 

Kết nối với phiên bản SQL đầu tiên và chạy tập lệnh thông qua Sqlcmd

Mở Command Prompt bằng cách nhập ‘ cmd trong hộp tìm kiếm. Sau đó, chạy dòng sau:

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

Ở đâu "." (dấu chấm) biểu thị một phiên bản SQL không tên mặc định có thể được thay thế bằng một phiên bản SQL cụ thể mà bạn lựa chọn.

Kết nối với phiên bản SQL thứ hai và chạy tập lệnh thông qua Sqlcmd

Tiếp theo, mở dòng lệnh và sử dụng mã sau để chạy tập lệnh SQL sẽ tạo người dùng cơ sở dữ liệu trên phiên bản SQL khác:

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

Xin lưu ý rằng ‘SQLTAB’ nên được thay thế tên này bằng tên của Phiên bản SQL được cài đặt trên máy của bạn.

Xin chúc mừng! Bạn đã tạo thành công một người dùng cơ sở dữ liệu có quyền truy cập chỉ đọc cho cơ sở dữ liệu mẫu trên nhiều phiên bản SQL chỉ bằng cách chạy một tệp script sử dụng tiện ích Sqlcmd.

Chúng tôi đã học cách đơn giản hóa các tác vụ cơ sở dữ liệu khác nhau bằng cách sử dụng Sqlcmd ở cả chế độ trực tiếp (nhập mã T-SQL sau khi được kết nối với phiên bản SQL mong muốn) và chế độ gián tiếp (khi Sqlcmd chạy tập lệnh dựa trên cơ sở dữ liệu trên phiên bản SQL mong muốn từ dòng lệnh ).

Việc cần làm

Bây giờ bạn đã sẵn sàng chạy các tác vụ cơ sở dữ liệu, chẳng hạn như thêm người dùng cơ sở dữ liệu có quyền chỉ đọc bằng tiện ích sqlcmd, bạn có thể cải thiện kỹ năng của mình hơn nữa bằng cách thử những điều sau:

  1. Cố gắng tạo người dùng cơ sở dữ liệu có quyền truy cập chỉ đọc cho cơ sở dữ liệu mẫu SQLBookShop được đề cập trong bài viết của tôi, ngoại trừ các thủ tục được lưu trữ được đề cập sau mô tả sử dụng tiện ích sqlcmd.
  2. Thử tạo cơ sở dữ liệu và người dùng cơ sở dữ liệu có quyền truy cập chỉ đọc thông qua tệp kịch bản chạy thông qua tiện ích sqlcmd cho cơ sở dữ liệu SQLBookShop bao gồm bất kỳ một trong các quy trình được lưu trữ được đề cập trong bài viết của tôi.
  3. Tạo tệp script và chạy thử bằng tiện ích Sqlcmd để xóa người dùng chỉ đọc đã thêm trước đó khỏi cơ sở dữ liệu mẫu University trên nhiều phiên bản SQL.

Công cụ hữu ích:

dbForge Studio dành cho SQL Server - IDE mạnh mẽ để quản lý, quản trị, phát triển, báo cáo và phân tích dữ liệu 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. Các loại lệnh SQL

  2. Giám sát Nhật ký Giao dịch

  3. Kết nối Microsoft Excel với Xero

  4. Điều chỉnh hiệu suất Knee-Jerk:Chỉ cần thêm ổ SSD

  5. Cách kết hợp kết quả của hai truy vấn trong SQL