Cấp quyền để chạy một công việc máy chủ SQL


22

Tôi có một công việc trên máy chủ MSSQL 2005 của mình, tôi muốn cho phép bất kỳ người dùng cơ sở dữ liệu nào chạy.

Tôi không lo lắng về bảo mật, vì đầu vào cho công việc thực tế của công việc đến từ bảng cơ sở dữ liệu. Chỉ cần chạy công việc, không thêm hồ sơ vào bảng đó sẽ không làm gì.

Tôi chỉ không thể tìm cách cấp quyền công cộng cho công việc.

Có cách nào để làm điều này? Điều duy nhất tôi có thể nghĩ đến vào lúc này là để công việc liên tục chạy (hoặc theo lịch trình), nhưng vì nó chỉ cần thực hiện bất kỳ công việc thực tế nào hiếm khi (có thể vài tháng một lần) và tôi muốn công việc được thực hiện được thực hiện ngay khi nó tồn tại, đây dường như không phải là một giải pháp tối ưu.

Câu trả lời:


20

Bạn có thể tạo một thủ tục được lưu trữ để chạy công việc. Bạn có thể sử dụng with execute as ownerđể chạy thủ tục được lưu trữ với tư cách là chủ sở hữu cơ sở dữ liệu. Theo cách đó, bản thân người dùng không cần cho phép sp_start_job.

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

Cấp quyền thực thi DoYourJobđể cho phép mọi người bắt đầu công việc.

Tất nhiên, bạn cũng có thể đưa nội dung của công việc vào một thủ tục và cấp quyền để chạy nó. Điều đó sẽ cho phép tương tác nhiều hơn, như hiển thị một văn bản kết quả.


Điều này không hoạt động. Người dùng không có đặc quyền có thể chạy thủ tục, nhưng thủ tục không thể thực thi sp_start_job, vì người dùng không có quyền để thực thi nó. Tôi không muốn nội dung trong một thủ tục, vì tôi không muốn người gọi cần đợi công việc kết thúc.

@shaharmo: Bạn có thể thực hiện thủ tục được lưu trữ với tư cách là chủ sở hữu cơ sở dữ liệu, tôi sẽ chỉnh sửa câu trả lời của tôi
Andomar

Vẫn không làm việc. Tôi nhận được lỗi tương tự. Tôi đã cố gắng tạo DoYourJob trong cơ sở dữ liệu msdb, cũng như trong cơ sở dữ liệu của tôi, với kết quả tương tự.

1
@shaharmo: Lạ thật, tôi tự hỏi ai là chủ cơ sở dữ liệu? Bạn cũng có thể sử dụng with execute as 'loginname', nó có hoạt động không?
Andomar

3

Về cơ bản, các quyền là cần thiết trên sp_start_job(xem phần quyền).

Các vai trò được mô tả trong " Vai trò cơ sở dữ liệu cố định của tác nhân máy chủ SQL " (được liên kết từ bên trên)

Chỉnh sửa, tháng 1 năm 2012

Sau khi downvote ẩn danh 2 năm sau khi tôi trả lời ...

Đọc câu hỏi. Nó nói rằng

Tôi muốn cho phép bất kỳ người dùng cơ sở dữ liệu nào chạy

sau đó

Tôi không lo lắng về an ninh

và cũng

Tôi chỉ không thể tìm cách cấp quyền công cộng cho công việc

Vì vậy, ý kiến ​​của OP dưới đây mâu thuẫn với câu hỏi


1
Điều này sẽ không cung cấp cho tất cả người dùng quyền để chạy tất cả các công việc? Tôi muốn họ được phép chỉ điều hành một công việc cụ thể.

1
Đó là những gì bạn đã yêu cầu ... "cấp quyền công cộng cho công việc"
gbn

1

Điều này sẽ cho phép một người dùng cụ thể (user1) chạy bất kỳ công việc Sql Agent nào.

Thành viên của SQLAgentUserRole và SQLAgentReaderRole chỉ có thể bắt đầu các công việc mà họ sở hữu. Thành viên của SQLAgentOperatorRole có thể bắt đầu tất cả các công việc cục bộ bao gồm cả những công việc thuộc sở hữu của người dùng khác

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


0

Tôi có một nhu cầu tương tự để cấp quyền cho nhà điều hành của tôi thực hiện thủ công các tác vụ SQL Server Agent. Tôi đã theo dõi bài đăng này Các vai trò cơ sở dữ liệu cố định của đại lý SQL Server để cấp vai trò SQLAgentOperatorRole.

Hy vọng điều này sẽ giúp giải quyết trường hợp của bạn.


Bạn có thể đưa vào chi tiết những gì bạn đã làm? Câu trả lời chỉ liên kết là "nhăn mặt" - liên kết thối & c.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.