คำสั่งต่อไปนี้ให้สิทธิ์ผู้ใช้ "MyUser" แก่ผู้ใช้เพื่อเรียกใช้โพรซีเดอร์ที่เก็บไว้ทั้งหมดในฐานข้อมูลหรือไม่
GRANT EXECUTE TO [MyDomain\MyUser]
คำสั่งต่อไปนี้ให้สิทธิ์ผู้ใช้ "MyUser" แก่ผู้ใช้เพื่อเรียกใช้โพรซีเดอร์ที่เก็บไว้ทั้งหมดในฐานข้อมูลหรือไม่
GRANT EXECUTE TO [MyDomain\MyUser]
คำตอบ:
SQL Server 2008 และสูงกว่า:
/* CREATE A NEW ROLE */
CREATE ROLE db_executor
/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
สำหรับผู้ใช้ (ไม่ใช่บทบาท):
USE [DBName]
GO
GRANT EXECUTE TO [user]
user
อาจต้องอยู่ในวงเล็บเหลี่ยม นี่เป็นจริงในกรณีการใช้งานของฉันอย่างน้อยส่วนหนึ่งเนื่องจากผู้ใช้ของฉันมีโดเมนที่แนบมา (เช่นมันมีตัวอักษร \ อยู่ในนั้น) แก้ไข: ตัวละครเฉือนคงที่ไม่ได้ Escape
SQL Server 2005 นำเสนอความสามารถในการให้สิทธิ์ดำเนินการฐานข้อมูลแก่หลักการฐานข้อมูลดังที่คุณได้อธิบายไว้:
GRANT EXECUTE TO [MyDomain\MyUser]
ที่จะให้สิทธิ์ในขอบเขตฐานข้อมูลซึ่งรวมถึงขั้นตอนการจัดเก็บทั้งหมดในแบบแผนทั้งหมด ซึ่งหมายความว่าคุณไม่จำเป็นต้องให้สิทธิ์อย่างชัดเจนต่อขั้นตอนการจัดเก็บ
นอกจากนี้คุณยังสามารถ จำกัด ได้โดยการให้สิทธิ์ดำเนินการกับสคีมาหากคุณต้องการให้ละเอียดยิ่งขึ้น:
GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]
นอกจากคำตอบข้างต้นแล้วฉันต้องการเพิ่ม:
คุณอาจต้องการให้สิ่งนี้กับบทบาทแทนจากนั้นกำหนดบทบาทให้กับผู้ใช้ สมมติว่าคุณสร้างบทบาทmyAppRights
ผ่าน
CREATE ROLE [myAppRights]
จากนั้นคุณสามารถให้สิทธิดำเนินการผ่าน
GRANT EXECUTE TO [myAppRights]
กับบทบาทนั้น
หรือถ้าคุณต้องการที่จะทำในระดับสคีมา:
GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]
ยังใช้งานได้ (ในตัวอย่างนี้บทบาทmyAppRights
จะมีสิทธิ์ดำเนินการสำหรับองค์ประกอบทั้งหมดของสคีมาdbo
หลังจากนั้น)
ด้วยวิธีนี้คุณจะต้องทำเพียงครั้งเดียวและสามารถกำหนด / ยกเลิกสิทธิ์แอปพลิเคชันที่เกี่ยวข้องทั้งหมดได้อย่างง่ายดายไปยัง / จากผู้ใช้หากคุณต้องการเปลี่ยนในภายหลัง - มีประโยชน์อย่างยิ่งหากคุณต้องการสร้างโปรไฟล์การเข้าถึงที่ซับซ้อนมากขึ้น
หมายเหตุ:หากคุณให้บทบาทกับสคีมานั้นจะมีผลกับองค์ประกอบที่คุณจะสร้างขึ้นในภายหลัง - นี่อาจเป็นประโยชน์หรือไม่ขึ้นอยู่กับการออกแบบที่คุณต้องการดังนั้นโปรดคำนึงไว้เสมอ
ได้รับอนุญาตให้ปฏิบัติหน้าที่ [บทบาท]
อันนี้ก็ช่วยได้แน่นอน