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:
- Sqlcmd dapat menjalankan pernyataan T-SQL (pada prompt perintah)
- Sqlcmd dapat menjalankan prosedur yang ditentukan pengguna atau sistem (pada prompt perintah)
- Sqlcmd juga dapat menjalankan file skrip SQL yang disimpan (pada prompt perintah)
- Sqlcmd dapat terhubung ke beberapa instance SQL Server dan menjalankan skrip
- 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:
- Sqlcmd dapat menjalankan tugas pemeliharaan database
- Sqlcmd dapat menjalankan tugas database pada beberapa contoh SQL
- Sqlcmd dapat mengotomatiskan tugas pemeliharaan database
- 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:
- Masuk ke SQL Server dengan hak yang memadai untuk membuat pengguna database baru
- Pilih database yang diinginkan
- Buat Login baru dengan Sandi di SQL Server
- Buat Pengguna baru untuk Login tersebut
- 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
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:
- Masuk ke SQL Server dengan hak yang memadai untuk membuat dan melepaskan pengguna basis data
- Pilih database yang diinginkan
- Hapus pengguna Hanya-Baca dari peran Pembaca Data
- Lepaskan pengguna ReadOnly dari database
- 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:
- 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.
- 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.
- 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.