ผู้ใช้ไม่สามารถดูตารางใน schema ที่ไม่ใช่ค่าเริ่มต้นใน SSMS


10

ฉันมีปัญหาในการตั้งค่าการVIEW DEFINITIONอนุญาตอย่างเหมาะสมในระดับสคีมาสำหรับผู้ใช้รายหนึ่งของฉัน ฉันสร้างคีมาTestSchemaแล้วเพิ่มบางตาราง ผู้ใช้ปัจจุบันมีสิทธิ์ในการเข้าถึงการตั้งค่าและปรับเปลี่ยนตาราง ( SELECT, UPDATE, DELETEฯลฯ ) ผ่านdbo_datareaderและdbo_datawriterบทบาท อย่างไรก็ตามพวกเขาไม่สามารถมองเห็นตารางใด ๆ ในตัวสำรวจวัตถุ SSMS

ฉันลองให้สิทธิ์เพื่อดูคำจำกัดความ:

grant view definition on SCHEMA :: [TestSchema] to [User]

นั่นไม่ได้ผล ฉันพยายามตั้งค่าการอนุญาตระดับตาราง:

grant view definition on [TestSchema].[NewTable] to [User]

นั่นก็ไม่ได้ผล จากนั้นฉันก็ลองแค่ให้ผ้าห่ม:

grant view definition to [User]

และนั่นก็ใช้ได้ ตอนนี้พวกเขาสามารถมองเห็นTestSchemaได้เช่นเดียวกับสกีมาอื่น ๆ ที่พวกเขาไม่ควรเข้าถึง

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


ในอินสแตนซ์ 2008R2 ของฉันเมื่อฉันให้สิทธิ์ db_datareader หรือ db_datawriter พวกเขาสามารถดูสกีมาทั้งหมด ฉันรู้ว่านั่นไม่ใช่สิ่งที่คุณกำลังมองหา แต่มันหมายความว่ามีความแตกต่างที่สำคัญระหว่างการตั้งค่าของคุณและของฉันดังนั้นฉันจึงไม่สามารถทดสอบได้ รุ่นทั้งหมดแตกต่างหรือมีการรักษาความปลอดภัยอื่น ๆ บ้างไหม?
cfradenburg

@cfradenburg - มันยากที่จะบอก นี่คือเซิร์ฟเวอร์ที่จัดการโดย IT ดังนั้นฉันไม่แน่ใจว่าสิ่งที่พวกเขาทำและฉันเป็น SQL Server สามเณรดังนั้นฉันไม่รู้ว่าจะหาอะไร ฉันเดาว่าส่วนหนึ่งของคำถามคือสิทธิ์ / บทบาท / ??? ฉันควรมองหาเพื่อตรวจสอบว่านี้สามารถแก้ไขได้โดยสิทธิ์?
eykanal

ผู้ใช้สามารถสืบค้นตารางได้หรือไม่? หากพวกเขาสามารถสอบถามได้ก็อาจเป็นปัญหาภายใน SSMS
user9164

@ user9164 ใช่ผู้ใช้สามารถสืบค้นตาราง; เป็นเพียงปัญหาการดูภายใน SSMS
eykanal

คำตอบ:


11

คำตอบสั้น ๆ : อย่าใช้db_datareaderหรือdb_datawriterหรือปฏิเสธสิ่งที่เทียบเท่า พวกเขาเพื่อความเข้ากันได้ย้อนหลังเท่านั้น การใช้มันจะทำให้เกิดปัญหาเช่นเดียวกับที่คุณเผชิญ

หากคุณต้องการมอบสิทธิ์ SELECT, INSERT, UPDATE และ DELETE ให้กับอลิซให้กับออบเจ็กต์ที่มีค่าตารางทั้งหมดในการขายสคีมาให้ใช้รายการต่อไปนี้

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

หากคุณต้องการมอบสิทธิ์ SELECT, INSERT, UPDATE และ DELETE หลักให้กับอลิซให้กับออบเจ็กต์ที่มีค่าตารางทั้งหมดในสกีมาทั้งหมดให้ใช้รายการต่อไปนี้

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

การเปิดเผยข้อมูลเมตาจะทำงานอย่างถูกต้อง


คุณมีแหล่งที่มาสำหรับบิต 'เข้ากันได้ย้อนหลัง' หรือไม่? ฉันเข้าใจว่าสกีมานั้นเลิกใช้แล้ว แต่ฉันไม่พบสิ่งใดเกี่ยวกับบทบาท
Stijn

0

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

ใช้สิ่งนี้สำหรับระดับเซิร์ฟเวอร์:

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

และอย่างนี้ในระดับฐานข้อมูล

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO

ขอบคุณสำหรับความคิดเห็นฉันจะลองเมื่อฉันกลับไปทำงานในวันจันทร์
eykanal

0

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันอัพเกรด SQL Server ของเราจาก 2008R2 เป็น 2014 db_datareader หรือ db_datawriter หรือการปฏิเสธของพวกเขาทำงานได้ดีอย่างสมบูรณ์ในปี 2008R2 แต่พวกเขาไม่ทำงานในปี 2014

ตัวอย่างการให้อนุญาตใน SQL Server 2014

หากคุณต้องการให้สิทธิ์แก่ผู้ใช้ Alice, INSERT, UPDATE และ DELETE ให้กับออบเจ็กต์ที่มีค่าตารางทั้งหมดใน Schema Sales จากนั้นใช้สิ่งต่อไปนี้

GRANT SELECT, INSERT, UPDATE, DELETE บน SCHEMA :: การขายให้กับ Alice; หากคุณต้องการมอบสิทธิ์ SELECT, INSERT, UPDATE และ DELETE หลักให้กับอลิซให้กับออบเจ็กต์ที่มีค่าตารางทั้งหมดในสกีมาทั้งหมดให้ใช้รายการต่อไปนี้

GRANT SELECT, INSERT, UPDATE, DELETE to Alice; การเปิดเผยข้อมูลเมตาจะทำงานอย่างถูกต้อง

การอ้างอิง [Greenstone Walker]


1
Sundeep โปรดลองอธิบายคำตอบแทนเพียงแค่ให้ลิงค์ หากคุณต้องการความช่วยเหลือใด ๆ ลองเข้าไปที่เว็บไซต์ทัวร์
LowlyDBA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.