2012-06-18 26 views
10

Ứng dụng của tôi (C#, ASP.Net) cần chèn, cập nhật và xóa dữ liệu trong DB và chạy các thủ tục được lưu trữ. Tôi cần phải ngăn không cho nó sửa đổi lược đồ DB - không có bảng thay đổi, tạo hoặc xóa, không thay đổi các thủ tục được lưu trữ.Cách cho phép người dùng SQL Server chèn/cập nhật/xóa dữ liệu, nhưng không thay đổi lược đồ?

Tôi cần cấp phép kết hợp nào cho người dùng ứng dụng? Chỉ cần 'chọn' sẽ không hoạt động, bởi vì nó cần chèn/cập nhật/xóa dữ liệu trong bảng.

Làm cách nào để kiểm tra quyền và quyền truy cập cho thông tin đăng nhập cụ thể? Làm cách nào để cấp hoặc từ chối quyền và quyền truy cập cho thông tin đăng nhập? Tôi cần cấp quyền cho người dùng mới (đăng nhập) để chỉ truy cập một cơ sở dữ liệu.

Sử dụng SQL Server 2008 R2, với SSMS.

Trả lời

18

Nếu bạn thực sự muốn kiểm soát này ở cấp độ đối tượng, bạn có thể làm:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user; 

Ở cấp schema:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user; 

Lý tưởng nhất, tuy nhiên, bạn sẽ không cho phép quảng cáo hoc DML chống lại các bảng của bạn và kiểm soát tất cả DML thông qua các thủ tục được lưu trữ. Trong trường hợp này bạn chỉ cần cấp exec về thủ tục riêng của mình, và không để các đối tượng nó chạm:

GRANT EXEC ON dbo.procedure TO user; 

Tương tự, nếu bạn muốn cho phép exec trên tất cả các thủ tục trong một sơ đồ cụ thể, bạn có thể nói:

GRANT EXEC ON SCHEMA::dbo TO user; 

Một ngoại lệ là khi thủ tục được lưu trữ của bạn soạn SQL động. Trong những trường hợp đó, bạn vẫn có thể cần phải áp dụng các quyền cho các bảng bên dưới trong ngữ cảnh của thực thi SQL động, hoặc bạn có thể sử dụng EXECUTE AS OWNER.

+0

Sẽ cấp quyền 'cập nhật' và 'xóa' cho phép người dùng đó thay đổi và thả bảng? Ngoài ra, tôi có thể cấp quyền trên lược đồ, thay vì cho mỗi bảng không? – jprusakova

+1

Không, cập nhật và xóa tham chiếu đến dữ liệu trong bảng, không phải dữ liệu. Bạn luôn có thể thử điều này. Và có, tôi đã đăng một ví dụ nơi bạn có thể ảnh hưởng đến lược đồ thay vì mỗi đối tượng (có thể hữu ích nếu bạn thêm bảng sau đó, quyền được kế thừa, trừ khi bạn muốn thêm bảng mà người dùng * không * có quyền truy cập vào, thì bạn sẽ cần từ chối rõ ràng trên bảng đó). –

+0

cảm ơn, điều đó giúp ích! – jprusakova

Các vấn đề liên quan