ให้สิทธิ์การเข้าถึงตารางของฐานข้อมูลทั้งหมด


13

ฉันเพิ่งอยากจะแบ่งปันสิทธิการเข้าถึงปกติกับผู้ใช้คนหนึ่งของเซิร์ฟเวอร์และฉันตระหนักว่าง่ายCREATE USERและGRANT ALL ON DATABASEคำสั่งไม่ให้เขาทำงานที่เรียบง่ายSELECTกับข้อมูลที่

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


ทำไมคุณถึงทำไม่ได้GRANT SELECT ON TableName TO [Domain\User]? ฉันมักจะกำหนดผู้ใช้ให้กับdb_datareaderบทบาทหากทั้งหมดที่พวกเขาต้องการคือการเข้าถึงแบบอ่านไปยังตารางทั้งหมด แต่ฉันไม่แน่ใจว่าคุณต้องการเป็นอย่างไร
Kris Gruttemeyer

ฉันต้องการให้สิทธิ์ CRUD ทั้งหมดกับทุกตารางในฐานข้อมูล นอกจากนี้ DROPping และ CREATE ภายในฐานข้อมูลนี้ก็สามารถพิสูจน์ได้ว่ามีประโยชน์
d33tah

คำตอบ:


19

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

ในการให้สิทธิ์การเข้าถึงเพื่ออ่านตารางทั้งหมดคุณต้องมีสิทธิ์ใช้งานบนสกีมาและตารางทั้งหมด:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

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

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

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


เป็นmyusrตัวพิมพ์หรือไม่ มันไม่ควรจะเป็นmyuser?
attomos

1
@attomos: มันควรจะเป็นผู้ใช้อื่นในตัวอย่าง ฉันชี้แจง
Erwin Brandstetter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.