147

Tôi đang gặp vấn đề khi thực hiện một chức năng.

Đây là những gì tôi đã làm:

  1. Tạo một hàm bằng SQL Server Management Studio. Nó đã được tạo thành công.
  2. Sau đó tôi đã thử thực hiện chức năng mới được tạo và đây là những gì tôi nhận được:

Quyền EXECUTE đã bị từ chối trên đối tượng 'xxxxxxx', cơ sở dữ liệu 'zzzzzzz', lược đồ 'dbo'.

|
146

Âm thanh như bạn cần cấp quyền thực thi cho người dùng (hoặc một nhóm mà họ là một phần) cho thủ tục được lưu trữ trong câu hỏi.

Ví dụ: bạn có thể cấp quyền truy cập như vậy:

USE zzzzzzz;
GRANT EXEC ON dbo.xxxxxxx TO PUBLIC
|
  • 1

    Xin chào, tôi biết đó là một chút thời gian trước đây, nhưng tôi có một câu hỏi. Có thể hành động như vậy có một số vấn đề bảo mật? Nó mở sp để được sử dụng cho tất cả mọi người?

    – Tạ Diệp Sương 10:39:37 04/08/2014
  • 1

    Có, nó cho phép bất cứ ai có kết nối với DB chạy thủ tục được lưu trữ. Tôi hy vọng mọi người lo lắng về bảo mật sẽ cấp quyền truy cập vào nhóm có liên quan trong cơ sở dữ liệu của họ .

    – Lý Thanh Huyền 11:13:13 04/08/2014
  • 1

    Bạn cũng có thể sử dụng GRANT EXEC TO PUBLICđể cấp quyền truy cập cho tất cả các đối tượng trong cơ sở dữ liệu

    – Dương Nhật Quốc 12:45:38 20/12/2015
  • 1

    Tôi sẽ không bao giờ cấp quyền thực thi cho vai trò công cộng. Bất kỳ cách nào trong môi trường của chúng tôi, nó đã được ủy quyền rằng vai trò công cộng bị vô hiệu hóa. Tôi luôn cấp quyền thực thi cho một người dùng cụ thể hoặc một vai trò được tạo rõ ràng cho mục đích này.

    – Hoàng Linh Trang 17:04:33 27/11/2017
  • 1

    Tại sao tất cả mọi người đều ủng hộ các ý kiến ​​đề xuất cho phép quyền CÔNG KHAI để thực thi bất cứ điều gì trong cơ sở dữ liệu? Đó là một trường hợp đặc biệt không phải là defacto.

    – Hồ Công Vinh 02:35:00 08/12/2018
86

Giải pháp tốt nhất mà tôi tìm thấy là tạo một vai trò cơ sở dữ liệu mới, tức là

CREATE ROLE db_executor;

và sau đó cấp quyền thực thi vai trò đó.

GRANT EXECUTE TO db_executor;

Bây giờ khi bạn đi đến các thuộc tính của người dùng và đi tới Ánh xạ người dùng và chọn cơ sở dữ liệu nơi bạn đã thêm vai trò mới, giờ đây vai trò mới sẽ hiển thị trong phần thành viên vai trò cơ sở dữ liệu cho:

Để biết thêm chi tiết đọc toàn bộ bài viết

|
  • 1

    Câu trả lời này là tốt nhất nếu bạn cần cấp EXECUTE cho tất cả các SP cho một lần đăng nhập người dùng cụ thể - mà không cần sử dụng công khai hoặc db_owner. Có vẻ như câu trả lời khôn ngoan và hữu ích nhất ở đây.

    – Trinh Phuong 21:10:53 26/10/2015
  • 1

    Vì một số lý do, đây là câu trả lời duy nhất phù hợp với tôi trên SQL Server 2012. Cung cấp cho người dùng quyền EXECUTE rõ ràng của tôi không hoạt động. Nó chỉ hoạt động nếu nó kế thừa sự cho phép thông qua một vai trò.

    – Tạ Đăng Khải 14:45:08 22/01/2016
  • 1

    Đây nên là câu trả lời. Nó làm việc như một cơ duyên đối với tôi. Cảm ơn rất nhiều!

    – Lý Ánh Nguyệt 09:46:54 18/05/2018
58

Trong Studio quản lý máy chủ Sql:

chỉ cần đi đến security->schema->dbo.

Nhấp đúp chuột vào dbo, sau đó nhấp vào permission tab->(blue font)view database permissionvà thoải mái cuộn các trường bắt buộc như "execute".Tự giúp mình chọn sử dụng granthoặc denyđiều khiển. Hy vọng điều này sẽ giúp :)

|
49

bạn cần phải chạy một cái gì đó như thế này

GRANT Execute ON [dbo].fnc_whatEver TO [domain\user]
|
33

Điều này sẽ hoạt động nếu bạn đang cố gắng cấp quyền cho Người dùng hoặc vai trò.

Sử dụng Microsoft SQL Server Management Studio:

  1. Truy cập: Cơ sở dữ liệu
  2. Nhấp chuột phải vào dbo.my_database
  3. Chọn: Thuộc tính
  4. Trên bảng điều khiển bên trái, nhấp vào: Quyền
  5. Chọn Người dùng hoặc Vai trò và trong Bảng tên
  6. Tìm Thực thi trong quyền và đánh dấu: Grant, With Grant hoặc Deny
|
12

Cho phép như vậy có thể nguy hiểm, đặc biệt nếu ứng dụng web của bạn sử dụng cùng tên người dùng đó.

Bây giờ người dùng web (và toàn bộ web trên toàn thế giới) cũng có quyền tạo và thả các đối tượng trong cơ sở dữ liệu của bạn. Hãy suy nghĩ SQL tiêm!

Tôi khuyên bạn chỉ nên cấp đặc quyền Thực thi cho người dùng cụ thể trên đối tượng đã cho như sau:

grant execute on storedProcedureNameNoquotes to myusernameNoquotes

Bây giờ người dùng myusernameNoquotes có thể thực thi thủ tục được lưu trữProcedureNameNoquotes mà không cần các quyền không cần thiết khác đối với dữ liệu có giá trị của bạn.

|
8

Bạn không có quyền thực thi nó, mặc dù bạn có đủ quyền để tạo nó.

Để biết thêm thông tin, hãy xem Quyền đối tượng GRANT (Transact-SQL)

|
3

Nếu bạn có các vấn đề như câu hỏi ở trên liên quan đến ngoại lệ được ném khi giải pháp được thực thi, thì vấn đề là sự cho phép, không được cấp đúng cho người dùng của nhóm đó để truy cập cơ sở dữ liệu / thủ tục được lưu trữ. Tất cả những gì bạn cần làm là làm một cái gì đó giống như những gì tôi có bên dưới, thay thế tên của tôi bằng tên cơ sở dữ liệu của bạn, các thủ tục được lưu trữ (chức năng) và loại quyền hoặc vai trò hoặc người mà bạn đang cấp quyền truy cập.

USE [StableEmployee]
GO
GRANT EXEC ON dbo.GetAllEmployees TO PUBLIC

/ ****** Đối tượng: StoredProcedure [dbo]. [Get ALLEmp nhân viên] Tập lệnh Ngày: 27/11/2016 16:27:27 ****** /

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[GetAllEmployees]
as
Begin
Select EmployeeId, Name, Gender, City, DepartmentId
From tblEmployee

End
|
2

bạn nên sửa đổi vai trò máy chủ, được thiết kế cho các đặc quyền bảo mật. thêm vai trò máy chủ sysadmin cho người dùng của bạn. để bảo mật tốt hơn, bạn có thể có các vai trò máy chủ tùy chỉnh. nhưng phương pháp này sẽ cung cấp cho bạn những gì bạn muốn bây giờ.

  1. Object Explorer -> Máy chủ -> Bảo mật -> Đăng nhập
  2. Nhấp chuột phải vào người dùng mong muốn của bạn
  3. Chuyển đến Vai trò Máy chủ ở phía bên tay trái
  4. Hãy chắc chắn rằng sysadmin đã được kiểm tra
  5. Nhấn OK và khởi động lại máy chủ SQL của bạn

Chúc may mắn

|
2

Bạn có thể cho phép mọi người thực thi quyền:

GRANT Execute on [dbo].your_object to [public]

"Công khai" là vai trò cơ sở dữ liệu mặc định mà tất cả người dùng là thành viên.

|
1

Nếu bạn làm cho người dùng này đặc biệt cho một cơ sở dữ liệu cụ thể, thì có lẽ bạn không đặt nó làm db_owner trong "ánh xạ người dùng" của các thuộc tính

|
1

Tôi đã phải đối mặt với cùng một vấn đề và tôi cũng đã giải quyết vấn đề cấp quyền cho db_owner cho người dùng Cơ sở dữ liệu.

|
  • 1

    Tôi không nghĩ rằng đây là một giải pháp tốt ... vì tôi không thể cấp cho ứng dụng web của mình quyền này .. tôi không biết ai đã bỏ phiếu này

    – Tạ Hoàng Huy 13:31:52 14/05/2014
  • 1

    Không nên, vì điều này rất không an toàn. Bạn nên tạo các vai trò phù hợp thay vì sử dụng db_owner có toàn quyền kiểm soát toàn bộ cơ sở dữ liệu

    – Võ Sơn Trang 13:10:41 19/05/2015
0

Đây là cách cấp phép cho một người dùng không công khai,

Truy vấn trực tiếp:

Use MyDatabase Grant execute on [dbo].[My-procedures-name] to [IIS APPPOOL\my-iis-pool] Go

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.