Với SQL Server (2008), bạn có thể cấp quyền tạo bảng trong một lược đồ không?


14

Làm việc với bảo mật trong SQL Server 2008, tôi đang cố gắng cấp cho người dùng quyền TẠO TABLE, nhưng chỉ trong một lược đồ cụ thể. Có quyền CREATE TABLE chỉ áp dụng ở cấp cơ sở dữ liệu?

Tôi có thể giới hạn người dùng chỉ tạo bảng trong một lược đồ không?

Tôi đã thử:

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

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

Nhưng, người dùng vẫn không thể tạo bảng trong lược đồ đích. Mãi cho đến khi tôi chạy cái này, người dùng có thể tạo một bảng:

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

BAN CHO

Quyền cơ sở dữ liệu GRANT

Câu trả lời:


12

Theo trợ giúp của SQL Server 2008:

Yêu cầu quyền CREATE TABLE trong cơ sở dữ liệu và quyền ALTER trên lược đồ mà bảng đang được tạo.

Tôi vừa kiểm tra điều này bằng cách sử dụng EXECUTE AS trong cơ sở dữ liệu thử nghiệm và tôi đã có thể tạo một bảng trong lược đồ có quyền ALTER, nhưng không phải trong lược đồ dbo (mà tôi đã không cấp quyền ALTER). Vì vậy, miễn là bạn không quá tự do với sự cho phép ALTER trên các lược đồ, đây sẽ là cách để làm điều đó.


1
Vâng, tôi thấy điều đó bây giờ. Mặc dù người dùng có quyền "CREATE TABLE" ở cấp cơ sở dữ liệu, chúng tôi không thể tạo bảng trong lược đồ nơi không có quyền nào khác được cấp.
RyanW

Có vẻ như thật đáng tiếc khi bạn phải cấp quyền cho phép CREATE TABLE chỉ để kích hoạt kịch bản này.
MgSam

6

Cấp quyền để tạo các bảng cho một người dùng cụ thể trong cơ sở dữ liệu cụ thể không chỉ yêu cầu quyền CREATE TABLE mà còn yêu cầu quyền ALTER cho lược đồ, ví dụ DBO.

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

Ví dụ;

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

1

Không có gì về sự cho phép như vậy trong tài liệu về các quyền áp dụng cho các lược đồ trong năm 2008 R2: http://msdn.microsoft.com/en-us/l Library / ms187940.aspx

Do đó tôi sẽ kết luận: không bạn không thể, tạo bảng chỉ có thể được kiểm soát ở cấp cơ sở dữ liệu (điều này sẽ xuất hiện để áp dụng cho tất cả các bảo mật).


Cảm ơn, tôi đồng ý, không có gì về mức độ đó. Như @ db2 đã lưu ý, quyền cấp phép cơ sở dữ liệu "CREATE TABLE" không đủ để cho phép người dùng tạo bảng nếu họ không có quyền khác trên lược đồ.
RyanW

0

Chắc chắn bạn có thể. Nếu bạn có user1, thì hãy xác định lược đồ mặc định của nó là user1. Cấp CREATE TABLE trong quyền truy cập cơ sở dữ liệu cho người dùng này. Đó là nó. user1 chỉ có thể tạo các bảng trong lược đồ user1.

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.