ได้รับอนุญาตให้ดำเนินการทุกขั้นตอนการจัดเก็บ


147

คำสั่งต่อไปนี้ให้สิทธิ์ผู้ใช้ "MyUser" แก่ผู้ใช้เพื่อเรียกใช้โพรซีเดอร์ที่เก็บไว้ทั้งหมดในฐานข้อมูลหรือไม่

GRANT EXECUTE TO [MyDomain\MyUser]

คำตอบ:


244

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]

28
+1 บวก: มันมอบสิทธิ์ดำเนินการกับขั้นตอนการจัดเก็บในอนาคตเช่นที่ไม่ได้อยู่ในฐานข้อมูลของคุณ - แต่จะถูกสร้างในภายหลัง
marc_s

2
ฉันคิดว่ามันน่าสังเกตว่าคุณuserอาจต้องอยู่ในวงเล็บเหลี่ยม นี่เป็นจริงในกรณีการใช้งานของฉันอย่างน้อยส่วนหนึ่งเนื่องจากผู้ใช้ของฉันมีโดเมนที่แนบมา (เช่นมันมีตัวอักษร \ อยู่ในนั้น) แก้ไข: ตัวละครเฉือนคงที่ไม่ได้ Escape
PrinceTyke

1
ทำไมไม่กำหนดผู้ใช้ให้กับบทบาท db_ddladmin "สมาชิกของบทบาทฐานข้อมูลถาวร db_ddladmin สามารถเรียกใช้คำสั่ง Data Definition Language (DDL) ใด ๆ ในฐานข้อมูล" - ดูที่นี่
Michael Tobisch

1
@MichaelTobisch ที่นี่เพียงแค่ต้องดำเนินการตามขั้นตอนที่เก็บไว้ ต้องใช้บทบาท DDL ในสถานการณ์สร้าง, เปลี่ยนแปลง, ปล่อย, ... ลิงก์เหล่านี้จะต้องมีประโยชน์: docs.microsoft.com/en-us/sql/relational-database/security/…และgeeksforgeeks.org/sql-ddl-dml-dcl-tcl- คำสั่ง
QMaster

2
และระดับถัดไปของการเพิ่มผู้ใช้ไปยังบทบาทในกรณีที่มันช่วยคนขั้นตอนของการวิจัยอีกขั้น ALTER ROLE db_executor เพิ่มสมาชิกชื่อผู้ใช้ของคุณที่นี่
Piwaf

72

SQL Server 2005 นำเสนอความสามารถในการให้สิทธิ์ดำเนินการฐานข้อมูลแก่หลักการฐานข้อมูลดังที่คุณได้อธิบายไว้:

GRANT EXECUTE TO [MyDomain\MyUser]

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

นอกจากนี้คุณยังสามารถ จำกัด ได้โดยการให้สิทธิ์ดำเนินการกับสคีมาหากคุณต้องการให้ละเอียดยิ่งขึ้น:

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]

5
ดีมากที่สามารถทำสิ่งนี้กับ schema ที่เฉพาะเจาะจงได้ดังนั้นหลีกเลี่ยงการอนุญาตบน sys
RemarkLima

17

นอกจากคำตอบข้างต้นแล้วฉันต้องการเพิ่ม:


คุณอาจต้องการให้สิ่งนี้กับบทบาทแทนจากนั้นกำหนดบทบาทให้กับผู้ใช้ สมมติว่าคุณสร้างบทบาทmyAppRightsผ่าน

CREATE ROLE [myAppRights] 

จากนั้นคุณสามารถให้สิทธิดำเนินการผ่าน

GRANT EXECUTE TO [myAppRights] 

กับบทบาทนั้น


หรือถ้าคุณต้องการที่จะทำในระดับสคีมา:

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

ยังใช้งานได้ (ในตัวอย่างนี้บทบาทmyAppRightsจะมีสิทธิ์ดำเนินการสำหรับองค์ประกอบทั้งหมดของสคีมาdboหลังจากนั้น)

ด้วยวิธีนี้คุณจะต้องทำเพียงครั้งเดียวและสามารถกำหนด / ยกเลิกสิทธิ์แอปพลิเคชันที่เกี่ยวข้องทั้งหมดได้อย่างง่ายดายไปยัง / จากผู้ใช้หากคุณต้องการเปลี่ยนในภายหลัง - มีประโยชน์อย่างยิ่งหากคุณต้องการสร้างโปรไฟล์การเข้าถึงที่ซับซ้อนมากขึ้น

หมายเหตุ:หากคุณให้บทบาทกับสคีมานั้นจะมีผลกับองค์ประกอบที่คุณจะสร้างขึ้นในภายหลัง - นี่อาจเป็นประโยชน์หรือไม่ขึ้นอยู่กับการออกแบบที่คุณต้องการดังนั้นโปรดคำนึงไว้เสมอ


-5

ได้รับอนุญาตให้ปฏิบัติหน้าที่ [บทบาท]

อันนี้ก็ช่วยได้แน่นอน


คุณไม่ต้องการให้สิทธิ์ดำเนินการกับบทบาทสาธารณะ แต่จะเปิดรับข้อกังวลด้านความปลอดภัย เพียงให้สิทธิ์แก่ผู้ใช้หรือบทบาท การอนุญาตให้โปรแกรมประมวลผลเฉพาะเจาะจงเป็นวิธีที่ดีที่สุดในการดำเนินการเพื่อให้คุณสามารถควบคุมได้ว่าใครบ้าง
ammills01

การเสียดสีที่นี่ไม่เหมาะสำหรับไซต์ถาม - ตอบโดยเฉพาะอย่างยิ่งเมื่อมันให้ผลลัพธ์ที่เป็นอันตราย
Christopher Brown

"การเข้าสู่ระบบทุกครั้งเป็นของบทบาทเซิร์ฟเวอร์คงที่สาธารณะและผู้ใช้ฐานข้อมูลทุกคนอยู่ในบทบาทฐานข้อมูลสาธารณะเมื่อเข้าสู่ระบบหรือผู้ใช้ไม่ได้รับหรือปฏิเสธการอนุญาตที่เฉพาะเจาะจงในการรักษาความปลอดภัยการเข้าสู่ระบบหรือผู้ใช้ "ดังนั้นการให้สิทธิ์ใด ๆ แก่สาธารณะหมายถึงการให้สิทธิ์เหล่านั้นแก่ผู้ใช้ทั้งหมด นี่เป็นช่องโหว่ที่ยิ่งใหญ่ อ่านลิงค์นี้เพื่อดูเพิ่มเติม: docs.microsoft.com/en-us/sql/relational-database/security/…
QMaster

ด้วยคำตอบเช่นนี้จึงไม่น่าแปลกใจที่มีเว็บไซต์และฐานข้อมูลที่มีความปลอดภัยต่ำจำนวนมาก ชาย Geez
Dave Lucre
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.