ด้วย SQL Server (2008) คุณสามารถให้สิทธิ์สร้างตารางภายในสคีมาได้หรือไม่?


14

ทำงานกับความปลอดภัยใน SQL Server 2008 ฉันพยายามให้สิทธิ์ผู้ใช้สร้าง CREATE TABLE แต่เฉพาะภายในสคีมาที่เฉพาะเจาะจง สิทธิ์ CREATE TABLE ใช้กับระดับฐานข้อมูลเท่านั้นหรือไม่

ฉันสามารถ จำกัด ผู้ใช้เพื่อสร้างตารางภายในสคีมาได้หรือไม่

ฉันได้พยายาม:

USE [databasename]
GRANT CONTROL ON Schema :: [schemaname] TO [username]
GO

และ

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GO

แต่ผู้ใช้ยังคงไม่สามารถสร้างตารางภายในสคีมาเป้าหมาย มันไม่ได้จนกว่าฉันจะเรียกใช้หมวกผู้ใช้สามารถสร้างตาราง:

USE [databasename]
GRANT CREATE TABLE to [username]
GO

GRANT

สิทธิ์ในฐานข้อมูล GRANT

คำตอบ:


12

ตามความช่วยเหลือของ SQL Server 2008:

ต้องใช้สิทธิ์ CREATE TABLE ในฐานข้อมูลและสิทธิ์ ALTER บนสคีมาที่สร้างตาราง

ฉันเพิ่งทดสอบสิ่งนี้โดยใช้ EXECUTE AS ในฐานข้อมูลทดสอบและฉันสามารถสร้างตารางใน schema ที่ได้รับอนุญาตจาก ALTER แต่ไม่ใช่ใน dbo schema (ซึ่งฉันไม่ได้ให้อนุญาต ALTER) ดังนั้นตราบใดที่คุณยังไม่ได้รับการอนุญาตจาก ALTER บน schemas มากเกินไปนี่ควรเป็นวิธีที่จะทำ


1
ใช่ฉันเห็นแล้ว แม้ว่าผู้ใช้จะมีสิทธิ์ระดับ "CREATE TABLE" ในฐานข้อมูลเขาก็ไม่สามารถสร้างตารางใน schema ที่ไม่มีการอนุญาตอื่นได้
RyanW

ดูเหมือนโชคร้ายที่คุณต้องให้สิทธิ์ CREATE TABLE แบบครอบคลุมเพื่อเปิดใช้งานสถานการณ์นี้
MgSam

6

การให้สิทธิ์ในการสร้างตารางให้กับผู้ใช้เฉพาะในฐานข้อมูลเฉพาะไม่เพียง แต่ต้องสร้างสิทธิ์ในการสร้างตาราง แต่ยังต้องใช้สิทธิ์ในการแก้ไขสคีมาเช่น DBO

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GRANT CREATE TABLE TO [username]
GO

ตัวอย่างเช่น;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO

1

ไม่มีอะไรเกี่ยวกับการอนุญาตดังกล่าวในเอกสารสิทธิ์ที่เกี่ยวข้องกับ schema ใน 2008 R2: http://msdn.microsoft.com/en-us/library/ms187940.aspx

ดังนั้นฉันจะสรุป: ไม่คุณไม่สามารถสร้างตารางที่สามารถควบคุมได้ในระดับฐานข้อมูลเท่านั้น (ดูเหมือนว่าจะใช้กับ securables ทั้งหมด)


ขอบคุณฉันเห็นด้วยไม่มีอะไรเกี่ยวกับระดับนั้น ตามที่ @ db2 ได้ตั้งข้อสังเกตว่าสิทธิ์ระดับ "CREATE TABLE" ในฐานข้อมูลนั้นไม่เพียงพอที่จะอนุญาตให้ผู้ใช้สร้างตารางหากไม่มีสิทธิ์อื่น ๆ บน schema
RyanW

0

แน่นอนว่าคุณสามารถ หากคุณมี user1 ให้กำหนดสกีมาเริ่มต้นเป็น user1 ด้วย ให้สิทธิ์ CREATE TABLE ในการอนุญาตฐานข้อมูลแก่ผู้ใช้รายนี้ แค่นั้นแหละ. user1 สามารถสร้างตารางได้ภายใน user1 schema เท่านั้น

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