2010-02-19 26 views
15

Trong SQL Server 2005, có được xây dựng trong vai trò:Vai trò cơ sở dữ liệu tích hợp trong SQL Server 2005 để cho phép thực hiện các thủ tục được lưu trữ?

db_datareader

db_datawriter

, vv

Có vai trò đó cho phép người dùng thực hiện một proc lưu trữ?

Tôi không muốn sử dụng db_owner, vì điều đó sẽ cho phép xóa và cập nhật mà tôi không cần. Các điều khoản duy nhất tôi cần là:

CHỌN

EXECUTE

Trả lời

21

Hãy xem điều này article. Nó có thể cung cấp cho bạn một ý tưởng thú vị để làm điều này một cách nhanh chóng.

Mã sử ​​dụng trong bài viết rằng:

/* Create a new role for executing stored procedures */ 
CREATE ROLE db_executor 

/* Grant stored procedure execute rights to the role */ 
GRANT EXECUTE TO db_executor 

/* Add a user to the db_executor role */ 
EXEC sp_addrolemember 'db_executor', 'AccountName' 
+0

Nhưng những gì @Peter nói về cơ bản là chính xác ... bạn sẽ cần phải cấp đặc quyền thực thi tên người dùng ... trang web này sẽ cung cấp cho bạn một cách nhanh chóng để thực hiện điều đó. – Aaron

+0

Đó là một giải pháp đáng yêu! Bạn có phiếu bầu của tôi ... –

2

Không, tôi không tin rằng có một cơ sở dữ liệu hoặc máy chủ vai trò - bạn phải cấp phép thực hiện granularly để người dùng cho các thủ tục được lưu trữ có liên quan.

+1

hoặc bạn có thể đưa người dùng vào vai trò và cấp quyền cho từng proc cho vai trò chứ không phải 1000 người dùng khác nhau. – HLGEM

0

Để mở rộng câu trả lời, các ý chính nói chung là tạo ra một vai trò cơ sở dữ liệu và gán quyền cho vai trò đó. Để làm điều đó, bạn cần một số SQL năng động ưa thích như:

Set @Routines = Cursor Fast_Forward For 
    Select ROUTINE_SCHEMA + '.' + ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE 
    From INFORMATION_SCHEMA.ROUTINES 
    Where ROUTINE_NAME NOT LIKE 'dt_%' 
     Or ROUTINE_TYPE = 'FUNCTION' 

Open @Routines 
Fetch Next From @Routines Into @Procname, @RoutineType, @DataType 

While @@Fetch_Status = 0 
Begin 
    Set @Msg = 'Procname: ' + @Procname + ', Type: ' + @RoutineType + ', DataType: ' + Coalesce(@DataType,'') 
    Raiserror(@Msg, 10, 1) WITH NOWAIT 

    If @RoutineType = 'FUNCTION' And @DataType = 'TABLE' 
     Set @SQL = 'GRANT SELECT ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader' 
    Else 
     Set @SQL = 'GRANT EXECUTE ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader' 

    exec(@SQL) 

    Fetch Next From @Routines Into @Procname, @RoutineType, @DataType 
End 

Close @Routines 
Deallocate @Routines

Mã này sẽ cấp EXECUTE thủ tục lưu trữ và chức năng vô hướng và chọn chức năng người dùng định nghĩa mà trả về một kiểu TABLE.

2
CREATE ROLE db_executor 

GRANT EXECUTE TO db_executor 

Bây giờ, nếu bạn khởi động lại SQL Server Management Studio, khi bạn click vào trang "User Mapping" trong đến an ninh> đăng nhập phần, bạn sẽ thấy "db_executor" xuất hiện trong danh sách vai trò. Chỉ cần thêm người dùng hoặc bạn có thể làm điều đó theo cách thủ công:

EXEC sp_addrolemember 'db_executor', 'AccountName' 
+1

Bạn không cần phải khởi động lại SSMS để xem vai trò mới. Chỉ cần kích chuột phải vào thư mục Security-> Server Roles và chọn "Refresh" – shahzbot

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