อนุญาตให้ผู้ใช้ทำอะไรก็ได้ภายในสคีมาของเขาเอง แต่ไม่ต้องสร้างหรือวางสคีมาเอง


12

ฉันสร้างสคีมาใน SQL Azure และได้รับอนุญาตจากบทบาทฐานข้อมูลต่อไปนี้:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW 
DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

ผ่านการอนุญาตที่กำหนดไว้ข้างต้นmyuserสามารถสร้าง / วางสคีมาของเขาเองเพื่อที่จะเอาชนะปัญหาที่ฉันลองใช้สิทธิ์ ALTER ANY SCHEMA แต่สิทธิ์นี้ยังปฏิเสธผู้ใช้ในการสร้าง / วางตาราง

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

คำตอบ:


8

ไม่จำเป็นต้องให้สิทธิ์CONTROLกับสคีมาไม่
สิทธิ์ที่จำเป็นต้องDROP SCHEMAมีCONTROLอยู่ในสคีมาหรือALTER ANY SCHEMAที่ระดับฐานข้อมูลและนั่นคือสาเหตุที่ผู้ใช้ของคุณสามารถวางสคีมาได้ การลบสิทธิ์ทั้งสองนี้จะป้องกันผู้ใช้ที่เกี่ยวข้องกับบทบาทจากการสร้างและวางสคีมา (ยกเว้นว่าพวกเขามีสิทธิ์ระดับสูงกว่าแน่นอน)

สิทธิ์ที่จำเป็นในการCREATE ALTERและDROPวัตถุอื่น ๆ คือการCREATEอนุญาตสำหรับประเภทวัตถุ (table \ procedure \ function \ view) รวมกับALTERสิทธิ์บน schema
คุณมีสิทธิ์เหล่านี้ในสคริปต์ของคุณดังนั้นสิ่งที่คุณต้องทำคือลบการCONTROLอนุญาต สำหรับการอ้างอิงนี่คือรายการBOLของDDLข้อความสั่งที่คุณสามารถค้นหาสิทธิ์ที่จำเป็นสำหรับวัตถุทุกประเภท

สำหรับคนขี้เกียจนี่คือรหัสของคุณหลังจากลบสิทธิ์ที่ไม่จำเป็นออก:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT,
          UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

แต่ผู้ใช้จะสามารถสร้างวัตถุภายใต้สคีอื่น ๆ ได้หรือไม่
u23432534

4

โปรดทราบว่าเนื่องจากสคีมาใหม่มีการอนุญาต "dbo" ผู้ใช้จะสามารถเข้าถึงวัตถุฐานข้อมูลทั้งหมดโดยทางอ้อมที่สคีมาเป็นเจ้าของโดย dbo

ตัวอย่าง:

select * from dbo.test; --fails

create view myschema.test
as 
select * 
from dbo.test; --view is created

select * from myschema.test;  --contents of dbo.test now revealed.

นี่เป็นการดำเนินการที่ถูกต้องของโปรแกรม SQL Server สิทธิ์ในการซึมเข้าไปใน schema อื่น ๆ ที่มีการอนุญาตเดียวกัน หากต้องการ จำกัด การเข้าถึงดังกล่าวนี่คือตัวเลือกสำหรับการสร้างสคีมา:

CREATE SCHEMA myschema AUTHORIZATION myrole;

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