ฉันจำเป็นต้อง จำกัด การเข้าถึงผู้ใช้เฉพาะ แต่พวกเขายังต้องสามารถดูข้อมูลในตารางที่ dbo เป็นเจ้าของได้
ฉันกำลังพยายามทำสิ่งต่อไปนี้:
- ฟังก์ชั่น dbo schema ตามปกติจะสามารถเข้าถึงทุกสิ่ง
- schema1 schema มีการเข้าถึงวัตถุ schema1 เท่านั้น
- ถ้ามุมมอง schema1 หรือกระบวนงานที่เก็บไว้เข้าถึงข้อมูลในตารางที่ dbo เป็นเจ้าของห่วงโซ่การอนุญาตอย่างเหมาะสม
- user1 มีสิทธิ์เข้าถึง schema1 และไม่มีอะไรอื่นอีก ยกเว้นในกรณีของ # 3
นี่คือสิ่งที่ฉันได้ลอง:
- สร้างผู้ใช้ user1 ที่แมปกับการเข้าสู่ระบบทดสอบด้วยรหัสผ่านแบบสุ่ม
- สร้างตารางคู่ใน dbo schema ด้วยข้อมูลการทดสอบบางอย่าง
- สร้างสคีมา 1
- สร้าง schema1.get_profiles ที่เลือกจากมุมมองที่เรียกว่า schema1.profiles ซึ่งเข้าถึงข้อมูลใน dbo.people, dbo.taglinks และ dbo.tags
อย่างไรก็ตามการใช้คำสั่งต่อไปนี้ในขณะที่เข้าสู่ระบบในฐานะผู้ใช้ 1:
EXEC get_profiles 1
ผลลัพธ์ใน:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
ฉันได้ลองWITH EXECUTE AS OWNER
และไม่สามารถเริ่มเข้าใจว่า "การผูกมัดเจ้าของ" ควรทำงานอย่างไร
ฉันได้ลองแล้ว
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO user1
GRANT UPDATE ON SCHEMA::schema1 TO user1
GRANT VIEW DEFINITION ON SCHEMA::schema1 TO user1
แต่ฉันได้รับข้อผิดพลาดต่อไปนี้ (แม้จะเป็นผู้ใช้ที่มีสิทธิ์เข้าถึงระดับ dbo):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
สิ่งที่ฉันต้องการคือ user1 เพื่อให้สามารถเข้าถึงข้อมูลผ่านขั้นตอนการจัดเก็บที่ฉันให้ไว้และไม่มีอะไรอื่นอีก
นอกจากนี้สิ่งนี้มีจุดประสงค์ที่จะมีชีวิตอยู่ในฐานข้อมูล SQL Azure ที่มีอยู่ในที่สุด แต่ฉันกำลังทดสอบกับฐานข้อมูลท้องถิ่นก่อน