Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Menjalankan Tugas Pemeliharaan Database SQL Menggunakan SQLCMD

Artikel ini adalah tentang mengembangkan pemahaman lanjutan tentang utilitas Sqlcmd yang memungkinkan Anda menjalankan perintah T-SQL langsung dari command prompt tanpa memerlukan SSMS (SQL Server Management Studio).

Artikel ini juga menyoroti pentingnya menggunakan Sqlcmd untuk melakukan beberapa tugas database tingkat lanjut yang memerlukan langkah tambahan, mis. terhubung ke database melalui alat database yang sudah diinstal sebelumnya seperti SSMS (SQL Server Management Studio) atau SSDT (SQL Server Data Tools) diikuti dengan menyiapkannya untuk menjalankan skrip SQL terhadap database yang diinginkan.

Utilitas Sqlcmd dapat menjadi penghemat waktu yang tepat untuk pengembang Database dan DBA karena mereka dapat menjalankan skrip SQL yang diperlukan langsung dari baris perintah.

Ikhtisar Dasar-dasar SQLCMD

Mari kita pelajari beberapa dasar utilitas Sqlcmd jika Anda tidak terbiasa dengannya.

Definisi sederhana

Sqlcmd adalah alat baris perintah yang memungkinkan Anda menjalankan perintah T-SQL langsung dari prompt perintah.

Definisi Microsoft

Menurut dokumentasi Microsoft, utilitas Sqlcmd adalah utilitas baris perintah untuk ad hoc, eksekusi interaktif pernyataan dan skrip Transact-SQL dan untuk mengotomatisasi tugas skrip Transact-SQL.

Penggunaan dasar SQLCMD

Berikut ini adalah beberapa penggunaan dasar Sqlcmd seperti yang tercakup dalam Dokumentasi Microsoft:

  1. Sqlcmd dapat menjalankan pernyataan T-SQL (pada prompt perintah)
  2. Sqlcmd dapat menjalankan prosedur yang ditentukan pengguna atau sistem (pada prompt perintah)
  3. Sqlcmd juga dapat menjalankan file skrip SQL yang disimpan (pada prompt perintah)
  4. Sqlcmd dapat terhubung ke beberapa instance SQL Server dan menjalankan skrip
  5. Sqlcmd dapat menulis output dari pernyataan T-SQL ke file teks

Silakan merujuk ke artikel saya ‘Dasar-dasar Menjalankan Pernyataan T-SQL dari Baris Perintah menggunakan SQLCMD ‘, yang merupakan panduan dalam mengimplementasikan utilitas Sqlcmd untuk melakukan beberapa tugas dasar T-SQL sehari-hari.

Prasyarat

Artikel ini mengasumsikan bahwa Anda memiliki pengetahuan dasar tentang tugas pemeliharaan database yang dilakukan melalui pernyataan T-SQL, serta beberapa pemahaman dasar tentang utilitas Sqlcmd.

Artikel ini juga mengasumsikan bahwa database sampel 'University' telah dibuat pada instance SQL yang Anda inginkan.

Artikel saya ‘Dasar-dasar Menjalankan Pernyataan T-SQL dari Baris Perintah menggunakan SQLCMD ' akan membantu Anda mendapatkan pemahaman yang kuat tentang dasar-dasar Sqlcmd sebelum beralih ke penggunaan yang lebih maju.

Penggunaan lanjutan dari SQLCMD

Terlepas dari kegunaan dasar, Sqlcmd memiliki kegunaan lanjutan berikut:

  1. Sqlcmd dapat menjalankan tugas pemeliharaan database
  2. Sqlcmd dapat menjalankan tugas database pada beberapa contoh SQL
  3. Sqlcmd dapat mengotomatiskan tugas pemeliharaan database
  4. Sqlcmd dapat mengotomatiskan skrip T-SQL pada banyak instance

Tugas Basis Data 1:Membuat Pengguna Basis Data Hanya Baca

Mari kita lihat tugas database yang sangat penting untuk membuat pengguna yang hanya memiliki akses baca-saja untuk database (kami akan menyebut pengguna ini 'Hanya Baca').

Persyaratan:menambahkan pengguna ReadOnly ke database sampel

Bayangkan bahwa DBA atau pengembang database telah ditugaskan untuk menambahkan pengguna ReadOnly ke database yang dibuat sebelumnya.

Mereka akan memenuhi persyaratan ini dengan menggunakan Sqlcmd.

Prinsip Hak Istimewa Terkecil dan pengguna Hanya-Baca

Tujuan membuat pengguna ReadOnly adalah untuk mematuhi The Prinsip Hak Istimewa Terkecil , dan menurut dokumentasi Microsoft, Anda harus selalu mengikuti prinsip ini saat memberikan izin kepada pengguna database. Berikan izin minimum yang diperlukan bagi pengguna atau peran untuk menyelesaikan tugas yang diberikan.

Jadi, dalam kebanyakan kasus, kita perlu membuat pengguna database sedemikian rupa sehingga izin pengguna ini dibatasi hanya untuk dapat membaca objek database, tanpa kemampuan untuk mengubahnya.

Ini juga sangat membantu dalam skenario laporan dan analisis basis data, di mana pengguna basis data yang akan mengakses data hanya diberi hak untuk membaca informasi. Memberikan hak lebih dari yang diperlukan – seperti izin untuk menambahkan atau menjatuhkan objek – dapat menimbulkan risiko keamanan dalam kasus ini.

Langkah-langkah untuk membuat pengguna database ReadOnly

Biasanya, pengguna database ReadOnly baru dibuat sebagai berikut:

  1. Masuk ke SQL Server dengan hak yang memadai untuk membuat pengguna database baru
  2. Pilih database yang diinginkan
  3. Buat Login baru dengan Sandi di SQL Server
  4. Buat Pengguna baru untuk Login tersebut
  5. Berikan izin hanya-baca kepada Pengguna tersebut untuk database yang diperlukan

Kita dapat mengilustrasikan proses ini sebagai berikut:

Sudah menyiapkan database sampel ('Universitas')

Seperti disebutkan di atas, artikel ini mengasumsikan bahwa database sampel 'Universitas' telah dibuat.

Silakan merujuk ke artikel saya sebelumnya ‘Dasar-dasar Menjalankan Pernyataan T-SQL dari Baris Perintah menggunakan SQLCMD ' untuk membuat database sampel atau gunakan kode T-SQL berikut untuk menyiapkan database sampel yang disebut 'Universitas':

[expand title =”Kode “]

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

Menggunakan Sqlcmd untuk menambahkan pengguna ReadOnly

Pertama-tama, Anda perlu menjalankan utilitas Sqlcmd melalui jendela 'Jalankan perintah' setelah memastikan Anda memiliki hak yang cukup untuk membuat pengguna basis data.

Sqlcmd -S PC

Sebagai hasil dari menjalankan perintah ini, Anda akan terhubung ke instance SQL default yang tidak disebutkan namanya – jika Anda memilikinya. Jika tidak, sebutkan \ untuk terhubung ke instance SQL yang diinginkan.

Setelah Anda terhubung ke instance SQL yang diinginkan, tambahkan pengguna database baru dengan hak hanya baca yang disebut 'Hanya Baca' ke database 'Universitas' dengan menggunakan kode berikut:

USE University

CREATE LOGIN ReadOnly with Password ='b1GS3crt00'

CREATE USER Readonly for login readonly

exec sp_addrolemember db_datareader,ReadOnly

GO

Periksa pengguna database yang baru dibuat (Hanya Baca)

Buka SSMS (SQL Server Management Studio) dan sambungkan ke SQL Server Database Engine menggunakan kredensial berikut:

Nama Pengguna: Hanya Baca

Sandi:b1GS3crt00

Hasilnya, Anda akan terhubung ke SQL Database Engine.

Saat Anda terhubung ke SQL Database Engine, perluas node Databases di Object Explorer dan klik University Database.

Selanjutnya, pilih Users di bawah Security untuk melihat pengguna database 'ReadOnly' sebagai berikut:

Tugas Basis Data 2:Menghapus Pengguna Hanya Baca Basis Data menggunakan SQLCMD

Tugas database ini adalah tentang menghapus pengguna dari database melalui utilitas Sqlcmd.

Persyaratan:hapus pengguna ReadOnly dari database sampel

Pertimbangkan persyaratan baru – menghapus pengguna database dengan akses hanya baca dari database sampel.

Langkah-langkah untuk menghapus pengguna database ReadOnly

Proses umum untuk menghapus pengguna ReadOnly yang baru dibuat beserta Loginnya adalah sebagai berikut:

  1. Masuk ke SQL Server dengan hak yang memadai untuk membuat dan melepaskan pengguna basis data
  2. Pilih database yang diinginkan
  3. Hapus pengguna Hanya-Baca dari peran Pembaca Data
  4. Lepaskan pengguna ReadOnly dari database
  5. Lepaskan Login Hanya-Baca dari SQL Server

Menggunakan Sqlcmd untuk menghapus pengguna ReadOnly (dengan Login)

Harap pastikan bahwa semua koneksi lain ke database 'Universitas' melalui pengguna ReadOnly ditutup.

Hubungkan ke instance SQL menggunakan Sqlcmd dan jalankan kode berikut pada prompt perintah untuk menutup semua sesi saat ini untuk login ReadOnly (bila terhubung ke instance SQL yang sebelumnya digunakan untuk membuat pengguna ReadOnly)

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

GO

Anda perlu memeriksa session_id mana yang dikembalikan dan memutuskan koneksi berdasarkan session_id itu:

KILL 55

GO

Harap dicatat bahwa '55' digunakan di sini sebagai contoh. Anda harus menghapus session_id apa pun yang Anda dapatkan di mesin Anda saat terhubung ke instance SQL yang diinginkan.

Selanjutnya, jalankan kode berikut untuk menjatuhkan pengguna database dan login:

Use University

EXEC sp_droprolemember 'db_datareader', 'ReadOnly'

EXEC sp_dropuser ReadOnly

EXEC sp_droplogin ReadOnly

GO

Akibatnya, pengguna database ReadOnly harus berhasil dijatuhkan.

Periksa pengguna yang dihapus (Hanya Baca)

Coba sambungkan ke SQL Server menggunakan kredensial berikut:

Nama Pengguna:Hanya Baca

Sandi:b1GS3crt00

Upaya koneksi yang gagal akibat mencoba terhubung ke SQL Server menggunakan login ReadOnly membuktikan bahwa login dan pengguna database ini telah berhasil dihapus.

Dengan cara ini, dengan bantuan Sqlcmd, kami telah menghapus pengguna database dengan akses read-only hanya dengan menjalankan beberapa kode pada command prompt tanpa perlu menggunakan SSMS (SQL Server Management Studio).

Tugas Database 3:Membuat Pengguna Database dengan akses baca-saja di Beberapa Instance SQL

Mari kita jelajahi manfaat menggunakan file skrip SQL yang dipanggil melalui utilitas Sqlcmd untuk menambahkan pengguna database dengan akses baca-saja ke beberapa instance SQL untuk database sampel.

Persyaratan:Tambahkan pengguna ReadOnly untuk beberapa instance untuk database sampel

Sebagai pengembang basis data atau DBA, Anda ditugaskan untuk menambahkan pengguna basis data dengan akses hanya baca ke basis data sampel untuk beberapa contoh SQL melalui skrip menggunakan Sqlcmd.

Prasyarat

Tugas ini mengasumsikan bahwa setidaknya ada dua instance SQL yang diinstal pada mesin Anda dan keduanya memiliki database sampel 'University', sedangkan nama pengguna database ReadOnly (dengan akses hanya baca) perlu dibuat untuk kedua database.

Membuat database sampel pada Instance SQL lain

Harap lewati langkah ini jika Anda telah membuat database sampel 'Universitas' pada contoh SQL kedua.

Mari kita sambungkan dulu ke instance SQL lain dengan menjalankan kode berikut di jendela Run Command:

sqlcmd –S <computername>\<sqlinstancename>

Setelah Anda terhubung ke contoh SQL yang diinginkan, silakan gunakan kode dari awal artikel untuk membuat database 'Universitas' (atau lihat artikel saya 'Dasar-dasar Menjalankan Pernyataan T-SQL dari Baris Perintah menggunakan SQLCMD ‘).

Buat file skrip untuk menambahkan pengguna basis data ReadOnly

Salin skrip di bawah ini dan simpan di Notepad sebagai AddReadOnyUniversityDatabaseUser.sql file di C:\SQLScripts folder untuk tujuan pengujian.

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

Hubungkan ke instance SQL pertama dan jalankan skrip melalui Sqlcmd

Buka Command Prompt dengan mengetik ‘cmd di kotak pencarian. Kemudian, jalankan baris berikut:

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

Di mana "." (titik) menandakan contoh SQL default tanpa nama yang dapat diganti dengan contoh pilihan SQL tertentu.

Hubungkan ke instance SQL kedua dan jalankan skrip melalui Sqlcmd

Selanjutnya, buka baris perintah dan gunakan kode berikut untuk menjalankan skrip SQL yang akan membuat pengguna database pada contoh SQL lain:

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

Harap perhatikan bahwa 'SQLTAB' harus diganti dengan nama Instance SQL yang diinstal pada mesin Anda.

Selamat! Anda telah berhasil membuat pengguna database dengan akses baca-saja untuk database sampel pada beberapa contoh SQL hanya dengan menjalankan file skrip menggunakan utilitas Sqlcmd.

Kami telah belajar untuk menyederhanakan berbagai tugas database dengan menggunakan Sqlcmd dalam mode langsung (mengetik kode T-SQL setelah terhubung ke instance SQL yang diinginkan) dan mode tidak langsung (ketika Sqlcmd menjalankan skrip terhadap database pada instance SQL yang diinginkan dari baris perintah ).

Hal yang Dapat Dilakukan

Sekarang Anda siap untuk menjalankan tugas database seperti menambahkan pengguna database dengan izin baca-saja menggunakan utilitas sqlcmd, Anda dapat meningkatkan keterampilan Anda lebih lanjut dengan mencoba hal-hal berikut:

  1. Cobalah untuk membuat pengguna database dengan akses baca-saja untuk database sampel SQLBookShop yang disebutkan dalam artikel saya, tidak termasuk prosedur tersimpan yang disebutkan setelahnya, deskripsi penggunaan utilitas sqlcmd.
  2. Coba buat database dan pengguna database dengan akses hanya baca melalui file skrip yang dijalankan melalui utilitas sqlcmd untuk database SQLBookShop termasuk salah satu prosedur tersimpan yang disebutkan dalam artikel saya.
  3. Buat file skrip dan uji jalankan menggunakan utilitas Sqlcmd untuk menghapus pengguna hanya-baca yang ditambahkan sebelumnya dari database sampel Universitas pada beberapa contoh SQL.

Alat yang berguna:

dbForge Studio untuk SQL Server – IDE canggih untuk manajemen, administrasi, pengembangan, pelaporan dan analisis data 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. Bug Estimasi Kardinalitas Subquery

  2. FieldShield SDK

  3. Serialisasi Penghapusan Dari Indeks Columnstore Clustered

  4. Ambang Pengoptimalan – Pengelompokan dan Penggabungan Data, Bagian 5

  5. Tips Manajemen Cadangan untuk TimescaleDB