Bagaimana saya bisa memetakan login ke database menggunakan T-SQL (bukan SSMS)

12

Saya sedang menulis sebuah program yang mengharuskan saya untuk menetapkan semua izin dan semua yang ada dalam kode. Saya terjebak di bagian ini:

masukkan deskripsi gambar di sini

Saya hanya ingin melakukan hal yang sama dengan mengklik kotak kecil di bawah "Peta" untuk database msdb dan menetapkan pengguna itu ke peran SqlAgentUser. Saya membutuhkan pengguna untuk dapat menambah / mengedit pekerjaan SQL Server Agent. Saya bisa mendapatkan pengaturan yang benar menggunakan SSMS tetapi saya tidak bisa untuk seumur hidup saya mencari tahu bagaimana melakukannya dalam SQL mentah.

Saya telah melihat ALTER LOGIN tetapi saya tidak melihat apa pun yang melakukan apa yang saya butuhkan. Saya kira saya tidak tahu istilah yang benar untuk Google. Saya biasanya tidak melakukan hal semacam ini.

Bantuan apa pun sangat kami hargai!

eddie_cat
sumber
3
Anda dapat "menghasilkan skrip" yang saya pikir akan membantu Anda dalam proyek-proyek masa depan. Di bagian atas layar.
Pembalap SQL
1
@ RafaelPiccinelli oh ya ampun, itu sangat membantu! Aku bahkan tidak pernah memperhatikan itu di sana! Terima kasih!
eddie_cat
Saya benar-benar buruk dalam kode, ini banyak membantu saya.
Pembalap SQL

Jawaban:

18
USE msdb;
GO
CREATE USER shims FROM LOGIN shims;
GO
ALTER ROLE SqlAgentUserRole ADD MEMBER shims;
GO

Juga, untuk referensi di masa mendatang, setiap kali Anda tahu cara melakukan sesuatu di UI tetapi tidak dalam skrip, inilah Scriptopsi untuk sebagian besar dialog - ini akan menunjukkan kepada Anda skrip SSMS apa yang akan dijalankan:

masukkan deskripsi gambar di sini

Aaron Bertrand
sumber
3

Jika Anda ingin mengubah database \ default saat ini ke yang berbeda coba:

alter login <loginname> with default_database = <dbname>;

Sekarang, buat pengguna untuk login di atas dibuat

 use <dbname>;
 create user <username> from login <loginname>;

Dan sekarang Anda dapat menetapkan peran untuk pengguna di atas untuk login seperti di bawah ini:

use <dbname>
exec sp_addrolemember 'db_owner', '<username>';
KASQLDBA
sumber
3
Dari dokumen :This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use ALTER ROLE instead.
Aaron Bertrand
Jadi haruskah saya mengubah database default setiap kali saya ingin melakukan sesuatu dengan pengguna ini di msdb? Pada jendela di atas, sepertinya Anda dapat memiliki lebih dari satu database yang dikaitkan dengan seorang pengguna sekaligus ... apakah itu salah?
eddie_cat
@eddie_cat Tidak, saya tidak melihat alasan dalam hal ini untuk mengubah database default, kecuali jika Anda ingin pengguna itu selalu terhubung ke database tertentu secara default.
Aaron Bertrand
Untuk membuat pengguna untuk login; sintaks yang benar adalah sebagai berikut: ------------------------------------------- ------------------------------ GUNAKAN [DatabaseName] GO CREATE USER [UserName] UNTUK LOGIN [LoginName] GO
Kundan Dasange