Cho phép người dùng làm bất cứ điều gì trong lược đồ của riêng mình nhưng không tự tạo hoặc xóa lược đồ


12

Tôi đã tạo một lược đồ trong SQL Azure và cấp các quyền sau cho vai trò cơ sở dữ liệu:

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;

Thông qua các quyền được xác định ở trên myusercó thể tạo / xóa lược đồ của riêng mình, vì vậy để khắc phục vấn đề tôi đã thử quyền ALTER ANY SCHema. Nhưng quyền này cũng từ chối người dùng tạo / thả bảng.

Những quyền nào được yêu cầu để cho phép người dùng làm bất cứ điều gì trong lược đồ của riêng mình nhưng không thể tự tạo hoặc xóa lược đồ?

Câu trả lời:


8

Không cần phải cấp CONTROLtrên lược đồ.
Quyền được yêu cầu DROP SCHEMACONTROLtrên lược đồ hoặcALTER ANY SCHEMA ở cấp cơ sở dữ liệu và đó là lý do tại sao người dùng của bạn có thể loại bỏ lược đồ. Việc xóa hai quyền này sẽ ngăn người dùng liên quan đến vai trò tạo và thả lược đồ (trừ khi tất nhiên họ có quyền cấp cao hơn).

Quyền được yêu cầu cho CREATE ALTERDROPcác đối tượng khác là CREATEquyền cho loại đối tượng (bảng \ thủ tục \ hàm \ view) kết hợp với ALTERquyền trên lược đồ.
Bạn đã có các quyền này trong tập lệnh của mình, vì vậy tất cả những gì bạn phải làm là xóa CONTROLquyền. Để tham khảo, đây là danh sách BOL của các DDLcâu lệnh trong đó Bạn có thể tìm thấy sự cho phép cần thiết cho tất cả các loại đối tượng.

Đối với người lười biếng, đây là mã của bạn sau khi xóa quyền không cần thiết:

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;

Nhưng người dùng cũng sẽ có thể tạo các đối tượng theo lược đồ khác?
u23432534

3

Lưu ý rằng vì lược đồ mới có ủy quyền của "dbo", người dùng sẽ có thể truy cập gián tiếp tất cả các đối tượng cơ sở dữ liệu trong đó lược đồ được sở hữu bởi dbo.

Thí dụ:

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.

Đây là hoạt động chính xác của công cụ SQL Server; quyền thấm vào các lược đồ khác với cùng ủy quyền. Để hạn chế quyền truy cập như vậy, đây là một tùy chọn cho việc tạo lược đồ:

CREATE SCHEMA myschema AUTHORIZATION myrole;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.