ให้สิทธิ์ในการเรียกใช้งานเซิร์ฟเวอร์ SQL


22

ฉันมีงานบนเซิร์ฟเวอร์ MSSQL 2005 ของฉันที่ฉันต้องการอนุญาตให้ผู้ใช้ฐานข้อมูลใด ๆ ทำงาน

ฉันไม่กังวลเกี่ยวกับความปลอดภัยเนื่องจากอินพุตของงานจริงมาจากตารางฐานข้อมูล เพียงแค่เรียกใช้งานโดยไม่ต้องเพิ่มบันทึกลงในตารางนั้นจะไม่ทำอะไรเลย

ฉันไม่สามารถหาวิธีอนุญาตสิทธิ์สาธารณะให้กับงานได้

มีวิธีการทำเช่นนี้? สิ่งเดียวที่ฉันสามารถคิดได้ ณ จุดนี้คือการให้งานทำงานอย่างต่อเนื่อง (หรือตามกำหนดเวลา) แต่เนื่องจากมันจำเป็นต้องทำงานจริง ๆ น้อย ๆ (บางทีทุกๆสองสามเดือน) และฉันต้องการให้งานเป็นจริง เสร็จสิ้นทันทีที่มีอยู่สิ่งนี้ดูเหมือนจะไม่เป็นทางออกที่ดีที่สุด

คำตอบ:


20

คุณสามารถสร้างโพรซีเดอร์ที่เก็บไว้ที่รันงาน คุณสามารถใช้with execute as ownerเพื่อเรียกใช้กระบวนงานที่เก็บไว้เป็นเจ้าของฐานข้อมูล sp_start_jobวิธีการที่ผู้ใช้เองไม่จำเป็นต้องมีการอนุญาตใน

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

ให้สิทธิ์ดำเนินการDoYourJobเพื่อให้ผู้คนสามารถเริ่มงานได้

แน่นอนคุณสามารถใส่เนื้อหาของงานในขั้นตอนและให้สิทธิ์ในการทำงาน ที่จะช่วยให้มีปฏิสัมพันธ์มากขึ้นเช่นการแสดงข้อความผลลัพธ์


มันใช้งานไม่ได้ ผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถเรียกใช้ขั้นตอนได้ แต่ขั้นตอนไม่สามารถดำเนินการ sp_start_job ได้เนื่องจากผู้ใช้ไม่มีสิทธิ์ดำเนินการ ฉันไม่ต้องการให้เนื้อหาอยู่ในขั้นตอนเพราะฉันไม่ต้องการให้ผู้โทรต้องรอให้งานสิ้นสุด

@shaharmo: คุณสามารถมีขั้นตอนการเก็บดำเนินการเป็นเจ้าของฐานข้อมูลที่ฉันจะแก้ไขคำตอบของฉัน
Andomar

ยังไม่ทำงาน ฉันได้รับข้อผิดพลาดเดียวกัน ฉันพยายามสร้าง DoYourJob ในฐานข้อมูล msdb เช่นเดียวกับในฐานข้อมูลของฉันด้วยผลลัพธ์เดียวกัน

1
@ shaharmo: แปลกฉันสงสัยว่าใครเป็นเจ้าของฐานข้อมูลหรือไม่ คุณสามารถใช้with execute as 'loginname'งานได้หรือไม่
Andomar

3

โดยทั่วไปจำเป็นต้องมีการอนุญาตในsp_start_job(ดูหัวข้อการอนุญาต)

บทบาทอธิบายไว้ใน " บทบาทเซิร์ฟเวอร์ฐานข้อมูลตัวแทนคงที่ของ SQL " (เชื่อมโยงจากด้านบน)

แก้ไขมกราคม 2012

หลังจาก downvote ไม่ระบุชื่อ 2 ปีหลังจากที่ฉันตอบ ...

อ่านคำถาม มันบอกว่า

ฉันต้องการอนุญาตให้ผู้ใช้ฐานข้อมูลใด ๆ รัน

แล้วก็

ฉันไม่กังวลเกี่ยวกับความปลอดภัย

และนอกจากนี้ยังมี

ฉันไม่สามารถหาวิธีอนุญาตสิทธิ์สาธารณะให้กับงานได้

ดังนั้นความคิดเห็นของ OP ด้านล่างขัดแย้งกับคำถาม


1
สิ่งนี้จะไม่ให้สิทธิ์ผู้ใช้ทั้งหมดในการรันงานทั้งหมดหรือไม่ ฉันต้องการให้พวกเขามีสิทธิ์ทำงานเฉพาะงานเดียวเท่านั้น

1
ซึ่งเป็นสิ่งที่คุณถาม ... "ให้สิทธิ์ของประชาชนที่จะทำงาน"
GBN

1

สิ่งนี้จะอนุญาตให้ผู้ใช้เฉพาะ (user1) เรียกใช้งานงาน Sql Agent ใด ๆ

สมาชิกของ SQLAgentUserRole และ SQLAgentReaderRole สามารถเริ่มงานที่ตนเองเป็นเจ้าของได้เท่านั้น สมาชิกของ SQLAgentOperatorRole สามารถเริ่มงานในท้องถิ่นทั้งหมดรวมถึงงานที่ผู้ใช้รายอื่นเป็นเจ้าของ

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


0

ฉันมีความต้องการที่คล้ายกันในการให้อนุญาตสำหรับผู้ให้บริการของฉันเพื่อดำเนินงาน SQL Server Agent ด้วยตนเอง ฉันติดตามโพสต์นี้ บทบาทเซิร์ฟเวอร์ฐานข้อมูลตัวแทนการแก้ไขของ SQL Serverเพื่อให้บทบาท SQLAgentOperatorRole

หวังว่านี่จะช่วยแก้ปัญหาของคุณ


คุณสามารถใส่รายละเอียดของสิ่งที่คุณทำหรือไม่? ลิงก์เฉพาะคำตอบคือ "ขมวดคิ้ว" - link rot & c
Vérace
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.