Berikan izin untuk menjalankan pekerjaan server SQL

22

Saya memiliki pekerjaan di server MSSQL saya 2005, bahwa saya ingin mengizinkan pengguna basis data untuk menjalankan.

Saya tidak khawatir tentang keamanan, karena input ke pekerjaan sebenarnya berasal dari tabel database. Hanya menjalankan pekerjaan, tanpa menambahkan catatan ke tabel itu tidak akan menghasilkan apa-apa.

Saya tidak bisa menemukan cara untuk memberikan izin publik untuk pekerjaan itu.

Apakah ada cara untuk melakukan ini? Satu-satunya hal yang dapat saya pikirkan pada saat ini adalah memiliki pekerjaan terus berjalan (atau sesuai jadwal), tetapi karena itu hanya perlu melakukan pekerjaan yang sebenarnya jarang (mungkin sekali setiap beberapa bulan) dan saya ingin pekerjaan menjadi dilakukan segera setelah ada, sepertinya ini bukan solusi yang optimal.

Shahar Mosek
sumber

Jawaban:

20

Anda dapat membuat prosedur tersimpan yang menjalankan pekerjaan. Anda dapat menggunakan with execute as owneruntuk menjalankan prosedur tersimpan sebagai pemilik basis data. Dengan begitu, para pengguna itu sendiri tidak perlu izin sp_start_job.

create procedure dbo.DoYourJob
with execute as owner
as
exec sp_start_job @job_name = 'YourJob'

Berikan hak eksekusi DoYourJobuntuk memungkinkan orang memulai pekerjaan.

Tentu saja, Anda juga dapat meletakkan konten pekerjaan dalam suatu prosedur, dan memberikan hak untuk menjalankannya. Itu akan memungkinkan lebih banyak interaksi, seperti menampilkan teks hasil.

Andomar
sumber
Ini tidak bekerja Pengguna yang tidak memiliki hak istimewa dapat menjalankan prosedur, tetapi prosedur tidak dapat menjalankan sp_start_job, karena pengguna tidak memiliki izin untuk menjalankannya. Saya tidak ingin isinya dalam prosedur, karena saya tidak ingin penelepon harus menunggu pekerjaan berakhir.
@shaharmo: Anda dapat memiliki prosedur yang tersimpan mengeksekusi sebagai pemilik database, saya akan mengedit jawaban saya
Andomar
Masih tidak bekerja. Saya mendapatkan kesalahan yang sama. Saya mencoba membuat DoYourJob di database msdb, dan juga di database saya, dengan hasil yang sama.
1
@ Shaharmo: Aneh, saya ingin tahu siapa pemilik basis data? Anda juga dapat menggunakan with execute as 'loginname', apakah itu berhasil?
Andomar
3

Pada dasarnya, izin diperlukan pada sp_start_job(lihat bagian izin).

Peran tersebut dijelaskan dalam " Peran Database Tetap Agen SQL Server " (ditautkan dari atas)

Edit, Jan 2012

Setelah downvote anonim 2 tahun setelah saya menjawab ...

Baca pertanyaannya. Ia mengatakan

Saya ingin mengizinkan pengguna basis data untuk berjalan

kemudian

Saya tidak khawatir tentang keamanan

dan juga

Saya tidak bisa menemukan cara untuk memberikan izin publik untuk pekerjaan itu

Jadi komentar OP di bawah ini bertentangan dengan pertanyaan tersebut

gbn
sumber
1
Tidakkah ini memberi semua pengguna izin untuk menjalankan semua pekerjaan? Saya ingin mereka memiliki izin untuk hanya menjalankan satu pekerjaan tertentu.
1
Itulah yang Anda tanyakan ... "berikan izin publik untuk pekerjaan itu"
gbn
1

Ini akan memungkinkan pengguna tertentu (user1) untuk menjalankan pekerjaan Agen Sql.

Anggota SQLAgentUserRole dan SQLAgentReaderRole hanya dapat memulai pekerjaan yang mereka miliki. Anggota SQLAgentOperatorRole dapat memulai semua pekerjaan lokal termasuk yang dimiliki oleh pengguna lain

USE [msdb] GO CREATE USER [user1] FOR LOGIN [user1] GO USE [msdb] GO ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [user1] GO

mabuk
sumber
0

Saya memiliki kebutuhan serupa untuk memberikan izin kepada operator saya untuk secara manual menjalankan tugas-tugas Agen SQL Server. Saya mengikuti posting ini peran Agen Tetap Database SQL Server untuk memberikan peran SQLAgentOperatorRole.

Semoga bantuan ini bisa menyelesaikan kasus Anda.

Vu Doan
sumber
Bisakah Anda memasukkan rincian dari apa yang Anda lakukan? Tautan jawaban saja "disukai" - tautan busuk & c.
Vérace